I’m using the MQTT-TLS library with AWS IoT, using it to publish data from sensors periodically.
I am finding that everything works for ~15 minutes, after which the client disconnects (according to AWS CloudWatch). However based on the serial output the IsConnected state is still TRUE.
Here’s my code:
void setup()
{
Serial.begin(9600);
WiFi.macAddress(mac);
sprintf(macAddr,"%02x%02x%02x%02x%02x%02x", mac[0], mac[1], mac[2], mac[3], mac[4], mac[5]);
if (bme.begin())
{
Serial.println("BME280 Sensor ready.");
}
else
{
Serial.println("BME280 Sensor ERROR!");
}
client.enableTls(
amazonIoTRootCaPem, sizeof(amazonIoTRootCaPem),
clientKeyCrtPem, sizeof(clientKeyCrtPem),
clientKeyPem, sizeof(clientKeyPem));
client.connect("macAddr");
if (client.isConnected()) {
Serial.printlnf("Client Connected");
}
}
void loop()
{
int temp, pressure, humidity;
getBMEValues(temp, pressure, humidity);
timeStr = Time.format(Time.now(), TIME_FORMAT_ISO8601_FULL);
Serial.printlnf("Pushing data to AWS");
if (client.isConnected() == FALSE)
{
client.connect("macAddr");
}
if (client.isConnected())
{
// temp
sprintf(publishString,"[{\"device\": \"%s\", \"timestamp\": \"%s\", \"temperature\": \"%d\"}]",macAddr,timeStr.c_str(),temp);
client.publish("outTopic/temperature", publishString, MQTT::QOS1);
Serial.printlnf(publishString);
// humidity
sprintf(publishString,"[{\"device\": \"%s\", \"timestamp\": \"%s\", \"humidity\": \"%d\"}]",macAddr,timeStr.c_str(),humidity);
client.publish("outTopic/humidity", publishString, MQTT::QOS1);
Serial.printlnf(publishString);
// pressure
sprintf(publishString,"[{\"device\": \"%s\", \"timestamp\": \"%s\", \"pressure\": \"%d\"}]",macAddr,timeStr.c_str(),pressure);
client.publish("outTopic/pressure", publishString, MQTT::QOS1);
Serial.printlnf(publishString);
}
Serial.printlnf("AWS Connection:");
Serial.printlnf(client.isConnected() ? "true" : "false");
Serial.printlnf("Timestamp:");
Serial.printlnf(timeStr);
Serial.printlnf("----------------");
delay(60000);
}
This is what I see in AWS CloudWatch:
2020-09-03 23:05:11.370 TRACEID:c49e90da-e503-664e-d350-d34f8173ff23 PRINCIPALID:d1ec65ce078d0dc12227bba247835173f4e255263c7028bd385918c54eeb6338 [INFO] EVENT:MQTT Client Disconnect MESSAGE:Disconnect Status: SUCCESS
2020-09-03 23:05:11.370 TRACEID:c49e90da-e503-664e-d350-d34f8173ff23 PRINCIPALID:d1ec65ce078d0dc12227bba247835173f4e255263c7028bd385918c54eeb6338 [INFO] EVENT:MQTT Client Disconnect MESSAGE: IpAddress: X.X.X.X SourcePort: 57807
(I swapped out the IP for X.X.X.X)
The serial output continues to show that client.isConnected() is TRUE though.