Uma plataforma de aplicativo de IoT (Internet das Coisas) hospedada no Azure.
Ola' CEPE Energia
Aqui está a análise e a recomendação com base nos logs.
Sessão bem-sucedida — 20251031 Log ConectaAzure - semErros
PDP e IP estabelecidos (+NETOPEN, +IPADDR: 10.9.181.240).
Sincronização de horário via NITZ (offset -12).
Contexto TLS configurado (sslversion=4, authmode=0). Configurações de SNI/hostname retornam ERROR, mas a sessão continua.
Conexão MQTT com token SAS bem-sucedida: +CMQTTCONNECT: 0,0, seguida de publicações com PUBACK repetidos. [20251031 L…- semErros | Txt]
Sessão com falha — 20251031 Log ConectaAzure - COMErros
Bring-up de rede semelhante; sincronização via NITZ (offset -12).
Contexto TLS igual ao anterior; SNI/hostname ainda retornam ERROR.
Conexão MQTT falha durante TLS: +CMQTTCONNECT: 0,31 seguido de ERROR e mensagem “Falha em CMQTTCONNECT (handshake TLS)”. [20251031 L…- COMErros | Txt]
Informações do dispositivo
O dispositivo é ESP32-WROVER + SIMCom A7670SA, conectando-se a CEPEHub.azure-devices.net com ID dispositivo_beta01-4G. Relata falhas intermitentes de reconexão após desconexões, suspeitando de token SAS ou rejeição pelo Hub. [learn.microsoft.com]
Causa provável (e por que parece intermitente)
Incompatibilidade de handshake TLS/cifra no modem O Azure IoT Hub aplica TLS 1.2 + cifras fortes desde 31/08/2025. Muitos módulos celulares usam modos “auto” que podem tentar cifras não suportadas ou TLS 1.3, causando falhas esporádicas. O erro +CMQTTCONNECT: 0,31 indica falha no handshake TLS.
Confiança na CA raiz no modem O IoT Hub migrou para certificados DigiCert Global Root G2. Se o modem não tiver essa CA carregada (ou validação desativada via authmode=0), o comportamento do handshake pode variar.
SNI não configurado / não suportado O IoT Hub usa SNI para seleção de hostname. Logs mostram AT+CSSLCFG="sni",0,1 e AT+CSSLCFG="hostname",0,"CEPEHub.azure-devices.net" retornando ERROR.
Por isso parece “aleatório”: depende da rota da célula e combinações de cifra/SNI.
Plano passo a passo para solução
Objetivo: atender aos requisitos TLS 1.2 + DigiCert G2 do IoT Hub e seguir especificações MQTT.
A. Forçar TLS 1.2 no modem
Configure versão TLS para 1.2 apenas (não “auto”).
Ex.: AT+CSSLCFG="sslversion",0,(valor para TLS 1.2).
Ajuste timeout: AT+CSSLCFG="negotiatetime",0,60 e ignorelocaltime: AT+CSSLCFG="ignorelocaltime",0,1.
B. Carregar e usar DigiCert Global Root G2
Baixe e configure CA: AT+CCERTDOWN=cacert.pem AT+CSSLCFG="authmode",0,1 AT+CSSLCFG="cacert",0,"cacert.pem"
C. Habilitar SNI/hostname (ou atualizar firmware)
Comandos: AT+CSSLCFG="sni",0,1 AT+CSSLCFG="hostname",0,"CEPEHub.azure-devices.net"
D. Seguir requisitos MQTT do IoT Hub
Username: CEPEHub.azure-devices.net/dispositivo_beta01-4G/?api-version=2021-04-12
Password: token SAS renovado a cada reconexão.
Client ID = dispositivo_beta01-4G.
E. Estratégia de reconexão
Backoff exponencial (1s → 2s → 4s … máx. 1–2 min).
Sempre gerar novo token SAS.
cleanSession=1.
Espero que ajude.
Nota: Desculpe se encontrar alguma anomalia na tradução.
Obrigado.