1. Hinweis
Als Entwickler des Internets der Dinge (IoT) können Sie Smart-Home-Aktionen erstellen, mit denen Ihre Nutzer ihre Geräte über die Touchbedienung in der Google Home App und Sprachbefehle mit Assistant steuern können.
Smart-Home-Aktionen nutzen Home Graph, um Kontextdaten zum Zuhause und seinen Geräten bereitzustellen und eine logische Karte des Zuhauses zu erstellen. Dieser Kontext gibt Assistant ein natürliches Verständnis der Anfragen des Nutzers in Relation zu seinem Standort in seinem Zuhause. In Home Graph kann beispielsweise das Konzept eines Wohnzimmers gespeichert werden, in dem sich verschiedene Arten von Geräten verschiedener Hersteller befinden, z. B. Thermostate, Lampe, Ventilatoren und Staubsauger.
Vorbereitung
- Entwicklerleitfaden Smart-Home-Aktion 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 sie mit Assistant.
Aufgaben in diesem Lab
- Einen Smart-Home-Cloud-Dienst bereitstellen
- Dienst mit Assistant verbinden
- Gerätestatusänderungen bei Google veröffentlichen
Voraussetzungen
- Ein Webbrowser wie 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
Wenn Sie Google Assistant verwenden möchten, 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 gilt jedoch nicht speziell für das SDK. Wenn Sie diese Daten teilen möchten, erstellen Sie ein Google-Konto, falls Sie noch keines haben. Sie können ein beliebiges Google-Konto verwenden. Es muss nicht Ihr Entwicklerkonto sein.
Öffnen Sie die Seite Aktivitätseinstellungen für das Google-Konto, mit dem Sie Assistant verwenden möchten.
Die folgenden Schalter müssen aktiviert sein:
- Web- und App-Aktivitäten: Klicken Sie außerdem das Kästchen Auch den Chrome-Verlauf sowie Aktivitäten auf Websites, in Apps und auf Geräten berücksichtigen, die Google-Dienste nutzen an.
- Geräteinformationen
- Sprach- und 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.
Wähle die Smart Home App aus.
Wählen Sie in der Actions Console auf dem Bildschirm „Übersicht“ die Option Smart Home aus.
Wählen Sie die Karte Smart Home aus und klicken Sie auf Mit dem Erstellen beginnen. Sie werden dann zur Projektkonsole weitergeleitet.
Firebase CLI installieren
Mit der Firebase-Befehlszeile (Command Line Interface, CLI) können Sie Ihre Web-Apps 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
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, indem Sie folgenden Befehl ausführen:
firebase login
3. Start-App ausführen
Nachdem Sie Ihre 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 klonen das GitHub-Repository über die Befehlszeile:
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 zum einfachen Steuern und Überwachen 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 CLI-Funktionen, Realtime Database, Functions und das Hosting-Feature aus, das Firebase Hosting enthält.
? 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 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 Startcode des Projekts verwenden, wählen Sie die Standarddatei für die Sicherheitsregeln aus und achten Sie darauf, dass Sie die vorhandene Datenbankregeldatei 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
Falls 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 der Funktionen die Standarddateien und achten Sie darauf, dass Sie 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 (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 im Projektcode das Verzeichnis public
verwendet wird, und verwenden Sie die vorhandene Datei index.html. Wählen Sie No (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 grafische Benutzeroberfläche zum Ordner
../functions
unter dem Projekt, wählen Sie die versteckte Datei.eslintrc.js
aus und löschen Sie sie. Verwechseln Sie ihn nicht mit dem ähnlich benannten.eslintrc.json
. - Über die Befehlszeile:
cd functions rm .eslintrc.js
Damit Ihre Firebase-Konfiguration korrekt und vollständig ist, kopieren Sie die Datei firebase.json
aus dem Verzeichnis washer-done
in das Verzeichnis washer-start
und überschreiben Sie dabei die Datei in washer-start
.
Im Verzeichnis washer-start
:
cp -vp ../washer-done/firebase.json .
In Firebase bereitstellen
Nachdem Sie nun die Abhängigkeiten installiert und das 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 wird eine Webanwendung zusammen mit mehreren Cloud Functions for Firebase bereitgestellt.
Öffnen Sie die Hosting-URL in Ihrem Browser (https://<project-id>.web.app
), um die Web-App aufzurufen. Sie sehen die folgende Benutzeroberfläche:
Diese Web-UI stellt eine Drittanbieterplattform zum Ansehen oder Ändern des Gerätestatus dar. Klicken Sie auf AKTUALISIEREN, um die Datenbank mit Geräteinformationen zu füllen. Auf der Seite sind keine Änderungen zu sehen, aber der aktuelle Status der Waschmaschine wird in der Datenbank gespeichert.
Verbinden Sie nun den von Ihnen bereitgestellten Cloud-Dienst über die Actions Console mit Google Assistant.
Actions Console-Projekt konfigurieren
Gehen Sie unter Übersicht > Erstellen Sie eine Aktion und wählen Sie Aktion(en) hinzufügen aus. Geben Sie die URL der Cloud Functions-Funktion ein, die die Ausführung für die Smart-Home-Intents ermöglicht, und klicken Sie auf Save (Speichern).
https://us-central1-<project-id>.cloudfunctions.net/smarthome
Klicken Sie auf der Seite Entwickeln > Aufruf, geben Sie einen Anzeigenamen für Ihre Aktion ein und klicken Sie auf Speichern. Dieser Name wird in der Google Home App angezeigt.
Um die Kontoverknüpfung zu aktivieren, wählen Sie die Option Entwickeln > Kontoverknüpfung. Folgende Einstellungen für die Kontoverknüpfung verwenden:
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.
Du wirst zum Simulator weitergeleitet. Wenn die Option Test now enabled (Jetzt testen) nicht angezeigt wird, klicken Sie auf Reset Test (Test zurücksetzen), um zu prüfen, ob das Testen aktiviert ist.
Jetzt können Sie die Webhooks implementieren, 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:
- Der Intent
SYNC
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 aller Geräte des Nutzers und ihrer Funktionen antworten. - Der Intent
QUERY
tritt auf, wenn Assistant den aktuellen Status oder Status eines Geräts wissen möchte. Sie sollten mit einer JSON-Nutzlast mit dem Status jedes angeforderten Geräts antworten. - Der Intent
EXECUTE
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. - Der Intent
DISCONNECT
tritt auf, wenn der Nutzer die Verknüpfung seines Kontos mit Assistant aufhebt. Du solltest keine Ereignisse mehr für die Geräte dieses Nutzers an Assistant senden.
In den folgenden Abschnitten werden Sie die Funktionen aktualisieren, die Sie zuvor zur Verarbeitung dieser Intents bereitgestellt haben.
SYNC-Antwort aktualisieren
Öffne functions/index.js
. Sie enthält den Code, um auf Anfragen von Assistant zu antworten.
Zum Verarbeiten eines SYNC
-Intents müssen Sie die Gerätemetadaten und ‐funktionen zurückgeben. Aktualisieren Sie den JSON-Code im onSync
-Array so, dass er die Geräteinformationen und die empfohlenen Merkmale für eine Waschmaschine enthält.
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. So können Tests über Google Assistant-Oberflächen und die Google Home App durchgeführt werden, 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.
- Rufen Sie Google Assistant > Einstellungen > Smart-Home-Steuerung (unter „Assistant“).
- Klicken Sie oben rechts auf das Suchsymbol.
- Verwenden Sie das Präfix [test], um nach Ihrer Test-App zu suchen.
- Wählen Sie das Element aus. Google Assistant authentifiziert sich dann bei deinem Dienst und sendet eine
SYNC
-Anfrage, in der der Dienst aufgefordert wird, eine Liste der Geräte für den Nutzer bereitzustellen.
Ö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 die Waschmaschine jetzt ordnungsgemäß an Google meldet, müssen Sie die Möglichkeit hinzufügen, den Gerätestatus anzufordern und Befehle zu senden.
QUERY-Intent verarbeiten
Ein QUERY
-Intent umfasst 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,
};
});
Gibt für jedes in der Anfrage enthaltene Gerät den in der Realtime Database gespeicherten aktuellen Status zurück. 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,
};
};
Umgang mit EXECUTE-Intent
Der EXECUTE
-Intent verarbeitet Befehle zur Aktualisierung des Gerätestatus. Die Antwort gibt den Status jedes Befehls, z. B. SUCCESS
, ERROR
oder PENDING
, sowie den neuen Gerätestatus zurück.
Bearbeiten Sie in functions/index.js
den EXECUTE
-Handler, um die Liste der zu aktualisierenden Traits und die Zielgeräte 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 für jeden Befehl und jedes Zielgerät die Werte in der Realtime Database, die dem angeforderten Trait 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 = {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 ausführen:
„Hey Google, schalte meine Waschmaschine ein.“
„Hey Google, pausiere die Waschmaschine.“
„Hey Google, stopp die Waschmaschine.“
Sie können den aktuellen Status Ihrer Waschmaschine auch sehen, indem Sie Fragen stellen.
„Hey Google, ist meine Waschmaschine an?“
„Hey Google, läuft meine Waschmaschine?“
„Hey Google, in welchem Waschgang ist meine Waschmaschine?“
Sie können diese Abfragen und Befehle in den Logs ansehen, die unter Ihrer Funktion im Bereich Funktionen der Firebase Console 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 unter Logging > Log-Explorer: Weitere Informationen zum Google Cloud-Logging finden Sie unter Mit Cloud Logging auf Ereignislogs 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. Ihr Dienst hat jedoch noch nicht die Möglichkeit, Ereignisinformationen wie Änderungen der Gerätepräsenz oder des Gerätestatus proaktiv an Assistant zu senden.
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 Option Report State (Status melden) kann Ihr Cloud-Dienst den Status eines Geräts proaktiv an Home Graph senden, wenn Nutzer den Gerätestatus 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 Front-End-Webanwendung aufzurufen.
HomeGraph API aktivieren
Die HomeGraph API ermöglicht die Speicherung und Abfrage von Geräten und deren Status im Home Graph eines Nutzers. Wenn du diese API verwenden möchtest, musst du zuerst die Google Cloud Console öffnen und die HomeGraph API aktivieren.
Wähle in der Google Cloud Console das Projekt aus, das deinen Aktionen entspricht <project-id>.
. Klicke dann auf dem 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 die Datenbank geschriebenen Daten zu erfassen und sie über den Berichtsstatus in 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);
});
Anfragesynchronisierung aktivieren
Durch das Aktualisieren des Symbols in der Front-End-Web-UI wird die Funktion requestsync
im Startprojekt 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-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 der Waschmaschineneinheit in der Frontend-Web-UI an und klicken Sie auf Aktualisieren. Prüfen Sie, ob die Statusänderung, die Google gemeldet wurde, in Ihren Firebase Console-Protokollen zu sehen ist.
8. Glückwunsch
Glückwunsch! Du hast Assistant mithilfe von Smart-Home-Aktionen erfolgreich in einen Cloud-Dienst für Geräte eingebunden.
Weitere Informationen
Hier sind einige Ideen, die Sie umsetzen können, um noch tiefer in das Thema einzutauchen:
- Fügen Sie Ihrem Gerät Modi und Ein-/Aus-Schaltflächen hinzu.
- Füge deinem Gerät weitere unterstützte Traits hinzu.
- Entdecken Sie die lokale Ausführung von Smart-Home-Geräten.
- Sehen Sie sich unser GitHub-Beispiel an, um mehr zu erfahren.
Weitere Informationen zum Testen und Einreichen einer Aktion zur Überprüfung, einschließlich des Zertifizierungsverfahrens für die Veröffentlichung deiner Aktion für Nutzer, findest du hier.