Sie können Cloud IoT Core verwenden, um Befehle an Geräte zu senden. Befehle sind vorübergehende, einmalige Anweisungen, die an Geräte gesendet werden, die mit Cloud IoT Core verbunden sind und das Befehlsthema abonniert haben.
Im Vergleich zu Gerätekonfigurationen sind Befehle schneller, können häufiger gesendet werden und sind unabhängig von anderen Cloud IoT Core-Features. Überlegen Sie sich bei der Wahl zwischen Befehlen und Konfigurationen, ob Sie Persistenz/Wissen im Zeitverlauf (Konfigurationen) benötigen oder Geschwindigkeit und/oder zeitgebundene Anweisungen (Befehle) bevorzugen.
Sie sind in folgenden Fällen nützlich:
- Nachrichten zu einer bestimmten Zeit schnell an viele Geräte senden
- Große Nachrichten zu einer bestimmten Zeit an viele Geräte senden
- Zeitgebundene Anweisungen senden, die ablaufen sollen
- Inkrementelle Geräteeinstellungen senden
Befehle haben folgende Eigenschaften:
- Sie werden direkt an verbundene Geräte gesendet, die abonniert haben.
- Sie werden nicht in Cloud IoT Core gespeichert.
- Sie werden für Geräte verworfen, die beim Senden des Befehls nicht abonniert hatten und nicht verbunden waren.
- Sie sind nicht eindeutig (Duplikate können gesendet werden, auch wenn dies unwahrscheinlich ist).
- Sie werden in keiner bestimmten Reihenfolge gesendet, aber ungefähr in der Sendereihenfolge zugestellt.
- Sie können ein beliebiges Format haben (Daten-Blob).
Derzeit unterstützt Cloud IoT Core nur Befehle über MQTT (nicht HTTP).
Befehle im Vergleich zu Konfigurationen
Cloud IoT Core unterstützt auch Gerätekonfigurationen. Konfigurationen sind konsistenter und dauerhafter als Befehle. Konfigurationen werden in Cloud IoT Core gespeichert. Bei Verwendung von MQTT wird die neueste Konfiguration schließlich an alle Geräte gesendet, die abonniert haben. Dies gilt auch für Geräte, die später abonnieren.
Die folgende Tabelle kann Ihnen helfen zu entscheiden, ob Sie einen Befehl oder eine Konfiguration verwenden:
Konfigurationen | Befehle |
---|---|
Die letzte Konfiguration wird bis zur Bereitstellung wiederholt (MQTT). | Wird für QoS 1 wiederholt, aber nicht garantiert. |
Persistent, d. h., wenn ein Gerät später eine Verbindung (MQTT) oder Abfragen (HTTP) herstellt, wird trotzdem die neueste Konfiguration bereitgestellt. | Nicht persistent; wird nur an Geräte gesendet, die zum beim Senden des Befehls verbunden sind. |
Jede neue Version ersetzt die vorherige Version. | Keine Beziehung oder Reihenfolge unter Befehlen. |
Teilt einem Gerät mit, was es "sein" soll; entspricht Status in Cloud IoT Core. | Teilt einem Gerät mit, was es zu einer bestimmten Zeit "tun" soll. |
Höhere Latenz | Geringere Latenz |
In der Regel kleine Größe (max. 64 KB) | Bis zu 256 KB |
Beliebiges, benutzerdefiniertes Blob | Beliebiges, benutzerdefiniertes Blob |
1 Aktualisierung pro Sekunde und Gerät | 1.000 pro Sek., pro Projekt (konfigurierbar) 2.500 pro Sek. und Registry |
Da Befehle in Cloud IoT Core nicht dauerhaft gespeichert und nicht auf unbestimmte Zeit wiederholt werden, sollten Sie nicht davon ausgehen, dass Gerätetelemetrie- oder -statusdaten einen bestimmten Befehl widerspiegeln. Unter Umständen hat das Gerät den Befehl nicht erhalten oder er hat nachfolgende Befehle oder Konfigurationen erhalten. Befehle sind vorübergehend und nicht Teil der langfristigen Gerätedaten.
Verwenden Sie die Gerätelogik oder Clientanwendungen, um die Befehlsreihenfolge und Duplikate zu verwalten.
Befehl senden
Verwenden Sie die Google Cloud Console, gcloud oder die Cloud IoT Core API, um einen Befehl an ein Gerät zu senden.
Console
So senden Sie einen Befehl an ein Gerät:
- Rufen Sie in der Google Cloud Console die Seite Registrierungen auf.
- Klicken Sie auf die ID der Registry für das Gerät.
- Klicken Sie im Registry-Menü links auf Geräte.
- Klicken Sie auf die ID des Geräts, an das Sie den Befehl senden möchten.
- Klicken Sie oben auf der Seite auf Befehl senden.
Wählen Sie das Format des Befehls aus:
- Text
- Base64
Geben Sie im Feld Befehlsdaten den Befehl ein.
Geben Sie im Feld Unterordner den Namen eines Unterordners für diesen Befehl ein. Geräte, die das Platzhalterthema abonniert haben, erhalten Befehle, die an Unterordner gesendet werden.
Klicken Sie auf Befehl senden.
gcloud
Führen Sie den Befehl gcloud iot devices commands send
aus, um einen Befehl an ein Gerät zu senden:
gcloud iot devices commands send \ { --command-file=COMMAND_FILE | --command-data=COMMAND_DATA } \ --region=REGION \ --registry=REGISTRY_ID \ --device=DEVICE_ID \ [--subfolder=SUBFOLDER]\
Wenn die Befehlsdaten Sonderzeichen enthalten, verwenden Sie --command-file
anstelle von --command-data
.
API
Verwenden Sie die Methode "SendCommandToDevice", um einen Befehl zu senden.
C#
Go
Java
Node.js
PHP
Python
Ruby
Befehl empfangen
Um einen Befehl zu erhalten, muss ein Gerät:
- Über das MQTT-Protokoll mit Cloud IoT Core verbunden sein.
- Das MQTT-Thema
/devices/{device-id}/commands/#
(#-Platzhalter ist erforderlich) abonniert haben.
Wenn das Platzhalterthema abonniert wurde, empfängt das Gerät an devices/{device-id}/commands
gesendete Befehle sowie Befehle, die an Unterordner gesendet werden (z. B. devices/{device-id}/commands/{subfolder}
). Das Abonnieren eines bestimmten Unterordners wird nicht unterstützt.
Befehle werden an Geräte gesendet, die zu diesem Zeitpunkt verbunden sind und abonniert haben. Sie werden nicht für Geräte in die Warteschlange gestellt oder beibehalten, die zu einem späteren Zeitpunkt eine Verbindung herstellen und abonnieren.
Dienstqualität (Quality of Service, QoS)
Die Befehlsübermittlung hängt von der verwendeten Dienstqualitätsstufe ab:
QoS-Ebene | Garantie |
---|---|
0 | Keine Garantie (nur Best-Effort-Prinzip), selbst wenn die Anfrage OK zurückgibt. |
1 | Mindestens einmalige Zustellung garantiert, wenn für die sendCommandtoDevice-Anfrage OK zurückgegeben wird |
Mit anderen Worten: Bei QoS 0 gilt eine Nachricht unabhängig von der Geräteantwort als erfolgreich, sobald sie gesendet wird. Bei QoS 1 bedeutet ein Erfolg, dass das Gerät die Nachrichtenzustellung bestätigt hat. Beachten Sie, dass "mindestens einmalige" Übermittlung bedeutet, dass das Gerät den Befehl mehrmals empfangen kann. Cloud IoT Core verfolgt nicht, wie oft der Befehl empfangen wurde.
Fehler
Wenn das Zeitlimit für den Befehl (60 Sekunden, wie unter Kontingente und Limits angegeben) erreicht wurde, wird
DEADLINE_EXCEEDED
zurückgegeben.Wenn das Gerät nicht verbunden ist oder verbunden ist, aber nicht das MQTT-Platzhalterthema abonniert hat, wird
FAILED_PRECONDITION
zurückgegeben.
Logging
An Geräte gesendete Befehle sowie Bestätigungen von Geräten werden in Cloud Logging erfasst.
Preise
Befehle werden wie alle anderen über MQTT gesendeten Nachrichten abgerechnet. Weitere Informationen finden Sie unter Preise.