Smart-Home-Geräte mit Google Assistant verbinden

1. Hinweis

Als IoT-Entwickler können Sie Cloud-zu-Cloud-Integrationen erstellen, mit denen Ihre Nutzer ihre Geräte über Touchbedienung in der Google Home App und Sprachbefehle mit Assistant steuern können.

79266e5f45e6ae20.gif

Bei Cloud-zu-Cloud-Integrationen werden Kontextdaten zum Zuhause und seinen Geräten über den Zuhause-Graphen bereitgestellt, um eine logische Karte des Zuhauses zu erstellen. Anhand dieses Kontexts kann Assistant die Anfragen des Nutzers in Bezug auf seinen Standort im Zuhause besser nachvollziehen. Im Home Graph kann beispielsweise das Konzept eines Wohnzimmers gespeichert werden, das mehrere Arten von Geräten verschiedener Hersteller enthält, z. B. einen Thermostat, eine Lampe, einen Ventilator und einen Staubsauger.

d009cef0f903d284.jpeg

Vorbereitung

Aufgaben

In diesem Codelab veröffentlichen Sie einen Cloud-Dienst, der eine virtuelle intelligente Waschmaschine verwaltet, erstellen dann eine Cloud-zu-Cloud-Integration und verbinden sie mit Assistant.

Aufgaben in diesem Lab

  • Smart-Home-Cloud-Dienst bereitstellen
  • So verbinden Sie Ihren Dienst mit Assistant
  • Gerätestatusänderungen bei Google veröffentlichen

Voraussetzungen

2. Erste Schritte

Aktivitätseinstellungen aktivieren

Wenn Sie Google Assistant verwenden möchten, müssen Sie bestimmte Aktivitätsdaten mit Google teilen. Google Assistant benötigt diese Daten, um ordnungsgemäß zu funktionieren. Die Datenweitergabe ist jedoch nicht spezifisch für das SDK. Wenn Sie diese Daten freigeben möchten, erstellen Sie ein Google-Konto, falls Sie noch keines haben. Sie können jedes Google-Konto verwenden, es muss nicht Ihr Entwicklerkonto sein.

Öffnen Sie die Seite Aktivitätseinstellungen für das Google-Konto, das Sie mit Assistant verwenden möchten.

Die folgenden Ein/Aus-Schaltflächen müssen aktiviert sein:

  • Web- und App-Aktivitäten: Setzen Sie außerdem ein Häkchen in das Kästchen Auch den Chrome-Verlauf sowie Aktivitäten auf Websites, in Apps und auf Geräten berücksichtigen, die Google-Dienste nutzen.
  • Geräteinformationen
  • Sprach- und Audioaktivitäten

Cloud-zu-Cloud-Integrationsprojekt erstellen

  1. Rufen Sie die Developer Console auf.
  2. Klicken Sie auf Projekt erstellen, geben Sie einen Namen für das Projekt ein und klicken Sie auf Projekt erstellen.

Projekt benennen

Cloud-zu-Cloud-Integration auswählen

Wählen Sie in der Developer Console auf der Projektstartseite unter Cloud-zu-Cloud die Option Cloud-zu-Cloud-Integration hinzufügen aus.

Cloud-zu-Cloud-Integration hinzufügen

Firebase CLI installieren

Mit der Firebase-Befehlszeile (Firebase Command Line Interface, CLI) können Sie Ihre Webanwendungen lokal bereitstellen und in Firebase Hosting bereitstellen.

Führen Sie zum Installieren der Befehlszeile den folgenden npm-Befehl im Terminal aus:

npm install -g firebase-tools

Führen Sie folgenden Befehl aus, um zu prüfen, ob die Befehlszeile korrekt installiert wurde:

firebase --version

Autorisieren Sie die Firebase CLI mit Ihrem Google-Konto:

firebase login

3. Start-App ausführen

Nachdem Sie Ihre Entwicklungsumgebung eingerichtet haben, können Sie das Starterprojekt bereitstellen, um zu prüfen, ob alles richtig konfiguriert ist.

