Hi,
I'm trying to send multiple messages to a MQTT server at QoS 0, but the client gets disconnected after +8 messages. I'm able to send more then 8 if I add a delay of 1000 ms between each message, but it disconnects at +32 messages.
What would it be the correct way to implement this? The goal is to potentially send +1000 messages to the server.
I'm using SDK 0.4.0 and mfw_nrf9160_0.7.0-29.alpha. I'm connection to Telia Denmark NB-Iot. I'm testing with the Nordic sample code at SDK v0.4.0:
https://github.com/NordicPlayground/fw-nrfconnect-nrf/tree/master/samples/nrf9160/mqtt_simple
Here is the dump from the terminal:
The MQTT simple sample started LTE Link Connecting ... LTE Link Connected! IPv4 Address found 0xf11e29c6 [mqtt_evt_handler:166] MQTT client connected! Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 Publishing: test to topic: my/publish/topic len: 16 [mqtt_evt_handler:177] MQTT client disconnected -45 POLLNVAL Disconnecting MQTT client... Could not disconnect MQTT client. Error: -57
Here is my while(1) from main.h
while (1) {
err = poll(&fds, 1, 10/*K_SECONDS(CONFIG_MQTT_KEEPALIVE)*/);
if (err < 0) {
printk("ERROR: poll %d\n", errno);
break;
}
err = mqtt_live(&client);
if (err != 0) {
printk("ERROR: mqtt_live %d\n", err);
break;
}
if ((fds.revents & POLLIN) == POLLIN) {
err = mqtt_input(&client);
if (err != 0) {
printk("ERROR: mqtt_input %d\n", err);
break;
}
}
if ((fds.revents & POLLERR) == POLLERR) {
printk("POLLERR\n");
break;
}
if ((fds.revents & POLLNVAL) == POLLNVAL) {
printk("POLLNVAL\n");
break;
}
if(connected){
if((k_uptime_get_32() - client.internal.last_activity) >= 1000)
data_publish(&client, MQTT_QOS_0_AT_MOST_ONCE, "test", strlen("test"));
}
}