1. Hinweis
Als IoT-Entwickler können Sie Smart-Home-Aktionen entwickeln, mit denen Nutzer ihre Geräte über die Touchbedienung in der Google Home App und Sprachbefehle von Assistant steuern können.
Für Smart-Home-Aktionen wird Home Graph verwendet, um Kontextdaten über das Zuhause und seine Geräte bereitzustellen und so eine logische Karte des Zuhauses zu erstellen. So kann Assistant die Anfragen des Nutzers in Bezug auf seinen Aufenthaltsort besser nachvollziehen. In Home Graph kann beispielsweise ein Wohnzimmer gespeichert werden, in dem verschiedene Arten von Geräten verschiedener Hersteller enthalten sind, z. B. Thermostat, Lampe, Ventilator und Staubsauger.
Voraussetzungen
- Entwicklerhandbuch für Smart-Home-Aktionen erstellen
Aufgaben
In diesem Codelab veröffentlichen Sie einen Cloud-Dienst, der eine virtuelle intelligente Waschmaschine verwaltet, erstellen dann eine Smart-Home-Aktion und verbinden ihn mit Assistant.
Lerninhalte
- So stellen Sie einen Smart-Home-Cloud-Dienst bereit
- So verbindest du deinen Dienst mit Assistant
- Änderungen des Gerätestatus bei Google veröffentlichen
Voraussetzungen
- Ein Webbrowser, z. B. Google Chrome.
- Ein iOS- oder Android-Gerät, auf dem die Google Home App installiert ist
- Node.js Version 10.16 oder höher
- Ein Google Cloud-Rechnungskonto
2. Erste Schritte
Aktivitätseinstellungen aktivieren
Damit Sie Google Assistant nutzen können, müssen Sie bestimmte Aktivitätsdaten mit Google teilen. Google Assistant benötigt diese Daten, um richtig zu funktionieren. Die Anforderung zum Teilen von Daten ist jedoch nicht spezifisch für das SDK. Wenn Sie diese Daten teilen möchten, erstellen Sie ein Google-Konto, falls Sie noch keines haben. Dabei kann es sich um ein beliebiges Google-Konto handeln. Es muss sich dabei nicht um Ihr Entwicklerkonto handeln.
Öffnen Sie die Seite Aktivitätseinstellungen des Google-Kontos, das Sie mit Assistant verwenden möchten.
Die folgenden Schieberegler müssen aktiviert sein:
- Web- & App-Aktivitäten: Sie müssen das Kästchen Auch den Chrome-Verlauf sowie Aktivitäten auf Websites, in Apps und auf Geräten berücksichtigen, die Google-Dienste nutzen anklicken.
- Geräteinformationen
- Sprach- & Audioaktivitäten
Actions-Projekt erstellen
- Rufen Sie die Actions on Google Developer Console auf.
- Klicken Sie auf Neues Projekt, geben Sie einen Namen für das Projekt ein und klicken Sie auf PROJEKT ERSTELLEN.
Die Smart-Home App auswählen
Wählen Sie in der Actions Console auf dem Übersichtsbildschirm die Option Smart Home aus.
Wähle die Karte Smart Home aus und klicke auf Jetzt erstellen. Du wirst dann zur Projektkonsole weitergeleitet.
Firebase CLI installieren
Mit der Firebase-Befehlszeile können Sie Ihre Webanwendungen lokal bereitstellen und Ihre Web-App für Firebase Hosting bereitstellen.
Führen Sie den folgenden npm-Befehl über das Terminal aus, um die Befehlszeile zu installieren:
npm install -g firebase-tools
Prüfen Sie mit dem folgenden Befehl, ob die Befehlszeile korrekt installiert wurde:
firebase --version
Autorisieren Sie die Firebase CLI mit Ihrem Google-Konto, indem Sie folgenden Befehl ausführen:
firebase login
3. Starte-App ausführen
Nachdem Sie die Entwicklungsumgebung eingerichtet haben, können Sie das Startprojekt 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:
...oder Sie können das GitHub-Repository über die Befehlszeile klonen:
git clone https://github.com/google-home/smarthome-washer.git
Über das Projekt
Das Startprojekt enthält die folgenden Unterverzeichnisse:
public:
Eine Front-End-Benutzeroberfläche zur einfachen Steuerung und Überwachung des Status der intelligenten Waschmaschine.functions:
Ein vollständig implementierter Cloud-Dienst, der die intelligente Waschmaschine mit Cloud Functions for Firebase und Firebase Realtime Database verwaltet.
Mit Firebase verbinden
Rufen Sie das Verzeichnis washer-start
auf und richten Sie die Firebase CLI mit Ihrem Actions-Projekt ein:
cd washer-start firebase use <project-id>
Firebase-Projekt konfigurieren
Initialisieren Sie ein Firebase-Projekt.
firebase init
Wählen Sie die Befehlszeilen-Funktionen Echtzeitdatenbank, Funktionen und Hosting aus, die Firebase Hosting enthalten.
? 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 für Ihr Projekt erforderlichen APIs und Funktionen initialisiert.
Initialisieren Sie Realtime Database, 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 Startprojekts verwenden, wählen Sie die Standarddatei für die Sicherheitsregeln aus und achten Sie darauf, dass Sie die vorhandene Datei mit den Datenbankregeln nicht ü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
Bei der Konfiguration von Functions sollten Sie die Standarddateien verwenden und die vorhandenen Dateien index.js und package.json im Projektbeispiel nicht ü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 No 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 im Projektcode das Verzeichnis public
und die vorhandene Datei index.html verwendet werden. 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:
- Gehen Sie über die Benutzeroberfläche zum Ordner
../functions
unter dem Projekt, wählen Sie die ausgeblendete Datei.eslintrc.js
aus und löschen Sie sie. Verwechseln Sie ihn nicht mit.eslintrc.json
, der ähnlich heißt. - Über die Befehlszeile:
cd functions rm .eslintrc.js
Damit Sie eine korrekte und vollständige Firebase-Konfiguration haben, kopieren Sie die Datei firebase.json
aus dem Verzeichnis app-done
in das Verzeichnis app-start
und überschreiben Sie dabei die Datei im Verzeichnis app-start
.
Führen Sie im Verzeichnis app-start
folgende Schritte aus:
cp -vp ../app-done/firebase.json .
In Firebase bereitstellen
Nachdem Sie nun die Abhängigkeiten installiert und Ihr Projekt konfiguriert haben, können Sie die Anwendung zum ersten Mal ausführen.
firebase deploy
Die Ausgabe der Konsole sollte so aussehen:
... ✔ Deploy complete! Project Console: https://console.firebase.google.com/project/<project-id>/overview Hosting URL: https://<project-id>.web.app
Mit diesem Befehl werden eine Webanwendung sowie mehrere Cloud Functions for Firebase-Funktionen bereitgestellt.
Öffnen Sie die Hosting-URL in Ihrem Browser (https://<project-id>.web.app
), um die Webanwendung aufzurufen. Sie sehen dann die folgende Oberfläche:
Diese Web-UI stellt eine Drittanbieterplattform dar, mit der Gerätestatus angezeigt oder geändert werden können. Klicken Sie auf AKTUALISIEREN, um Geräteinformationen in Ihre Datenbank zu übertragen. Sie werden zwar keine Änderungen auf der Seite sehen, der aktuelle Status der Waschmaschine wird jedoch in der Datenbank gespeichert.
Als Nächstes verbinden Sie den von Ihnen bereitgestellten Cloud-Dienst über die Actions Console mit Google Assistant.
Actions Console-Projekt konfigurieren
Wählen Sie unter Übersicht > Aktion erstellen die Option Aktion(en) hinzufügen aus. Geben Sie die URL für die Cloud Functions-Funktion ein, die die Auftragsausführung für die Smart-Home-Intents bereitstellt. Klicken Sie dann auf Speichern.
https://us-central1-<project-id>.cloudfunctions.net/smarthome
Fügen Sie auf dem Tab Develop > Invocation einen Anzeigenamen für Ihre Aktion hinzu und klicken Sie auf Save (Speichern). Dieser Name wird in der Google Home App angezeigt.
Wählen Sie im linken Navigationsbereich die Option Entwickeln > Kontoverknüpfung aus, um die Kontoverknüpfung zu aktivieren. Verwenden Sie diese Einstellungen zur Kontoverknüpfung:
Client-ID |
|
Clientschlüssel |
|
Autorisierungs-URL |
|
Token-URL |
|
Klicken Sie auf Speichern, um die Konfiguration der Kontoverknüpfung zu speichern. Klicken Sie dann auf Testen, um Tests für Ihr Projekt zu aktivieren.
Sie werden zum Simulator weitergeleitet. Wenn „Test jetzt aktiviert“ nicht angezeigt wird, klicken Sie auf Test zurücksetzen, um zu prüfen, ob das Testen aktiviert ist.
Jetzt können Sie mit der Implementierung der Webhooks beginnen, die erforderlich sind, um den Gerätestatus mit Assistant zu verbinden.
4. Waschmaschine erstellen
Nachdem du deine Aktion konfiguriert hast, kannst du Geräte hinzufügen und Daten senden. Ihr Cloud-Dienst muss die folgenden Intents verarbeiten:
- Ein
SYNC
-Intent tritt auf, wenn Assistant wissen möchte, welche Geräte der Nutzer verbunden hat. Sie wird an Ihren Dienst gesendet, wenn der Nutzer ein Konto verknüpft. Sie sollten mit einer JSON-Nutzlast antworten, die alle Geräte des Nutzers und deren Funktionen enthält. - Ein
QUERY
-Intent tritt auf, wenn Assistant den aktuellen Status oder Status eines Geräts wissen möchte. Du solltest mit einer JSON-Nutzlast mit dem Status jedes angeforderten Geräts antworten. - Ein
EXECUTE
-Intent tritt auf, 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. - Ein
DISCONNECT
-Intent tritt auf, wenn der Nutzer die Verknüpfung seines Kontos mit Assistant aufhebt. Du solltest keine Ereignisse mehr von den Geräten dieses Nutzers an Assistant senden.
In den folgenden Abschnitten aktualisieren Sie die Funktionen, die Sie zuvor für die Verarbeitung dieser Intents bereitgestellt haben.
Antwort auf SYNC aktualisieren
Öffnen Sie functions/index.js
. Sie enthält den Code zum Antworten auf Anfragen von Assistant.
Sie müssen einen SYNC
-Intent verarbeiten, indem Sie die Gerätemetadaten und -funktionen zurückgeben. Aktualisieren Sie die JSON-Datei im Array onSync
mit den Geräteinformationen und den empfohlenen Eigenschaften für eine Wäschewaschmaschine.
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 mithilfe der Firebase CLI bereit:
firebase deploy --only functions
Mit Google Assistant verknüpfen
Damit du deine Smart-Home-Aktion testen kannst, musst du dein Projekt mit einem Google-Konto verknüpfen. Dies ermöglicht Tests über Google Assistant-Oberflächen und die Google Home App, die im selben Konto angemeldet sind.
- Öffnen Sie auf Ihrem Smartphone die Google Assistant-Einstellungen. Sie sollten mit demselben Konto angemeldet sein wie in der Konsole.
- Gehen Sie zu Google Assistant > Einstellungen > Smart-Home-Steuerung (unter „Assistant“).
- Klicken Sie rechts oben auf das Suchsymbol.
- Sie können mithilfe des Präfixes [test] nach Ihrer Test-App suchen.
- Wählen Sie das Element aus. Google Assistant authentifiziert sich dann bei deinem Dienst und sendet eine
SYNC
-Anfrage, in der dein Dienst dem Nutzer eine Liste der Geräte zur Verfügung stellt.
Öffnen Sie die Google Home App und prüfen Sie, ob Sie die Waschmaschine sehen können.
5. Befehle und Abfragen verarbeiten
Nachdem Ihr Cloud-Dienst nun Google das Gerät der Waschmaschine ordnungsgemäß meldet, müssen Sie die Möglichkeit hinzufügen, den Gerätestatus anzufordern und Befehle zu senden.
QUERY-Intent verarbeiten
Ein QUERY
-Intent enthält eine Reihe von Geräten. Du solltest für jedes Gerät mit seinem aktuellen Status antworten.
Bearbeiten Sie in functions/index.js
den Handler QUERY
so, dass die Liste der Zielgeräte in der Intent-Anfrage verarbeitet wird.
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,
};
});
Gibt für jedes in der Anfrage enthaltene Gerät den aktuellen Status zurück, der in der Realtime Database gespeichert ist. Aktualisieren Sie die Funktionen queryFirebase
und queryDevice
, um die Statusdaten 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,
};
};
Intent EXECUTE verarbeiten
Der Intent EXECUTE
verarbeitet Befehle zum Aktualisieren des Gerätestatus. In der Antwort werden der Status jedes Befehls, z. B. SUCCESS
, ERROR
oder PENDING
, und der neue Gerätestatus zurückgegeben.
Bearbeiten Sie in functions/index.js
den EXECUTE
-Handler, um die Liste der Traits, die aktualisiert werden müssen, und die Gruppe von Zielgeräten für jeden Befehl zu verarbeiten:
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 in der Realtime Database für jeden Befehl und jedes Zielgerät die Werte, die dem angeforderten Merkmal entsprechen. Ändere die updateDevice
-Funktion so, dass die entsprechende Firebase-Referenz aktualisiert und der aktualisierte Gerätestatus zurückgegeben wird.
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 = {isRunning: params.start};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
case 'action.devices.commands.PauseUnpause':
state = {isPaused: params.pause};
ref = firebaseRef.child(deviceId).child('StartStop');
break;
}
return ref.update(state)
.then(() => state);
};
6. Aktion testen
Nachdem Sie alle drei Intents implementiert haben, können Sie testen, ob Ihre Aktion die Waschmaschine steuert.
In Firebase bereitstellen
Stellen Sie die aktualisierte Cloud-Auftragsausführung mithilfe der Firebase CLI bereit:
firebase deploy --only functions
Waschmaschine testen
Jetzt können Sie sehen, wie sich der Wert ändert, wenn Sie einen der folgenden Sprachbefehle über Ihr Smartphone verwenden:
„Hey Google, schalte meine Waschmaschine ein.“
„Hey Google, pausiere meine Waschmaschine.“
„Hey Google, halte die Waschmaschine an.“
Du kannst auch den aktuellen Status deiner Waschmaschine anzeigen, indem du Fragen stellst.
„Hey Google, ist meine Waschmaschine an?“
„Hey Google, läuft meine Waschmaschine?“
„Hey Google, in welchem Spülgang ist meine Waschmaschine?“
Sie können diese Abfragen und Befehle in den Logs einsehen, die in der Firebase Console im Bereich Funktionen unter Ihrer Funktion angezeigt werden. Weitere Informationen zu Firebase-Logs finden Sie unter Logs schreiben und ansehen.
Sie finden diese Abfragen und Befehle auch in der Google Cloud Console, indem Sie Logging > Log-Explorer aufrufen. Weitere Informationen zum Google Cloud-Logging finden Sie unter Mit Cloud Logging auf Ereignisprotokolle zugreifen.
7. Aktualisierungen 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. Bei der Implementierung fehlt jedoch die Möglichkeit, dass Ihr Dienst proaktiv Ereignisinformationen wie Änderungen an der Gerätepräsenz oder dem Gerätestatus an Assistant senden kann.
Mit der Funktion Synchronisierung anfordern können Sie eine neue Synchronisierungsanfrage auslösen, wenn Nutzer Geräte hinzufügen oder entfernen oder wenn sich die Gerätefunktionen ändern. Mit der Funktion Berichtsstatus kann Ihr Cloud-Dienst den Status eines Geräts proaktiv an Home Graph senden, wenn Nutzer den Gerätestatus physisch ändern – z. B. durch Einschalten eines Lichtschalters – oder den Status über einen anderen Dienst ändern.
In diesem Abschnitt fügen Sie Code hinzu, um diese Methoden aus der Front-End-Webanwendung aufzurufen.
HomeGraph API aktivieren
Die HomeGraph API ermöglicht das Speichern und Abfragen von Geräten und deren Status in Home Graph eines Nutzers. 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 mit Ihren Aktionen übereinstimmt. <project-id>.
. Klicken Sie dann im Bildschirm „API-Bibliothek“ für die HomeGraph API auf Aktivieren.
Berichtsstatus aktivieren
Schreibvorgänge in die Realtime Database lösen die Funktion reportstate
im Startprojekt aus. Aktualisieren Sie die Funktion reportstate
in functions/index.js
, um die in der Datenbank geschriebenen Daten zu erfassen und sie über „Berichtsstatus“ in Home Graph zu veröffentlichen.
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 anfordern“ aktivieren
Durch Aktualisieren des Symbols in der Frontend-Web-UI wird die Funktion requestsync
im Startprojekt ausgelöst. Implementieren Sie 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-UI auf die Schaltfläche Aktualisieren und prüfen Sie, ob im Protokoll der Firebase Console eine Synchronisierungsanfrage angezeigt wird.
Passen Sie als Nächstes die Attribute des Waschmaschinengeräts in der Frontend-Weboberfläche an und klicken Sie auf Aktualisieren. Prüfen Sie, ob die an Google gemeldete Statusänderung in den Firebase Console-Protokollen angezeigt wird.
8. Glückwunsch
Glückwunsch! Du hast Assistant mithilfe von Smart-Home-Aktionen erfolgreich in den Cloud-Dienst eines Geräts integriert.
Weitere Informationen
Hier sind einige Ideen, die Sie umsetzen können, um tiefer ins Detail zu gehen:
- Fügen Sie Ihrem Gerät modes und Ein-/Aus-Schaltflächen hinzu.
- Du kannst deinem Gerät weitere unterstützte Traits hinzufügen.
- Informationen zur lokalen Ausführung für Smart Homes
- Weitere Informationen finden Sie in unserem GitHub-Beispiel.
Weitere Informationen zum Testen und Einreichen einer Aktion zur Überprüfung sowie zum Zertifizierungsprozess für die Veröffentlichung deiner Aktion für Nutzer