LWT detection and support

master
Bruce Eckstein 2021-11-18 08:43:13 -05:00
parent f5927619b0
commit 05d8179a55
2 changed files with 31 additions and 6 deletions

View File

@ -42,8 +42,7 @@ void IntegrationPluginGaradget::setupThing(ThingSetupInfo *info)
{ {
Thing *thing = info->thing(); Thing *thing = info->thing();
QString device = thing->paramValue(garadgetThingDeviceNameParamTypeId).toString(); thing->setStateValue(garadgetLWTStateTypeId,false);
MqttClient *client = nullptr; MqttClient *client = nullptr;
client = hardwareManager()->mqttProvider()->createInternalClient(thing->id().toString()); client = hardwareManager()->mqttProvider()->createInternalClient(thing->id().toString());
m_mqttClients.insert(thing, client); m_mqttClients.insert(thing, client);
@ -72,16 +71,15 @@ void IntegrationPluginGaradget::postSetupThing(Thing *thing)
connect(m_pluginTimer, &PluginTimer::timeout, this, [=](){ connect(m_pluginTimer, &PluginTimer::timeout, this, [=](){
m_statuscounter[thing] += 1; m_statuscounter[thing] += 1;
foreach (Thing *thing, myThings()) { foreach (Thing *thing, myThings()) {
if ((m_lastActivityTimeStamps[thing].msecsTo(QDateTime::currentDateTime()) > 2000 * updatetime) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) { if ((thing->stateValue(garadgetLWTStateTypeId) == false) && (m_lastActivityTimeStamps[thing].msecsTo(QDateTime::currentDateTime()) > 2000 * updatetime) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) {
qCDebug(dcGaradget) << "disconnect device" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString(); qCDebug(dcGaradget) << "disconnect device" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString();
thing->setStateValue(garadgetConnectedStateTypeId, false); thing->setStateValue(garadgetConnectedStateTypeId, false);
} }
if ( (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true) || m_statuscounter[thing] > lwtupdatetime) { if ( ((thing->stateValue(garadgetLWTStateTypeId) == false) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) || m_statuscounter[thing] > lwtupdatetime) {
m_mqttClients.value(thing)->publish("garadget/" + thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() + "/command", "get-status"); m_mqttClients.value(thing)->publish("garadget/" + thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() + "/command", "get-status");
} }
} }
if (m_statuscounter[thing] > lwtupdatetime) { if (m_statuscounter[thing] > lwtupdatetime) {
qCDebug(dcGaradget) << "reset statusCounter" << m_statuscounter;
m_statuscounter[thing] = 1; m_statuscounter[thing] = 1;
} }
}); });
@ -213,7 +211,7 @@ void IntegrationPluginGaradget::publishReceived(const QString &topic, const QByt
} }
if (topic.endsWith("/status")) { if (topic.endsWith("/status")) {
if (thing->stateValue(garadgetConnectedStateTypeId) == false) { if (thing->stateValue(garadgetConnectedStateTypeId) == false) {
qCDebug(dcGaradget) << "Setting" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "to connected" ; qCDebug(dcGaradget) << "Setting" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "to Online" ;
thing->setStateValue(garadgetConnectedStateTypeId, true); thing->setStateValue(garadgetConnectedStateTypeId, true);
} }
m_lastActivityTimeStamps[thing] = QDateTime::currentDateTime(); m_lastActivityTimeStamps[thing] = QDateTime::currentDateTime();
@ -255,4 +253,22 @@ void IntegrationPluginGaradget::publishReceived(const QString &topic, const QByt
qCDebug(dcGaradget) << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "Detected change of Broker msg - set connected to false"; qCDebug(dcGaradget) << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "Detected change of Broker msg - set connected to false";
} }
} }
if (topic.endsWith("/LWT")){
if (payload.contains("Online") or payload.contains("Offline")) {
thing->setStateValue(garadgetLWTStateTypeId,true);
qCDebug(dcGaradget()) << "enabling LWT functionality" << thing->stateValue(garadgetLWTStateTypeId);
}
if (payload.contains("Online")) {
if (thing->stateValue(garadgetConnectedStateTypeId) == false) {
qCDebug(dcGaradget) << "Setting" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "to Online" ;
thing->setStateValue(garadgetConnectedStateTypeId, true);
}
}
if (payload.contains("Offline")) {
if (thing->stateValue(garadgetConnectedStateTypeId) == true) {
qCDebug(dcGaradget) << "Setting" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "to Offline" ;
thing->setStateValue(garadgetConnectedStateTypeId, false);
}
}
}
} }

View File

@ -42,6 +42,15 @@
} }
], ],
"stateTypes": [ "stateTypes": [
{
"id": "3338c7af-89a0-4db3-aaa4-a01a276396d0",
"name": "LWT",
"displayName": "LWT Support",
"displayNameEvent": "LWT Support",
"type": "bool",
"defaultValue": false,
"writable": false
},
{ {
"id": "a3d7e6eb-82d0-47ee-b95f-4dde931eb7e2", "id": "a3d7e6eb-82d0-47ee-b95f-4dde931eb7e2",
"name": "connected", "name": "connected",