Quellcode abrufen

Klicken Sie auf den folgenden Link, um das Beispiel für dieses Codelab auf Ihren Entwicklungscomputer herunterzuladen:

Sie können das GitHub-Repository auch über die Befehlszeile klonen:

git clone https://github.com/google-home/smarthome-washer.git

Informationen zum Projekt

Das Startprojekt enthält die folgenden Unterverzeichnisse:

  • public: Eine Benutzeroberfläche, mit der sich der Status der intelligenten Waschmaschine ganz einfach steuern und beobachten lässt.
  • functions: Ein vollständig implementierter Cloud-Dienst, der die intelligente Waschmaschine mit Cloud Functions for Firebase und Firebase Realtime Database verwaltet.

Firebase-Projekt erstellen

  1. Rufen Sie Firebase auf.
  2. Klicken Sie auf Projekt erstellen und geben Sie den Projektnamen ein.
  3. Klicken Sie auf das Kästchen für die Zustimmung und dann auf Weiter. Wenn kein Kästchen für die Vereinbarung vorhanden ist, können Sie diesen Schritt überspringen.
    Firebase-Projekt erstellen
  4. Suchen Sie nach der Projekt-ID Ihres Firebase-Projekts. Rufen Sie die Projektübersicht auf und klicken Sie auf das Symbol „Einstellungen“ > Projekteinstellungen.
    Projekteinstellungen öffnen
  5. Ihr Projekt wird auf dem Tab Allgemein aufgeführt.
    Allgemeine Projekteinstellungen

Mit Firebase verbinden

Rufen Sie das Verzeichnis washer-start auf und richten Sie die Firebase CLI mit Ihrem Integrationsprojekt ein:

cd washer-start
firebase use <firebase-project-id>

Firebase-Projekt konfigurieren

Initialisieren Sie ein Firebase-Projekt.

firebase init

Wählen Sie die CLI-Features Realtime Database, Functions und die Hosting-Funktion aus, die Firebase Hosting umfasst.

? Which Firebase CLI features do you want to set up for this directory? Press Space to select features, then
 Enter to confirm your choices.
❯◉ Realtime Database: Configure a security rules file for Realtime Database and (optionally) provision default instance
 ◯ Firestore: Configure security rules and indexes files for Firestore
 ◉ Functions: Configure a Cloud Functions directory and its files
 ◉ Hosting: Configure files for Firebase Hosting and (optionally) set up GitHub Action deploys
 ◯ Hosting: Set up GitHub Action deploys
 ◯ Storage: Configure a security rules file for Cloud Storage
 ◯ Emulators: Set up local emulators for Firebase products
 ◯ Remote Config: Configure a template file for Remote Config
 ◯ Extensions: Set up an empty Extensions manifest

Dadurch werden die erforderlichen APIs und Funktionen für Ihr Projekt initialisiert.

Initialisieren Sie die Echtzeitdatenbank, wenn Sie dazu aufgefordert werden. Sie können den Standardspeicherort für die Datenbankinstanz verwenden.

? It seems like you haven't initialized Realtime Database in your project yet. Do you want to set it up?
Yes

? Please choose the location for your default Realtime Database instance:
us-central1

Da Sie den Code des Starterprojekts verwenden, wählen Sie die Standarddatei für die Sicherheitsregeln aus und achten Sie darauf, die vorhandene Datenbankregelndatei nicht zu überschreiben.

? File database.rules.json already exists. Do you want to overwrite it with the Realtime Database Security Rules for <project-ID>-default-rtdb from the Firebase Console?
No

Wenn Sie Ihr Projekt neu initialisieren, wählen Sie Überschreiben aus, wenn Sie gefragt werden, ob Sie eine Codebasis initialisieren oder überschreiben möchten.

? Would you like to initialize a new codebase, or overwrite an existing one?
Overwrite

Verwenden Sie beim Konfigurieren Ihrer Funktionen die Standarddateien und achten Sie darauf, die vorhandenen Dateien index.js und package.json im Projektbeispiel nicht zu überschreiben.

