In questa pagina viene spiegato in che modo i gateway possono utilizzare il bridge MQTT per comunicare con Cloud IoT Core e pubblicare eventi di telemetria per conto di dispositivi associati. Prima di iniziare, leggi Utilizzo del bridge MQTT per informazioni generali sull'utilizzo del bridge MQTT con Cloud IoT Core.
Utilizzo dei gateway con il bridge MQTT
- Dopo aver creato e configurato il gateway, connettilo a Cloud IoT Core tramite il bridge MQTT.
- Crea dispositivi se non l'hai già fatto.
(Facoltativo) Associa i dispositivi al gateway.
Quando utilizzi il bridge MQTT, devi associare i dispositivi solo se non possono generare i loro JWT.
(Facoltativo) Iscriviti all'argomento dell'errore di sistema per ricevere un feedback sull'esito positivo o meno delle operazioni del dispositivo.
Utilizza il gateway per inoltrare telemetria, stato del dispositivo e messaggi di configurazione per conto dei suoi dispositivi. Prova la demo end-to-end per scoprire come.
Messaggi dei gateway
Dopo che il gateway si connette a Cloud IoT Core tramite il bridge MQTT, può inviare o ricevere tre tipi di messaggi:
- Controlla i messaggi: collega un dispositivo al gateway o scollega un dispositivo dal gateway. Questi messaggi vengono inviati tra il gateway e Cloud IoT Core. Cloud IoT Core accetta messaggi di controllo solo da gateway; se un altro tipo di dispositivo tenta di inviare un messaggio di controllo, Cloud IoT Core chiude la connessione.
- Messaggi da gateway e dispositivi:possono essere inoltrati dal gateway per conto di un dispositivo o inviati direttamente dal gateway stesso.
- Messaggi di errore di sistema: quando il gateway è iscritto all'argomento di errore di sistema MQTT per conto del dispositivo, Cloud IoT Core invia messaggi di errore al gateway ogni volta che il dispositivo rileva un errore.
Collegare i dispositivi a un gateway
Per abilitare il gateway per il proxy delle comunicazioni tra dispositivi con Cloud IoT Core, chiedi al gateway di pubblicare un messaggio di controllo /devices/{device_ID_to_attach}/attach
per QoS sul bridge MQTT.
Se hai configurato il gateway per l'autenticazione dei dispositivi utilizzando i JWT dei dispositivi, il payload del messaggio allegato dovrà includere il token nel formato JSON: { "authorization" : "{JWT_token}" }
. In caso contrario, Cloud IoT Core autentica il dispositivo controllando la propria associazione con il gateway.
Risposta riuscita
Dopo l'autorizzazione del dispositivo, Cloud IoT Core invia un messaggio PUBACK al gateway in risposta al messaggio di collegamento. Dopo aver ricevuto il messaggio PUBACK, il gateway può pubblicare e iscriversi agli argomenti di Cloud IoT Core per conto del dispositivo, ad esempio messaggi di telemetria o configurazione.
Se un dispositivo è già collegato quando il gateway invia il messaggio allegato, Cloud IoT Core risponde con un messaggio PUBACK.
Scollegamento di dispositivi dal gateway
Per scollegare un dispositivo dal gateway, chiedi al gateway di pubblicare un messaggio di controllo QoS 1 /devices/{device_ID}/detach
sul bridge MQTT. Se il dispositivo non è collegato al momento dell'invio del messaggio, Cloud IoT Core ignora il messaggio di scollegamento e invia un messaggio PUBACK.
Risolvere i problemi
Per ricevere una notifica quando un dispositivo rileva un errore, abbonati il gateway all'argomento MQTT /devices/{gateway_ID}/errors
utilizzando il livello QoS 0:
Go
Il passaggio in cui il dispositivo si registra all'argomentoerrors
è evidenziato di seguito:
Java
Il passaggio in cui il dispositivo si registra all'argomentoerrors
è evidenziato di seguito:
Node.js
Ad esempio, il passaggio in cui il dispositivo si abbona all'argomentoconfig
è evidenziato di seguito. Per iscriverti all'argomento errors
, specifica /devices/${gateway_ID}/errors
Python
Il passaggio in cui il dispositivo si registra all'argomentoerrors
è evidenziato di seguito:
Cloud IoT Core invia gli errori del gateway in base al meglio delle prestazioni, in QoS 0. Se il gateway non è iscritto a /devices/{gateway_ID}/errors
, Cloud IoT Core registra gli eventi di errore, ma non invia un messaggio PUBACK.
Gli errori MQTT hanno la seguente struttura:
string error_type; // A string description of the error type. string device_id; // The ID of the device that caused the error. string description; // A description of the error.
Se il messaggio di errore è stato attivato da un messaggio MQTT, verranno allegate anche le seguenti informazioni:
string message_type; // The string MQTT message type. string topic; // The MQTT topic if applicable, otherwise it is empty. int packet_id; // The packet ID of the MQTT message if applicable, otherwise it is zero.
Codici di errore e gestione degli errori
Codice di errore | Descrizione | Azione consigliata |
---|---|---|
GATEWAY_ATTACHMENT_ERROR | Richiesta di collegamento del gateway non riuscita. | Non riprovare senza risolvere il problema. |
GATEWAY_DEVICE_NOT_FOUND | Il gateway non è riuscito a trovare un dispositivo collegato per gestire i messaggi in arrivo. | Non riprovare senza risolvere il problema. |
GATEWAY_INVALID_MQTT_TOPIC | Il gateway non è riuscito ad analizzare l'argomento MQTT specificato, il quale non era formattato correttamente o conteneva un nome o un ID dispositivo non valido. | Non riprovare senza risolvere il problema. |
ID GATEWAY_UNexpected_PACKET_ID | Il gateway non è riuscito a elaborare il messaggio in base all'ID pacchetto. Ad esempio, un PUBACK potrebbe contenere un ID pacchetto, ma non era in attesa di risposta. | Non riprovare senza risolvere il problema. |
GATEWAY_UNexpected_MESSAGE_TYPE | Il gateway ha ricevuto messaggi imprevisti, come PUBREL, PUBREC e così via non sono supportati. | Non riprovare senza risolvere il problema. |
GATEWAY_DETACHMENT_DEVICE_ERROR | Il gateway ha scollegato un dispositivo a causa di un errore del dispositivo. | Non riprovare senza risolvere il problema. |
SCONOSCIUTO | L'errore è sconosciuto. | Riprova utilizzando il backoff esponenziale. |
Per ulteriori informazioni, consulta la documentazione principale sui messaggi di errore e la specifica MQTT versione 3.1.1.