@@ -87,7 +87,6 @@ ArduinoIoTCloudTCP::ArduinoIoTCloudTCP()
8787, _shadowTopicIn(" " )
8888, _dataTopicOut(" " )
8989, _dataTopicIn(" " )
90- , _deviceSubscribedToThing{false }
9190#if OTA_ENABLED
9291, _ota_cap{false }
9392, _ota_error{static_cast <int >(OTAError::None)}
@@ -376,16 +375,13 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeDeviceTopic()
376375 if (!_mqttClient.subscribe (_deviceTopicIn))
377376 {
378377 DEBUG_ERROR (" ArduinoIoTCloudTCP::%s could not subscribe to %s" , __FUNCTION__, _deviceTopicIn.c_str ());
379- return State::SubscribeDeviceTopic;
380378 }
381379
382380 if (_last_device_subscribe_cnt > AIOT_CONFIG_LASTVALUES_SYNC_MAX_RETRY_CNT)
383381 {
384382 _last_device_subscribe_cnt = 0 ;
385383 _next_device_subscribe_attempt_tick = 0 ;
386- _mqttClient.stop ();
387- execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
388- return State::ConnectPhy;
384+ return State::Disconnect;
389385 }
390386
391387 /* No device configuration reply. Wait: 5s -> 10s -> 20s -> 30s */
@@ -428,16 +424,6 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_CheckDeviceConfig()
428424 return State::Disconnect;
429425 }
430426
431- if (_deviceSubscribedToThing == true )
432- {
433- /* Unsubscribe from old things topics and go on with a new subscription */
434- _mqttClient.unsubscribe (_shadowTopicIn);
435- _mqttClient.unsubscribe (_dataTopicIn);
436- _deviceSubscribedToThing = false ;
437- DEBUG_INFO (" Disconnected from Arduino IoT Cloud" );
438- execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
439- }
440-
441427 updateThingTopics ();
442428
443429 if (_thing_id.length () == 0 )
@@ -465,7 +451,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
465451
466452 if (_thing_id_property->isDifferentFromCloud ())
467453 {
468- return State::CheckDeviceConfig ;
454+ return State::Disconnect ;
469455 }
470456
471457 unsigned long const now = millis ();
@@ -481,9 +467,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
481467 {
482468 _last_subscribe_request_cnt = 0 ;
483469 _last_subscribe_request_tick = 0 ;
484- _mqttClient.stop ();
485- execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
486- return State::ConnectPhy;
470+ return State::Disconnect;
487471 }
488472
489473 _last_subscribe_request_tick = now;
@@ -506,7 +490,6 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_SubscribeThingTopics()
506490 DEBUG_INFO (" Connected to Arduino IoT Cloud" );
507491 DEBUG_INFO (" Thing ID: %s" , getThingId ().c_str ());
508492 execCloudEventCallback (ArduinoIoTCloudEvent::CONNECT);
509- _deviceSubscribedToThing = true ;
510493
511494 /* Add retry wait time otherwise we are trying to reconnect every 250 ms...*/
512495 return State::RequestLastValues;
@@ -521,7 +504,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_RequestLastValues()
521504
522505 if (_thing_id_property->isDifferentFromCloud ())
523506 {
524- return State::CheckDeviceConfig ;
507+ return State::Disconnect ;
525508 }
526509
527510 /* Check whether or not we need to send a new request. */
@@ -542,9 +525,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_RequestLastValues()
542525 {
543526 _last_sync_request_cnt = 0 ;
544527 _last_sync_request_tick = 0 ;
545- _mqttClient.stop ();
546- execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
547- return State::ConnectPhy;
528+ return State::Disconnect;
548529 }
549530 }
550531
@@ -564,7 +545,7 @@ ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Connected()
564545 {
565546 if (_thing_id_property->isDifferentFromCloud ())
566547 {
567- return State::CheckDeviceConfig ;
548+ return State::Disconnect ;
568549 }
569550
570551 /* Check if a primitive property wrapper is locally changed.
@@ -641,9 +622,14 @@ void ArduinoIoTCloudTCP::handle_OTARequest() {
641622
642623ArduinoIoTCloudTCP::State ArduinoIoTCloudTCP::handle_Disconnect ()
643624{
644- DEBUG_ERROR (" ArduinoIoTCloudTCP::%s MQTT client connection lost" , __FUNCTION__);
625+ if (!_mqttClient.connected ()) {
626+ DEBUG_ERROR (" ArduinoIoTCloudTCP::%s MQTT client connection lost" , __FUNCTION__);
627+ } else {
628+ _mqttClient.unsubscribe (_shadowTopicIn);
629+ _mqttClient.unsubscribe (_dataTopicIn);
630+ _mqttClient.stop ();
631+ }
645632 DEBUG_INFO (" Disconnected from Arduino IoT Cloud" );
646- _mqttClient.stop ();
647633 execCloudEventCallback (ArduinoIoTCloudEvent::DISCONNECT);
648634 return State::ConnectPhy;
649635}
0 commit comments