? What language would you like to use to write Cloud Functions?
JavaScript

? Do you want to use ESLint to catch probable bugs and enforce style?
No

? File functions/package.json already exists. Overwrite?
No

? File functions/index.js already exists. Overwrite?
No

Wenn Sie Ihr Projekt neu initialisieren, wählen Sie Nein aus, wenn Sie gefragt werden, ob Sie „functions/.gitignore“ initialisieren oder überschreiben möchten.

? File functions/.gitignore already exists. Overwrite?
No
? Do you want to install dependencies with npm now?
Yes

Konfigurieren Sie abschließend Ihre Hosting-Einrichtung so, dass das Verzeichnis public im Projektcode verwendet wird, und verwenden Sie die vorhandene Datei index.html. Wählen Sie Nein aus, wenn Sie gefragt werden, ob Sie ESLint verwenden möchten.

? What do you want to use as your public directory?
public

? Configure as a single-page app (rewrite all urls to /index.html)?
Yes

? Set up automatic builds and deploys with GitHub?
No

? File public/index.html already exists. Overwrite?
 No

Wenn ESLint versehentlich aktiviert wurde, gibt es zwei Möglichkeiten, es zu deaktivieren:

  1. Rufen Sie über die Benutzeroberfläche den Ordner ../functions im Projekt auf, wählen Sie die ausgeblendete Datei .eslintrc.js aus und löschen Sie sie. Nicht mit dem ähnlich benannten .eslintrc.json verwechseln.
  2. Über die Befehlszeile:
    cd functions
    rm .eslintrc.js
    

Fügen Sie in der Datei washer-done/firebase.json den folgenden Code hinzu:

{
  "database": {
    "rules": "database.rules.json"
  },
  "hosting": {
    "public": "public",
    "ignore": [
      "firebase.json",
      "**/.*",
      "**/node_modules/**"
    ],
    "rewrites": [
      {
        "source": "**",
        "destination": "/index.html"
      }
    ]
  },
    "headers": [{
      "source" : "**/*.@(js|html)",
      "headers" : [ {
        "key" : "Cache-Control",
        "value" : "max-age=0"
      } ]
    }],
  "functions": [
    {
      "source": "functions",
      "codebase": "default",
      "ignore": [
        "node_modules",
        ".git",
        "firebase-debug.log",
        "firebase-debug.*.log",
        "*.local"
      ]
    }
  ]
}

In Firebase bereitstellen

Nachdem Sie die Abhängigkeiten installiert und Ihr Projekt konfiguriert haben, können Sie die App zum ersten Mal ausführen.

firebase deploy

Die Ausgabe der Konsole sollte so aussehen:

...

✔ Deploy complete!

Project Console: https://console.firebase.google.com/project/<firebase-project-id>/overview
Hosting URL: https://<firebase-project-id>.web.app

Mit diesem Befehl werden eine Webanwendung und mehrere Cloud Functions for Firebase bereitgestellt.

