Puoi utilizzare Cloud IoT Core per inviare comandi ai dispositivi. I comandi sono istruzioni transitorie e una tantum inviate ai dispositivi connessi a Cloud IoT Core e abbonati all'argomento dei comandi.
Rispetto alle configurazioni dei dispositivi, i comandi sono più veloci, possono essere inviati più frequentemente e sono indipendenti dalle altre funzionalità di Cloud IoT Core. Quando scegli tra comandi e configurazioni, valuta se hai bisogno di persistenza/conoscenza nel tempo (configurazioni) o se preferisci istruzioni relative a velocità e/o vincoli temporali (comandi).
I comandi possono essere utili quando vuoi:
- Inviare messaggi rapidamente a più dispositivi in un momento specifico
- Inviare messaggi di grandi quantità a molti dispositivi in un momento specifico
- Invia istruzioni con limitazioni di tempo che devono scadere
- Inviare impostazioni incrementali del dispositivo
I comandi hanno le seguenti caratteristiche:
- Messaggio inviato direttamente ai dispositivi connessi a cui è stato sottoscritto un abbonamento
- Non persistente in Cloud IoT Core
- Ignorata per i dispositivi non abbonati e connessi al momento dell'invio del comando
- Non univoco (possono essere inviati duplicati, anche se è improbabile)
- Non inviato in nessun ordine (ma consegnato all'incirca nell'ordine di invio)
- In qualsiasi formato (blob di dati)
Attualmente, Cloud IoT Core supporta i comandi solo su MQTT (non su HTTP).
Comandi rispetto alle configurazioni
Cloud IoT Core supporta anche le configurazioni dei dispositivi. Le configurazioni sono più coerenti e permanenti rispetto ai comandi. Le configurazioni vengono mantenute in Cloud IoT Core e, quando si utilizza MQTT, l'ultima configurazione viene alla fine inviata a tutti i dispositivi abbonati, inclusi quelli che si abbonano in seguito.
La tabella seguente può aiutarti a decidere se utilizzare un comando o una configurazione:
Configurazioni | Comandi |
---|---|
Riprova la configurazione più recente fino alla pubblicazione (MQTT) | Hai provato a provare QoS 1, ma la pubblicazione non è garantita |
Persistente, quindi se un dispositivo si connette (MQTT) o esegue un sondaggio (HTTP) in un secondo momento, la configurazione più recente verrà comunque consegnata | Non permanente; consegnato soltanto ai dispositivi connessi al momento dell'invio del comando |
Ogni nuova versione sostituisce quella precedente | Nessun rapporto o ordine tra i comandi |
Indica a un dispositivo cosa "essere"; corrisponde allo stato in Cloud IoT Core | Indica a un dispositivo l'azione da eseguire in un momento specifico |
Latenza più elevata | Minore latenza |
Dimensione standard (64 kB) | Fino a 256 kB |
blob arbitrario definito dall'utente | blob arbitrario definito dall'utente |
1 aggiornamento al secondo per dispositivo | 1000 al secondo, per progetto (configurabile) 2500 al secondo, per registro |
Poiché i comandi non vengono conservati in Cloud IoT Core e non vengono ripetuti, non dovresti aspettarti che dati di telemetria o stato del dispositivo rispecchino un particolare comando. È possibile che il dispositivo non abbia ricevuto il comando o che abbia ricevuto comandi o configurazioni successivi. I comandi sono progettati per essere transitori e non fanno parte dei dati a lungo termine dei dispositivi.
Per gestire l'ordinamento dei comandi e i duplicati, utilizza le applicazioni logiche o client del dispositivo.
Invio di un comando
Per inviare un comando a un dispositivo, utilizza la console Google Cloud, gcloud o l'API Cloud IoT Core.
Console
Per inviare un comando a un dispositivo:
- Vai alla pagina Registry nella console Google Cloud.
- Fai clic sull'ID del registro relativo al dispositivo.
- Nel menu del Registro di sistema a sinistra, fai clic su Dispositivi.
- Fai clic sull'ID del dispositivo a cui vuoi inviare il comando.
- Nella parte superiore della pagina, fai clic su Send Command (Invia comando).
Seleziona il formato del comando:
- Testo
- Base64
Inserisci il comando nel campo Dati dei comandi.
Nel campo facoltativo Subfolder (Sottocartella), inserisci il nome di una sottocartella per questo comando. I dispositivi abbonati all'argomento con caratteri jolly riceveranno i comandi inviati alle sottocartelle.
Fai clic su Invia comando.
gcloud
Per inviare un comando a un dispositivo, esegui questo comando: gcloud iot devices commands send
:
gcloud iot devices commands send \ { --command-file=COMMAND_FILE | --command-data=COMMAND_DATA } \ --region=REGION \ --registry=REGISTRY_ID \ --device=DEVICE_ID \ [--subfolder=SUBFOLDER]\
Se i dati del comando contengono caratteri speciali, utilizza --command-file
invece di --command-data
.
API
Utilizza il metodo SendCommandToDevice per inviare un comando.
C#
Go
Java
Node.js
PHP
Python
Ruby
Ricezione di un comando
Per ricevere un comando, un dispositivo deve:
- Essere connesso a Cloud IoT Core utilizzando il protocollo MQTT
- Iscriviti all'argomento MQTT
/devices/{device-id}/commands/#
(è richiesto il carattere jolly #)
Abbonandosi all'argomento con caratteri jolly, il dispositivo riceverà i comandi inviati a devices/{device-id}/commands
, nonché i comandi inviati a sottocartelle (ad esempio devices/{device-id}/commands/{subfolder}
). L'iscrizione a una sottocartella specifica non è supportata.
I comandi vengono inviati ai dispositivi connessi e abbonati in un momento specifico. Non vengono messi in coda o conservati per i dispositivi che si connettono e abbonati in un secondo momento.
Qualità del servizio (QoS)
La distribuzione dei comandi dipende dal livello QoS che stai utilizzando:
Livello QoS | Garanzia |
---|---|
0 | Nessuna garanzia (solo tentativo migliore), anche quando la richiesta restituisce OK |
1 | Consegna "almeno una volta" garantita se la richiesta sendcommandtoDevice restituisce OK |
In altre parole, a QoS 0 un messaggio viene considerato non appena viene inviato, indipendentemente dalla risposta del dispositivo. In QoS 1, l'esito positivo indica che il dispositivo ha confermato la consegna del messaggio. Tieni presente che la consegna "almeno una volta" significa che il dispositivo può ricevere il comando più volte; Cloud IoT Core non monitora il numero di volte in cui il comando è stato ricevuto.
Errori
Se viene raggiunto il timeout del comando (60 sec, come indicato in Quote e limiti),
DEADLINE_EXCEEDED
viene ripristinato.Se il dispositivo non è connesso o è connesso, ma non è iscritto all'argomento carattere jolly MQTT, viene restituito
FAILED_PRECONDITION
.
Logging
I comandi inviati ai dispositivi, nonché le conferme dei dispositivi, vengono registrati in Cloud Logging.
Prezzi
I comandi vengono fatturati come tutti gli altri messaggi inviati tramite MQTT. Per i dettagli, consulta Prezzi.