Boa tarde, Gabriel!
A desconexão pode ocorrer devido a várias situações.
Analisando seu código, me parece ele faz ingestão excessiva de dados, que vamos explicar adiante.
Você pode consultar em nossa documentação a listagem completa dos motivos de desconexão:
Vamos analisar duas causas que podem ocorrer:
1 - Alta taxa de ingestão de dados.
erro: Connection <outbound|inbound> throughput limit exceeded
:
Temos o limite de 30 mensagens a cada 15 segundos, ou seja, analisando seu código (posso estar enganado), mas me parece que você “dispara” 3 payloads por segundo, então já ultrapassa este limite, veja a documentação:
Você pode disparar 1 só payload com as 3 temperaturas juntas.
Tente montar algo assim:
{ "data"
{ "tds" : valor_TDS ,
"temperature" : valor_Temperatura ,
"distance" ; valor_Distancia
}
}
2 - keepalive timeout
Muito provavelmente seu problema é o item 1, mas vale trazermos esta informação aqui.
É importante saber a configuração deste timeout “no seu device”.
O Keepalive timeout força uma espécie de PING que seu device precisa enviar para informar que “está vivo”, caso contrário, o servidor irá fechar a comunicação.
No mesmo link acima, na documentação é citado este timeout, que na Plataforma está em 90 segundos (por isto que acredito que seu problema seja o Item1, visto que seu device comunica a cada segundo).
Quando se utiliza bibliotecas de Arduino para ESP32 ou ESP8266, é necessário saber como está ajustada esta variável.
existem bibliotecas nas quais você pode ajustar este valor, por exemplo:
client.setKeepAlive( MQTT_KEEPALIVE );
Outras causas da desconexão ocorrem, como a própria renovação de conexão em redes de telefonia, que ocorre com certa frequência, causando quedas durante o dia.