From 0bbf57ecc31f51b8905c41d7a300d293625726fb Mon Sep 17 00:00:00 2001 From: Bruce Eckstein Date: Thu, 18 Nov 2021 16:49:00 -0500 Subject: [PATCH] Changed lastwill to internal parameter, mtt and rlt moved to settingType page. --- garadget/integrationplugingaradget.cpp | 48 +++++++++++-------------- garadget/integrationplugingaradget.json | 43 ++++++++-------------- 2 files changed, 34 insertions(+), 57 deletions(-) diff --git a/garadget/integrationplugingaradget.cpp b/garadget/integrationplugingaradget.cpp index 3105cdda..001d2d9d 100644 --- a/garadget/integrationplugingaradget.cpp +++ b/garadget/integrationplugingaradget.cpp @@ -42,7 +42,10 @@ void IntegrationPluginGaradget::setupThing(ThingSetupInfo *info) { Thing *thing = info->thing(); - thing->setStateValue(garadgetLWTStateTypeId,false); + pluginStorage()->beginGroup(thing->id().toString()); + pluginStorage()->setValue("lastWillAvailable", false); + pluginStorage()->endGroup(); + MqttClient *client = nullptr; client = hardwareManager()->mqttProvider()->createInternalClient(thing->id().toString()); m_mqttClients.insert(thing, client); @@ -71,11 +74,14 @@ void IntegrationPluginGaradget::postSetupThing(Thing *thing) connect(m_pluginTimer, &PluginTimer::timeout, this, [=](){ m_statuscounter[thing] += 1; foreach (Thing *thing, myThings()) { - if ((thing->stateValue(garadgetLWTStateTypeId) == false) && (m_lastActivityTimeStamps[thing].msecsTo(QDateTime::currentDateTime()) > 2000 * updatetime) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) { + pluginStorage()->beginGroup(thing->id().toString()); + bool lastWillAvailable = pluginStorage()->value("lastWillAvailable").toBool(); + pluginStorage()->endGroup(); + if ((lastWillAvailable == false) && (m_lastActivityTimeStamps[thing].msecsTo(QDateTime::currentDateTime()) > 2000 * updatetime) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) { qCDebug(dcGaradget) << "disconnect device" << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString(); thing->setStateValue(garadgetConnectedStateTypeId, false); } - if ( ((thing->stateValue(garadgetLWTStateTypeId) == false) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) || m_statuscounter[thing] > lwtupdatetime) { + if ( ((lastWillAvailable == false) && (thing->stateValue(garadgetConnectedStateTypeId).toBool() == true)) || m_statuscounter[thing] > lwtupdatetime) { m_mqttClients.value(thing)->publish("garadget/" + thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() + "/command", "get-status"); } } @@ -83,13 +89,15 @@ void IntegrationPluginGaradget::postSetupThing(Thing *thing) m_statuscounter[thing] = 1; } }); - connect(thing, &Thing::settingChanged, this, [=](const ParamTypeId &settingTypeId, const QVariant &value){ + connect(thing, &Thing::settingChanged, this, [=](const ParamTypeId &settingTypeId){ foreach (Thing *thing, myThings()) { QJsonObject garadgetobj; if ((thing->stateValue(garadgetConnectedStateTypeId).toBool() == true) && (settingTypeId == garadgetSettingsRdtParamTypeId)){ - garadgetobj.insert("rdt", value.toInt()); + garadgetobj.insert("rdt", thing->setting(garadgetSettingsRdtParamTypeId).toInt()); garadgetobj.insert("rlp", thing->setting(garadgetSettingsRlpParamTypeId).toInt()); + garadgetobj.insert("rlt",thing->setting(garadgetSettingsRltParamTypeId).toInt()); + garadgetobj.insert("mtt", thing->setting(garadgetSettingsMttParamTypeId).toInt()); QJsonDocument garadgetdoc(garadgetobj); QByteArray garadgetdata = garadgetdoc.toJson(QJsonDocument::Compact); QString jsonDoc(garadgetdata); @@ -150,24 +158,6 @@ void IntegrationPluginGaradget::executeAction(ThingActionInfo *info) act = "get-config"; } } - if (action.actionTypeId() == garadgetMttActionTypeId) { - if (action.paramValue( garadgetMttActionMttParamTypeId).toInt() > 0) { - actint = action.paramValue( garadgetMttActionMttParamTypeId).toInt(); - conftype = "mtt"; - } else { - name = name + "/command"; - act = "get-config"; - } - } - if (action.actionTypeId() == garadgetRltActionTypeId) { - if (action.paramValue( garadgetRltActionRltParamTypeId).toInt() > 0) { - actint = action.paramValue(garadgetRltActionRltParamTypeId).toInt(); - conftype = "rlt"; - } else { - name = name + "/command"; - act = "get-config"; - } - } if (conftype != "") { name = name + "/set-config"; QJsonObject garadgetobj; @@ -241,11 +231,11 @@ void IntegrationPluginGaradget::publishReceived(const QString &topic, const QByt } QJsonObject jo = jsonDoc.object(); thing->setStateValue(garadgetSrtStateTypeId,jo.value(QString("srt")).toInt()); - thing->setStateValue(garadgetRltStateTypeId,jo.value(QString("rlt")).toInt()); - thing->setStateValue(garadgetMttStateTypeId,jo.value(QString("mtt")).toInt()); + thing->setSettingValue(garadgetSettingsRltParamTypeId,jo.value(QString("rlt")).toInt()); + thing->setSettingValue(garadgetSettingsMttParamTypeId,jo.value(QString("mtt")).toInt()); thing->setSettingValue(garadgetSettingsRdtParamTypeId,jo.value(QString("rdt")).toInt()); thing->setSettingValue(garadgetSettingsRlpParamTypeId,jo.value(QString("rlp")).toInt()); - qCDebug(dcGaradget) << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "System Configuration" << "srt =" << thing->stateValue(garadgetSrtStateTypeId).toInt() << "rlt =" << thing->stateValue(garadgetRltStateTypeId).toInt()<< "mtt =" << thing->stateValue(garadgetMttStateTypeId).toInt() << "rdt =" << thing->setting(garadgetSettingsRdtParamTypeId).toUInt() << "rlp =" << thing->setting(garadgetSettingsRlpParamTypeId).toUInt(); + qCDebug(dcGaradget) << thing->paramValue(garadgetThingDeviceNameParamTypeId).toString() << "System Configuration" << "srt =" << thing->stateValue(garadgetSrtStateTypeId).toInt() << "rlt =" << thing->setting(garadgetSettingsRltParamTypeId).toInt()<< "mtt =" << thing->setting(garadgetSettingsMttParamTypeId).toInt() << "rdt =" << thing->setting(garadgetSettingsRdtParamTypeId).toUInt() << "rlp =" << thing->setting(garadgetSettingsRlpParamTypeId).toUInt(); } if (topic.endsWith("/set-config")){ if ( (payload.contains("mqip")) or (payload.contains("mqpt")) or (payload.contains("nme")) ) { @@ -255,8 +245,10 @@ void IntegrationPluginGaradget::publishReceived(const QString &topic, const QByt } if (topic.endsWith("/LWT")){ if (payload.contains("Online") or payload.contains("Offline")) { - thing->setStateValue(garadgetLWTStateTypeId,true); - qCDebug(dcGaradget()) << "enabling LWT functionality" << thing->stateValue(garadgetLWTStateTypeId); + qCDebug(dcGaradget()) << "Setting support for LWT"; + pluginStorage()->beginGroup(thing->id().toString()); + pluginStorage()->setValue("lastWillAvailable", true); + pluginStorage()->endGroup(); } if (payload.contains("Online")) { if (thing->stateValue(garadgetConnectedStateTypeId) == false) { diff --git a/garadget/integrationplugingaradget.json b/garadget/integrationplugingaradget.json index 04589fec..7ccf3c37 100644 --- a/garadget/integrationplugingaradget.json +++ b/garadget/integrationplugingaradget.json @@ -39,18 +39,23 @@ "displayName": "multi button press delay mS 10-5,000", "type": "uint", "defaultValue": 1000 + }, + { + "id": "c38e89db-b259-4fa0-9f20-03fe3b8a7514" , + "name": "rlt", + "displayName": "Button Press Time in 10-2000 ms", + "type": "int", + "defaultValue": 300 + }, + { + "id": "acda9268-4663-46d1-a409-231d648e6fc8" , + "name": "mtt", + "displayName": "Door Moving Time 5000-60000 ms", + "type": "int", + "defaultValue": 10 } ], "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", "name": "connected", @@ -108,26 +113,6 @@ "type": "int", "defaultValue": 25, "writable": true - }, - { - "id": "c38e89db-b259-4fa0-9f20-03fe3b8a7514" , - "name": "rlt", - "displayName": "Button Press Time in 10-2000 ms", - "displayNameEvent": "Button Press Time changed", - "displayNameAction": "Set Button Press Time value", - "type": "int", - "defaultValue": 300, - "writable": true - }, - { - "id": "acda9268-4663-46d1-a409-231d648e6fc8" , - "name": "mtt", - "displayName": "Door Moving Time 5000-60000 ms", - "displayNameEvent": "Door Moving Time changed", - "displayNameAction": "Set Door Moving Time value", - "type": "int", - "defaultValue": 10, - "writable": true } ], "actionTypes": [