Nesta página, explicamos como os gateways podem usar a ponte MQTT para se comunicar com o Cloud IoT Core e publicar eventos de telemetria em nome de dispositivos vinculados. Antes de começar, leia Como usar a ponte MQTT para informações gerais sobre como usá-la com o Cloud IoT Core.
Veja uma demonstração completa
Como usar gateways com a ponte MQTT
- Depois de criar e configurar o gateway, conecte-o ao Cloud IoT Core pela ponte MQTT.
- Crie dispositivos caso ainda não tenha feito isso.
Opcional: vincule os dispositivos ao gateway.
Ao usar a ponte MQTT, você só precisa vincular os dispositivos se eles não puderem gerar os próprios JWTs.
Opcional: inscreva-se no tópico de erro do sistema para receber feedback sobre as operações do dispositivo.
Use o gateway para redirecionar mensagens de telemetria, estado do dispositivo e configuração em nome dos dispositivos. Veja uma demonstração completa.
Mensagens de gateway
Depois que o gateway se conectar ao Cloud IoT Core pela ponte MQTT, ele poderá enviar ou receber três tipos de mensagens:
- Mensagens de controle: anexa um dispositivo ao gateway ou desconecta um dispositivo do gateway. Essas mensagens são enviadas entre o gateway e o Cloud IoT Core. O Cloud IoT Core só aceita mensagens de controle de gateways. Se outro tipo de dispositivo tentar enviar uma mensagem de controle, o Cloud IoT Core encerrará a conexão.
- Mensagens de gateways e dispositivos: podem ser redirecionadas pelo gateway em nome de um dispositivo ou enviadas diretamente no gateway.
- Mensagens de erro do sistema: quando o gateway é inscrito no tópico de erro do sistema MQTT em nome do dispositivo, o Cloud IoT Core envia mensagens de erro para o gateway sempre que o dispositivo encontra um erro.
Como anexar dispositivos a um gateway
Para permitir que o gateway envie comunicações por dispositivo para o Cloud IoT Core, faça com que o gateway publique um QoS 1/devices/{device_ID_to_attach}/attach
mensagem de controle pela ponte MQTT.
Se você tiver configurado o gateway para autenticar dispositivos usando os JWTs, o payload da mensagem de anexação precisará incluir o token no formato JSON: { "authorization" : "{JWT_token}" }
. Caso contrário, o Cloud IoT Core autenticará o dispositivo verificando a associação dele com o gateway.
Resposta de sucesso
Depois que o dispositivo é autorizado, o Cloud IoT Core envia uma mensagem PUBACK ao gateway como uma resposta à mensagem anexada. Depois de receber a mensagem do PUBACK, o gateway pode publicar e se inscrever em tópicos do Cloud IoT Core em nome do dispositivo, como telemetria ou mensagens de configuração.
Se um dispositivo já estiver anexado quando o gateway enviar a mensagem de anexação, o Cloud IoT Core responderá com uma mensagem PUBACK.
Como remover dispositivos do gateway
Para remover um dispositivo do gateway, solicite que o gateway publique uma mensagem de controle /devices/{device_ID}/detach
de QoS 1 na ponte MQTT. Se o dispositivo não estiver anexado no momento do envio da mensagem, o Cloud IoT Core ignorará a mensagem de controle de remoção e enviará uma mensagem PUBACK.
Solução de problemas
Para ser notificado quando um dispositivo encontrar um erro, inscreva o gateway no tópico MQTT /devices/{gateway_ID}/errors
usando o QoS nível 0:
C#
A etapa em que o dispositivo se inscreve em todos os tópicos do gateway, incluindo o tópicoerrors
, está destacada abaixo:
Go
A etapa em que o dispositivo se inscreve no tópicoerrors
está destacada abaixo:
Java
A etapa em que o dispositivo se inscreve no tópicoerrors
está destacada abaixo:
Node.js
Por exemplo, a etapa em que o dispositivo se inscreve no tópicoconfig
está destacada abaixo. Para se inscrever no tópico errors
, especifique /devices/${gateway_ID}/errors
Python
A etapa em que o dispositivo se inscreve no tópicoerrors
está destacada abaixo:
O Cloud IoT Core envia erros de gateway com base no melhor esforço, entregues por QoS 0. Se o gateway não estiver inscrito em /devices/{gateway_ID}/errors
, o Cloud IoT Core registrará eventos de falha, mas não enviará uma mensagem PUBACK.
Os erros de MQTT têm a seguinte estrutura:
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 a mensagem de erro tiver sido acionada por uma mensagem MQTT, as seguintes informações também serão anexadas:
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.
Códigos e tratamento de erros
Código do erro | Descrição | Ação recomendada |
---|---|---|
GATEWAY_ATTACHMENT_ERROR | Falha na solicitação de anexo do gateway. | Não tente novamente sem resolver o problema. |
GATEWAY_DEVICE_NOT_FOUND | O gateway não encontrou um dispositivo anexado para processar uma mensagem recebida. | Não tente novamente sem resolver o problema. |
GATEWAY_INVALID_MQTT_TOPIC | Não foi possível analisar o tópico MQTT especificado no gateway, que estava formatado incorretamente ou continha um código ou nome de dispositivo inválido. | Não tente novamente sem resolver o problema. |
GATEWAY_UNEXPECTED_PACKET_ID | Não foi possível processar a mensagem no gateway com base no ID do pacote. Por exemplo, um PUBACK pode ter um código de pacote, mas nada estava aguardando a resposta. | Não tente novamente sem resolver o problema. |
GATEWAY_UNEXPECTED_MESSAGE_TYPE | O gateway recebeu mensagens inesperadas, como PUBREL, PUBREC etc. não compatíveis | Não tente novamente sem resolver o problema. |
GATEWAY_DETACHMENT_DEVICE_ERROR | O gateway desconectou um dispositivo devido a um erro. | Não tente novamente sem resolver o problema. |
DESCONHECIDO | O erro é desconhecido. | Tente novamente usando espera exponencial. |
Para mais informações, consulte a documentação principal de mensagens de erro e a especificação MQTT da versão 3.1.1.