Öffnen Sie die Hosting-URL in Ihrem Browser (https://.web.app), um die Webanwendung aufzurufen. Daraufhin wird die folgende Benutzeroberfläche angezeigt:

5845443e94705557.png

Diese Web-UI ist eine Drittanbieterplattform, mit der sich Gerätestatus ansehen oder ändern lassen. Klicken Sie auf AKTUALISIEREN, um Ihre Datenbank mit Geräteinformationen zu füllen. Auf der Seite werden keine Änderungen angezeigt, aber der aktuelle Status Ihrer Waschmaschine wird in der Datenbank gespeichert.

Jetzt ist es an der Zeit, den von Ihnen bereitgestellten Cloud-Dienst über die Google Home Developer Console mit Google Assistant zu verbinden.

Developer Console-Projekt konfigurieren

Geben Sie auf dem Tab Entwickeln einen Anzeigenamen für die Interaktion ein. Dieser Name wird in der Google Home App angezeigt.

Anzeigenamen hinzufügen

Laden Sie unter App-Branding eine png-Datei für das App-Symbol mit einer Größe von 144 × 144 Pixeln und dem Namen .png hoch.

App-Symbol hinzufügen

So aktivieren Sie die Kontoverknüpfung:

Client-ID

ABC123

Clientschlüssel

DEF456

Autorisierungs-URL

https://us-central1-
.cloudfunctions.net/fakeauth

Token-URL

https://us-central1-
.cloudfunctions.net/faketoken

URLs für die Kontoverknüpfung aktualisieren

Geben Sie unter Cloud-Ausführungs-URL die URL Ihrer Cloud-Funktion ein, die die Smart-Home-Intents ausführt.

https://us-central1--cloudfunctions.net/smarthome

Cloud Functions-URL hinzufügen

Klicken Sie auf Speichern, um die Projektkonfiguration zu speichern, und dann auf Weiter: Test, um Tests für Ihr Projekt zu aktivieren.

Cloud-zu-Cloud-Integration testen

Jetzt können Sie mit der Implementierung der Webhooks beginnen, die erforderlich sind, um den Gerätestatus mit Assistant zu verknüpfen.

4. Waschmaschinen erstellen

Nachdem Sie die Integration konfiguriert haben, können Sie Geräte hinzufügen und Daten senden. Ihr Cloud-Dienst muss die folgenden Intents verarbeiten:

  • Ein SYNC-Intent wird ausgelöst, wenn Assistant wissen möchte, welche Geräte der Nutzer verbunden hat. Dieser wird an deinen Dienst gesendet, wenn der Nutzer ein Konto verknüpft. Du solltest mit einer JSON-Nutzlast aller Geräte des Nutzers und ihrer Funktionen antworten.
  • Eine QUERY-Intent wird verwendet, wenn Assistant den aktuellen Status eines Geräts wissen möchte. Sie sollten mit einer JSON-Nutzlast mit dem Status jedes angeforderten Geräts antworten.
  • Ein EXECUTE-Intent wird ausgelöst, wenn Assistant ein Gerät im Namen eines Nutzers steuern möchte. Sie sollten mit einer JSON-Nutzlast mit dem Ausführungsstatus jedes angeforderten Geräts antworten.
  • Eine DISCONNECT-Intention wird ausgelöst, wenn der Nutzer die Verknüpfung seines Kontos mit Assistant aufhebt. Sie sollten keine Ereignisse mehr für die Geräte dieses Nutzers an Assistant senden.

In den folgenden Abschnitten aktualisieren Sie die Funktionen, die Sie zuvor zum Bearbeiten dieser Intents bereitgestellt haben.

SYNC-Antwort aktualisieren

Öffnen Sie functions/index.js. Diese Datei enthält den Code, mit dem auf Anfragen von Assistant geantwortet wird.

Sie müssen eine SYNC-Intention verarbeiten, indem Sie die Gerätemetadaten und ‑funktionen zurückgeben. Aktualisieren Sie das JSON im onSync-Array, um die Geräteinformationen und empfohlenen Merkmale für eine Waschmaschine einzuschließen.

index.js

app.onSync((body) => {
  return {
    requestId: body.requestId,
    payload: {
      agentUserId: USER_ID,
      devices: [{
        id: 'washer',
        type: 'action.devices.types.WASHER',
        traits: [
          'action.devices.traits.OnOff',
          'action.devices.traits.StartStop',
          'action.devices.traits.RunCycle',
        ],
        name: {
          defaultNames: ['My Washer'],
          name: 'Washer',
          nicknames: ['Washer'],
        },
        deviceInfo: {
          manufacturer: 'Acme Co',
          model: 'acme-washer',
          hwVersion: '1.0',
          swVersion: '1.0.1',
        },
        willReportState: true,
        attributes: {
          pausable: true,
        },
      }],
    },
  };
});

In Firebase bereitstellen

Stellen Sie die aktualisierte Cloud-Auftragsausführung mit der Firebase CLI bereit:

firebase deploy --only functions

Wenn Sie Ihre Cloud-zu-Cloud-Integration testen möchten, müssen Sie Ihr Projekt mit einem Google-Konto verknüpfen. So können Sie über Google Assistant-Oberflächen und die Google Home App testen, die im selben Konto angemeldet sind.

  1. Öffnen Sie auf Ihrem Smartphone die Google Assistant-Einstellungen. Sie müssen mit demselben Konto angemeldet sein wie in der Console.
  2. Gehen Sie zu Google Assistant > Einstellungen > Smart-Home-Steuerung (unter „Assistant“).
  3. Klicken Sie oben rechts auf das Suchsymbol.
  4. Suchen Sie mit dem Präfix [test] nach Ihrer Test-App.
  5. Wählen Sie diesen Artikel aus. Google Assistant authentifiziert sich dann bei Ihrem Dienst und sendet eine SYNC-Anfrage, in der Ihr Dienst aufgefordert wird, eine Liste der Geräte für den Nutzer bereitzustellen.

Öffnen Sie die Google Home App und prüfen Sie, ob Ihre Waschmaschine angezeigt wird.

ae252220753726f6.png

5. Befehle und Abfragen verarbeiten

Nachdem Ihr Cloud-Dienst die Waschmaschine jetzt ordnungsgemäß an Google meldet, müssen Sie die Möglichkeit hinzufügen, den Gerätestatus abzufragen und Befehle zu senden.

Absicht „QUERY“ verarbeiten

Ein QUERY-Intent enthält eine Reihe von Geräten. Sie sollten für jedes Gerät den aktuellen Status angeben.

Bearbeiten Sie in functions/index.js den QUERY-Handler, um die Liste der Zielgeräte in der Intent-Anfrage zu verarbeiten.

index.js

app.onQuery(async (body) => {
  const {requestId} = body;
  const payload = {
    devices: {},
  };
  const queryPromises = [];
  const intent = body.inputs[0];
  for (const device of intent.payload.devices) {
    const deviceId = device.id;
    queryPromises.push(queryDevice(deviceId)
        .then((data) => {
        // Add response to device payload
          payload.devices[deviceId] = data;
        }
        ));
  }
  // Wait for all promises to resolve
  await Promise.all(queryPromises);
  return {
    requestId: requestId,
    payload: payload,
  };
});

Gib für jedes Gerät in der Anfrage den aktuellen Status zurück, der in der Realtime Database gespeichert ist. Aktualisieren Sie die Funktionen queryFirebase und queryDevice, um den Status der Waschmaschine zurückzugeben.

index.js

const queryFirebase = async (deviceId) => {
  const snapshot = await firebaseRef.child(deviceId).once('value');
  const snapshotVal = snapshot.val();
  return {
    on: snapshotVal.OnOff.on,
    isPaused: snapshotVal.StartStop.isPaused,
    isRunning: snapshotVal.StartStop.isRunning,
  };
};

const queryDevice = async (deviceId) => {
  const data = await queryFirebase(deviceId);
  return {
    on: data.on,
    isPaused: data.isPaused,
    isRunning: data.isRunning,
    currentRunCycle: [{
      currentCycle: 'rinse',
      nextCycle: 'spin',
      lang: 'en',
    }],
    currentTotalRemainingTime: 1212,
    currentCycleRemainingTime: 301,
  };
};

EXECUTE-Intention verarbeiten

Der Intent EXECUTE verarbeitet Befehle zum Aktualisieren des Gerätestatus. Die Antwort gibt den Status jedes Befehls zurück, z. B. SUCCESS, ERROR oder PENDING, sowie den neuen Gerätestatus.

Bearbeiten Sie in functions/index.js den EXECUTE-Handler, um die Liste der Merkmale zu verarbeiten, die aktualisiert werden müssen, und die Zielgeräte für jeden Befehl:

index.js

app.onExecute(async (body) => {
  const {requestId} = body;
  // Execution results are grouped by status
  const result = {
    ids: [],
    status: 'SUCCESS',
    states: {
      online: true,
    },
  };

  const executePromises = [];
  const intent = body.inputs[0];
  for (const command of intent.payload.commands) {
    for (const device of command.devices) {
      for (const execution of command.execution) {
        executePromises.push(
            updateDevice(execution, device.id)
                .then((data) => {
                  result.ids.push(device.id);
                  Object.assign(result.states, data);
                })
                .catch(() => functions.logger.error('EXECUTE', device.id)));
      }
    }
  }

  await Promise.all(executePromises);
  return {
    requestId: requestId,
    payload: {
      commands: [result],
    },
  };
});

Aktualisieren Sie für jeden Befehl und jedes Zielgerät die Werte in der Echtzeitdatenbank, die dem angeforderten Attribut entsprechen. Ändern Sie die Funktion updateDevice, um die entsprechende Firebase-Referenz zu aktualisieren und den aktualisierten Gerätestatus zurückzugeben.

index.js

const updateDevice = async (execution, deviceId) => {
  const {params, command} = execution;
  let state; let ref;
  switch (command) {
    case 'action.devices.commands.OnOff':
      state = {on: params.on};
      ref = firebaseRef.child(deviceId).child('OnOff');
      break;
    case 'action.devices.commands.StartStop':
      state = params.start
      ? {isRunning: true, isPaused: false}
      : {isRunning: false, isPaused: false};
      ref = firebaseRef.child(deviceId).child('StartStop');
      break;
    case 'action.devices.commands.PauseUnpause':
      const data = await queryDevice(deviceId);
      state = (data.isPaused === false && data.isRunning === false)
        ? {isRunning: false, isPaused: false}
        : {isRunning: !params.pause, isPaused: params.pause};
      ref = firebaseRef.child(deviceId).child('StartStop');
      break;
  }

  return ref.update(state)
      .then(() => state);
};

6. Integration testen

Nachdem Sie alle drei Intents implementiert haben, können Sie testen, ob Ihre Integration die Waschmaschine steuert.

In Firebase bereitstellen

Stellen Sie die aktualisierte Cloud-Auftragsausführung mit der Firebase CLI bereit:

firebase deploy --only functions

Waschmaschine testen

Sie können die Wertänderung jetzt sehen, wenn Sie einen der folgenden Sprachbefehle über Ihr Smartphone ausprobieren:

„Hey Google, schalte meine Waschmaschine ein.“

„Hey Google, pausiere meine Waschmaschine.“

„Hey Google, schalte meine Waschmaschine aus.“

Sie können auch Fragen stellen, um den aktuellen Status Ihrer Waschmaschine zu sehen.

„Hey Google, ist meine Waschmaschine an?“

„Hey Google, läuft meine Waschmaschine?“

„Hey Google, welchen Zyklus läuft meine Waschmaschine gerade?“

Sie finden diese Abfragen und Befehle in den Logs, die in der Firebase Console im Bereich Funktionen unter Ihrer Funktion angezeigt werden. Weitere Informationen zu Firebase-Protokollen finden Sie unter Protokolle schreiben und aufrufen.

Sie finden diese Abfragen und Befehle auch in der Google Cloud Console unter Logging > Log-Explorer. Weitere Informationen zum Logging in Google Cloud finden Sie unter Auf Ereignisprotokolle mit Cloud Logging zugreifen.

7. Änderungen an Google melden

Sie haben Ihren Cloud-Dienst vollständig in die Smart-Home-Intents eingebunden, sodass Nutzer den aktuellen Status ihrer Geräte steuern und abfragen können. Die Implementierung bietet jedoch noch keine Möglichkeit, dass Ihr Dienst proaktiv Ereignisinformationen wie Änderungen an der Gerätepräsenz oder dem Gerätestatus an Assistant sendet.

Mit Synchronisierung anfordern können Sie eine neue Synchronisierungsanfrage auslösen, wenn Nutzer Geräte hinzufügen oder entfernen oder sich ihre Gerätefunktionen ändern. Mit Status melden kann Ihr Cloud-Dienst den Status eines Geräts proaktiv an den Home Graph senden, wenn Nutzer den Status eines Geräts physisch ändern, z. B. einen Lichtschalter einschalten, oder den Status über einen anderen Dienst ändern.

In diesem Abschnitt fügen Sie Code hinzu, um diese Methoden aus der Frontend-Webanwendung aufzurufen.

HomeGraph API aktivieren

Mit der HomeGraph API können Geräte und ihre Status im Home Graph eines Nutzers gespeichert und abgefragt werden. Wenn Sie diese API verwenden möchten, müssen Sie zuerst die Google Cloud Console öffnen und die HomeGraph API aktivieren.

Wählen Sie in der Google Cloud Console das Projekt aus, das Ihrer Integration entspricht. <project-id>. Klicken Sie dann auf dem Bildschirm „API-Bibliothek“ für die HomeGraph API auf Aktivieren.

ee198858a6eac112.png

Berichtsstatus aktivieren

Schreibvorgänge in der Realtime Database lösen die Funktion reportstate im Starterprojekt aus. Aktualisieren Sie die Funktion reportstate in functions/index.js, um die in die Datenbank geschriebenen Daten zu erfassen und über den Berichtsstatus in den Home Graph zu posten.

index.js

exports.reportstate = functions.database.ref('{deviceId}').onWrite(
    async (change, context) => {
      functions.logger.info('Firebase write event triggered Report State');
      const snapshot = change.after.val();

      const requestBody = {
        requestId: 'ff36a3cc', /* Any unique ID */
        agentUserId: USER_ID,
        payload: {
          devices: {
            states: {
              /* Report the current state of our washer */
              [context.params.deviceId]: {
                on: snapshot.OnOff.on,
                isPaused: snapshot.StartStop.isPaused,
                isRunning: snapshot.StartStop.isRunning,
              },
            },
          },
        },
      };

      const res = await homegraph.devices.reportStateAndNotification({
        requestBody,
      });
      functions.logger.info('Report state response:', res.status, res.data);
    });

Synchronisierung der Anfrage aktivieren

Wenn Sie das Symbol in der Web-UI des Front-Ends aktualisieren, wird die requestsync-Funktion im Starterprojekt ausgelöst. Implementiere die Funktion requestsync in functions/index.js, um die HomeGraph API aufzurufen.

index.js

exports.requestsync = functions.https.onRequest(async (request, response) => {
  response.set('Access-Control-Allow-Origin', '*');
  functions.logger.info(`Request SYNC for user ${USER_ID}`);
  try {
    const res = await homegraph.devices.requestSync({
      requestBody: {
        agentUserId: USER_ID,
      },
    });
    functions.logger.info('Request sync response:', res.status, res.data);
    response.json(res.data);
  } catch (err) {
    functions.logger.error(err);
    response.status(500).send(`Error requesting sync: ${err}`);
  }
});

In Firebase bereitstellen

Stellen Sie den aktualisierten Code mit der Firebase CLI bereit:

firebase deploy --only functions

Die Implementierung testen

Klicken Sie in der Web-Benutzeroberfläche auf die Schaltfläche Aktualisieren ae8d3b25777a5e30.png und prüfen Sie, ob im Firebase Console-Protokoll eine Synchronisierungsanfrage angezeigt wird.

Passen Sie als Nächstes die Attribute der Waschmaschine in der Web-UI des Frontends an und klicken Sie auf Aktualisieren. Prüfen Sie, ob die an Google gemeldete Statusänderung in Ihren Firebase Console-Logs angezeigt wird.

8. Glückwunsch

674c4f4392e98c1.png

Glückwunsch! Sie haben Assistant mithilfe von Cloud-zu-Cloud-Integrationen in einen Geräte-Cloud-Dienst eingebunden.

Weitere Informationen

Hier sind einige Ideen, wie Sie tiefer in die Materie einsteigen können:

Außerdem erfährst du mehr darüber, wie du eine Integration testen und zur Überprüfung einreichen kannst, einschließlich des Zertifizierungsverfahrens, um deine Integration für Nutzer zu veröffentlichen.