From 0382d2f70cb3ec23a47112f18b0fa66bf542a7c6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 22 Oct 2021 12:07:19 +0200 Subject: [PATCH 1/5] GenericThings: add minimal charging current for generic car. --- genericthings/integrationplugingenericthings.json | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/genericthings/integrationplugingenericthings.json b/genericthings/integrationplugingenericthings.json index 76380991..d19058cb 100644 --- a/genericthings/integrationplugingenericthings.json +++ b/genericthings/integrationplugingenericthings.json @@ -1813,6 +1813,18 @@ "minValue": 0, "maxValue": 100, "defaultValue": 100 + }, + { + "id": "20faf2b8-2b40-4bee-b228-97dbaf0cdffc", + "name": "minimalChargingCurrent", + "displayName": "Minimal charging current", + "displayNameEvent": "Minimal charging current changed", + "type": "uint", + "unit": "Ampere", + "writable": true, + "minValue": 6, + "maxValue": 20, + "defaultValue": 6 } ] } From d22f741909f525a29fba942f0387c4d8840d660f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 22 Oct 2021 12:11:46 +0200 Subject: [PATCH 2/5] Make minimal charging current writable and update the state value on action executed --- genericthings/integrationplugingenericthings.cpp | 3 +++ genericthings/integrationplugingenericthings.json | 1 + 2 files changed, 4 insertions(+) diff --git a/genericthings/integrationplugingenericthings.cpp b/genericthings/integrationplugingenericthings.cpp index 8e93f0d0..af817f39 100644 --- a/genericthings/integrationplugingenericthings.cpp +++ b/genericthings/integrationplugingenericthings.cpp @@ -899,6 +899,9 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info) thing->setStateValue(carBatteryLevelStateTypeId, action.paramValue(carBatteryLevelActionBatteryLevelParamTypeId)); thing->setStateValue(carBatteryCriticalStateTypeId, action.paramValue(carBatteryLevelActionBatteryLevelParamTypeId).toInt() < 10); info->finish(Thing::ThingErrorNoError); + } else if (action.actionTypeId() == carMinimalChargingCurrentActionTypeId) { + thing->setStateValue(carMinimalChargingCurrentStateTypeId, action.paramValue(carMinimalChargingCurrentActionMinimalChargingCurrentParamTypeId).toUInt()); + info->finish(Thing::ThingErrorNoError); } } else { Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8()); diff --git a/genericthings/integrationplugingenericthings.json b/genericthings/integrationplugingenericthings.json index d19058cb..17f58df6 100644 --- a/genericthings/integrationplugingenericthings.json +++ b/genericthings/integrationplugingenericthings.json @@ -1819,6 +1819,7 @@ "name": "minimalChargingCurrent", "displayName": "Minimal charging current", "displayNameEvent": "Minimal charging current changed", + "displayNameAction": "Set minimal charging current", "type": "uint", "unit": "Ampere", "writable": true, From 941586cc90dc44846c6f434a18f39ef4b7367945 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 22 Oct 2021 16:19:35 +0200 Subject: [PATCH 3/5] Update max value of minimal charging current according to interface --- genericthings/integrationplugingenericthings.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/genericthings/integrationplugingenericthings.json b/genericthings/integrationplugingenericthings.json index 17f58df6..b8298e1b 100644 --- a/genericthings/integrationplugingenericthings.json +++ b/genericthings/integrationplugingenericthings.json @@ -1824,7 +1824,7 @@ "unit": "Ampere", "writable": true, "minValue": 6, - "maxValue": 20, + "maxValue": 16, "defaultValue": 6 } ] From 32456e1e208b6efce4759b2430f164b0c75a03d4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Wed, 27 Oct 2021 17:38:58 +0200 Subject: [PATCH 4/5] Allign car min charging current to interface --- genericthings/integrationplugingenericthings.cpp | 4 ++-- genericthings/integrationplugingenericthings.json | 8 ++++---- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/genericthings/integrationplugingenericthings.cpp b/genericthings/integrationplugingenericthings.cpp index af817f39..8155c6cf 100644 --- a/genericthings/integrationplugingenericthings.cpp +++ b/genericthings/integrationplugingenericthings.cpp @@ -899,8 +899,8 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info) thing->setStateValue(carBatteryLevelStateTypeId, action.paramValue(carBatteryLevelActionBatteryLevelParamTypeId)); thing->setStateValue(carBatteryCriticalStateTypeId, action.paramValue(carBatteryLevelActionBatteryLevelParamTypeId).toInt() < 10); info->finish(Thing::ThingErrorNoError); - } else if (action.actionTypeId() == carMinimalChargingCurrentActionTypeId) { - thing->setStateValue(carMinimalChargingCurrentStateTypeId, action.paramValue(carMinimalChargingCurrentActionMinimalChargingCurrentParamTypeId).toUInt()); + } else if (action.actionTypeId() == carMinChargingCurrentActionTypeId) { + thing->setStateValue(carMinChargingCurrentStateTypeId, action.paramValue(carMinChargingCurrentActionMinChargingCurrentParamTypeId).toUInt()); info->finish(Thing::ThingErrorNoError); } } else { diff --git a/genericthings/integrationplugingenericthings.json b/genericthings/integrationplugingenericthings.json index b8298e1b..30726c31 100644 --- a/genericthings/integrationplugingenericthings.json +++ b/genericthings/integrationplugingenericthings.json @@ -1816,10 +1816,10 @@ }, { "id": "20faf2b8-2b40-4bee-b228-97dbaf0cdffc", - "name": "minimalChargingCurrent", - "displayName": "Minimal charging current", - "displayNameEvent": "Minimal charging current changed", - "displayNameAction": "Set minimal charging current", + "name": "minChargingCurrent", + "displayName": "Minimum charging current", + "displayNameEvent": "Minimum charging current changed", + "displayNameAction": "Set minimum charging current", "type": "uint", "unit": "Ampere", "writable": true, From 73c19826c119c6cf07f9ede413a4a914537d11ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Fri, 10 Dec 2021 11:11:40 +0100 Subject: [PATCH 5/5] Make generic car minimum charging current read only and offer settings for adjustment --- .../integrationplugingenericthings.cpp | 19 ++++++++++++++++--- .../integrationplugingenericthings.json | 14 ++++++++++++-- 2 files changed, 28 insertions(+), 5 deletions(-) diff --git a/genericthings/integrationplugingenericthings.cpp b/genericthings/integrationplugingenericthings.cpp index 8155c6cf..32ac27df 100644 --- a/genericthings/integrationplugingenericthings.cpp +++ b/genericthings/integrationplugingenericthings.cpp @@ -264,8 +264,24 @@ void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info) thing->setStateValue(batteryBatteryCriticalStateTypeId, currentBatteryLevel <= value.toInt()); } }); + } else if (thing->thingClassId() == carThingClassId) { + // Set the min charging current state if the settings value changed + connect(thing, &Thing::settingChanged, this, [thing](const ParamTypeId ¶mTypeId, const QVariant &value){ + if (paramTypeId == carSettingsMinChargingCurrentParamTypeId) { + qCDebug(dcGenericThings()) << "Car minimum charging current settings changed" << value.toUInt() << "A"; + thing->setStateValue(carMinChargingCurrentStateTypeId, value); + } + }); + + // Finish the setup + info->finish(Thing::ThingErrorNoError); + + // Set the inital state value + thing->setStateValue(carMinChargingCurrentStateTypeId, thing->setting(carSettingsMinChargingCurrentParamTypeId)); + return; } + // Fall trough, if not already finished and returned... info->finish(Thing::ThingErrorNoError); } @@ -899,9 +915,6 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info) thing->setStateValue(carBatteryLevelStateTypeId, action.paramValue(carBatteryLevelActionBatteryLevelParamTypeId)); thing->setStateValue(carBatteryCriticalStateTypeId, action.paramValue(carBatteryLevelActionBatteryLevelParamTypeId).toInt() < 10); info->finish(Thing::ThingErrorNoError); - } else if (action.actionTypeId() == carMinChargingCurrentActionTypeId) { - thing->setStateValue(carMinChargingCurrentStateTypeId, action.paramValue(carMinChargingCurrentActionMinChargingCurrentParamTypeId).toUInt()); - info->finish(Thing::ThingErrorNoError); } } else { Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8()); diff --git a/genericthings/integrationplugingenericthings.json b/genericthings/integrationplugingenericthings.json index 30726c31..9a69af10 100644 --- a/genericthings/integrationplugingenericthings.json +++ b/genericthings/integrationplugingenericthings.json @@ -1781,6 +1781,18 @@ "displayName": "Generic electric car", "createMethods": ["user"], "interfaces": ["electricvehicle"], + "settingsTypes": [ + { + "id": "0c55516d-4285-4d02-8926-1dae03649e18", + "name": "minChargingCurrent", + "displayName": "Minimum charging current", + "type": "uint", + "unit": "Ampere", + "minValue": 6, + "maxValue": 16, + "defaultValue": 6 + } + ], "stateTypes": [ { "id": "363a2a39-61b6-4109-9cd9-aca7367d12c7", @@ -1819,10 +1831,8 @@ "name": "minChargingCurrent", "displayName": "Minimum charging current", "displayNameEvent": "Minimum charging current changed", - "displayNameAction": "Set minimum charging current", "type": "uint", "unit": "Ampere", - "writable": true, "minValue": 6, "maxValue": 16, "defaultValue": 6