diff --git a/src/items/itemloadersource.cpp b/src/items/itemloadersource.cpp index db5478a..e2d1e68 100644 --- a/src/items/itemloadersource.cpp +++ b/src/items/itemloadersource.cpp @@ -26,6 +26,7 @@ void ItemLoaderSource::refresh() request.type = ITEM_UPDATE_LOADED; request.payload = newItem; request.changes = ItemFieldChanges(true); + request.changes.value = false; itemAddRequests.push_back(request); } } diff --git a/src/items/mqttitem.cpp b/src/items/mqttitem.cpp index a6b30e5..76c5264 100644 --- a/src/items/mqttitem.cpp +++ b/src/items/mqttitem.cpp @@ -5,6 +5,7 @@ #include #include "mqttclient.h" +#include "programmode.h" MqttItem::MqttItem(QString name, uint8_t value, QObject *parent) : Item(0, name, value, parent), @@ -15,9 +16,10 @@ MqttItem::MqttItem(QString name, uint8_t value, QObject *parent) { hashId(); std::shared_ptr workClient = client.lock(); - assert(workClient); + assert(workClient || programMode == PROGRAM_MODE_UI_ONLY); - connect(workClient->getClient().get(), &QMqttClient::stateChanged, this, &MqttItem::onClientStateChanged); + if(workClient) + connect(workClient->getClient().get(), &QMqttClient::stateChanged, this, &MqttItem::onClientStateChanged); } MqttItem::~MqttItem() diff --git a/src/mqttclient.cpp b/src/mqttclient.cpp index fcc4692..ab61375 100644 --- a/src/mqttclient.cpp +++ b/src/mqttclient.cpp @@ -83,13 +83,17 @@ void MqttClient::unsubscribe(MqttClient::Subscription* subscription) void MqttClient::unsubscribe(QString topic) { - assert(!subscriptions.contains(topic)); MqttClient::Subscription* sub = subscriptions[topic]; + if(!sub) + { + qWarning()<<"MqttClient: Trying to unsubscribe from unkown topic:"<ref > 0) return; - qDebug()<<"MqttClient: unsubscibeing"<subscription->topic(); + qDebug()<<"MqttClient: unsubscibeing"<subscription->topic().filter(); client->unsubscribe(sub->subscription->topic()); subscriptions.erase(topic); delete sub; diff --git a/src/sensors/mqttsensorsource.cpp b/src/sensors/mqttsensorsource.cpp index 63b5c02..0853abf 100644 --- a/src/sensors/mqttsensorsource.cpp +++ b/src/sensors/mqttsensorsource.cpp @@ -47,7 +47,6 @@ void MqttSensorSource::onClientStateChanged(QMqttClient::ClientState state) { for(SensorSubscription& sensor : sensors) { - qDebug()<<"MQTT subscribeing to"<getBaseTopic() + "/" + sensor.topic; sensor.subscription = client->subscribe(client->getBaseTopic() + "/" + sensor.topic); connect(sensor.subscription->subscription, &QMqttSubscription::messageReceived, this, &MqttSensorSource::onMessageReceived); } @@ -58,7 +57,7 @@ void MqttSensorSource::onClientStateChanged(QMqttClient::ClientState state) { if(sensor.subscription) { - client->unsubscribe(sensor.topic); + client->unsubscribe(client->getBaseTopic() + "/" + sensor.topic); sensor.subscription = nullptr; } } @@ -167,6 +166,6 @@ void MqttSensorSource::store(QJsonObject& json) MqttSensorSource::~MqttSensorSource() { for(SensorSubscription& sub : sensors) - client->unsubscribe(sub.topic); + client->unsubscribe(client->getBaseTopic() + "/" + sub.topic); }