Integrando AWS IoT Core com Flutter: modelagem, payloads, QoS e integração


Recentemente, tive uma experiência muito positiva com IoT, mais especificamente com o AWS IoT Core. Participei da implementação em uma aplicação Android desenvolvida com Flutter, onde os dispositivos operam sob diferentes tipos de conexão com a internet, variando em distância e qualidade de sinal. Abaixo um pouco da minha experiência usando AWS IoT Core + AWS Lambda e um app Flutter.
Design ou modelagem de tópicos
É uma experiencia muito legal modelar os tópicos para a sua solução usando IOT. Se você está começando agora, os dispositivos podem assinar e também publicar em um tópico ou vários tópicos ao mesmo tempo. Esses tópicos podem ser modelados para garantir uma lógica hierárquica, assim como também ajudar na reutilização e controle de acessos.
Por exemplo, supomos que vamos modelar tópicos para um MDM(Mobile Device Management) onde podemos para cada parceiro, separar vários dispositivos que vão receber e enviar dados via IOT:
parceiro1/grupo1/serialequipamento1/apps
- Os dispositivos do Parceiro 1 cadastrados no Grupo 1 podem cada um deles ter uma configuração de APPs permitidos.parceiro1/grupo2/serialequipamento2/location
- O dispositivo com serial “serialequipamento2” poderá enviar sua localização de GPS para esse tópico, ou qualquer outro equipamento. Poderíamos também ouvir para alimentar uma base de dados por exemplo.Usar curingas (
+
,#
):parceiro1/grupo1/+/location
→ escuta todos os dispositivos.pareceiro2/#
→ escuta tudo do parceiro.
QoS - Qualidade de Serviço
Um ponto importante é que o IoT do AWS não oferece suporte ao QoS 2, o que dificulta o uso em alguns cenários como por exemplo onde é necessário garantir entrega única das mensagens e sua aplicação não consegue descartar as duplicadas que podem acontecer no QoS 1. Se a sua solução não consegue lidar com mensagens duplicadas, o AWS IoT Core pode não ser a melhor opção. Nesses casos, alternativas como o HiveMQ podem ser mais adequadas.
Integração com outros serviços AWS
O AWS IoT Core é facilmente integrável a outros serviços da AWS. É possível utilizar desde Lambda e DynamoDB até OpenSearch, entre outros, o que abre um leque enorme de possibilidades. Basta configurar um gatilho (trigger) e a integração está pronta.
Na solução em que participei, integramos o processamento de alguns tópicos usando AWS Lambda, com funções escritas inteiramente em Golang.
Modelagem de payload
O IOT funciona bem com qualquer tipo de dado desde que você se atente aos limites de tamanho máximo por mensagem. Minha experiencia se limitou a enviar dados como JSON e Protobuf, onde o envio de Protobuf foi focado no ganho de eficiência e performance para um caso especifico.
Exemplo em JSON de um status report de equipamento:
Tópico →
parceiro1/grupo1/serialequipamento1/status
Payload →
{"batery": 78, "status": "ativo", "version": "1.2.0", "lat": -23.55, "lon": -46.63, "tempetature": 12.5, "timestamp": 1685423421 }
Conclusão
Se você está pensando em começar uma solução com IoT, vale a pena experimentar. É uma alternativa econômica, escalável e inteligente em relação a soluções tradicionais como WebSockets, especialmente no contexto de dispositivos móveis e ambientes com conectividade variável e imprevisível. Com os recursos certos e uma boa modelagem, o IoT pode entregar muita confiabilidade e eficiência para suas aplicações.
Subscribe to my newsletter
Read articles from Lucas Náiade directly inside your inbox. Subscribe to the newsletter, and don't miss out.
Written by
