Merge PR #14: Rework generic battery

generic-wallbox
jenkins 2023-05-12 11:49:05 +02:00
commit cce26aca49
2 changed files with 52 additions and 30 deletions

View File

@ -64,11 +64,14 @@ void IntegrationPluginGenericEnergy::setupThing(ThingSetupInfo *info)
thing->setStateValue(impulseSmartMeterCurrentPowerStateTypeId, power*1000);
m_pulsesPerTimeframe.insert(thing, 0);
});
} else if (thing->thingClassId() == batteryThingClassId) {
} else if (thing->thingClassId() == energyStorageThingClassId) {
connect(thing, &Thing::settingChanged, [thing](const ParamTypeId &settingTypeId, const QVariant &value){
if (settingTypeId == batterySettingsCriticalLevelParamTypeId) {
int currentBatteryLevel = thing->stateValue(batteryBatteryLevelStateTypeId).toInt();
thing->setStateValue(batteryBatteryCriticalStateTypeId, currentBatteryLevel <= value.toInt());
if (settingTypeId == energyStorageSettingsCapacityParamTypeId) {
thing->setStateValue(energyStorageCapacityStateTypeId, value);
}
if (settingTypeId == energyStorageSettingsCriticalLevelParamTypeId) {
int currentBatteryLevel = thing->stateValue(energyStorageBatteryLevelStateTypeId).toInt();
thing->setStateValue(energyStorageBatteryCriticalStateTypeId, currentBatteryLevel <= value.toInt());
}
});
}
@ -139,17 +142,18 @@ void IntegrationPluginGenericEnergy::executeAction(ThingActionInfo *info)
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8());
}
} else if (thing->thingClassId() == batteryThingClassId) {
if (action.actionTypeId() == batteryBatteryLevelControlActionTypeId) {
int value = action.paramValue(batteryBatteryLevelControlActionBatteryLevelControlParamTypeId).toInt();
thing->setStateValue(batteryBatteryLevelStateTypeId, value);
thing->setStateValue(batteryBatteryLevelControlStateTypeId, value);
int criticalValue = thing->setting(batterySettingsCriticalLevelParamTypeId).toInt();
thing->setStateValue(batteryBatteryCriticalStateTypeId, value <= criticalValue);
} else if (thing->thingClassId() == energyStorageThingClassId) {
if (action.actionTypeId() == energyStorageBatteryLevelActionTypeId) {
int value = action.paramValue(energyStorageBatteryLevelActionBatteryLevelParamTypeId).toInt();
thing->setStateValue(energyStorageBatteryLevelStateTypeId, value);
int criticalValue = thing->setting(energyStorageSettingsCriticalLevelParamTypeId).toInt();
thing->setStateValue(energyStorageBatteryCriticalStateTypeId, value <= criticalValue);
info->finish(Thing::ThingErrorNoError);
return;
} else if (action.actionTypeId() == batteryChargingActionTypeId) {
thing->setStateValue(batteryChargingStateTypeId, action.paramValue(batteryChargingActionChargingParamTypeId));
} else if (action.actionTypeId() == energyStorageCurrentPowerActionTypeId) {
thing->setStateValue(energyStorageCurrentPowerStateTypeId, action.paramValue(energyStorageCurrentPowerActionCurrentPowerParamTypeId));
info->finish(Thing::ThingErrorNoError);
} else if (action.actionTypeId() == energyStorageChargingActionTypeId) {
thing->setStateValue(energyStorageChargingStateTypeId, action.paramValue(energyStorageChargingActionChargingParamTypeId));
info->finish(Thing::ThingErrorNoError);
return;
}

View File

@ -148,11 +148,20 @@
},
{
"id": "81418556-cae3-4803-aa0c-9c4b3304a3eb",
"name": "battery",
"displayName": "Generic battery",
"name": "energyStorage",
"displayName": "Generic energy storage",
"createMethods": ["user"],
"interfaces": ["battery"],
"interfaces": ["energystorage"],
"settingsTypes": [
{
"id": "c170df55-029d-4b67-ae09-248645dd7040",
"name": "capacity",
"displayName": "Capacity",
"type": "double",
"unit": "KiloWattHour",
"minValue": 0,
"defaultValue": 50000
},
{
"id": "8d875cb7-3a14-42d1-bf1b-759e5fd95a8f",
"name": "criticalLevel",
@ -164,28 +173,29 @@
}
],
"stateTypes": [
{
"id": "8d1c43f9-4528-4797-8f6a-f7b91fbb91d0",
"name": "currentPower",
"displayName": "Current power",
"displayNameAction": "Set current power",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"writable": true,
"minValue": -10000,
"maxValue": 10000,
"ioType": "analogOutput"
},
{
"id": "d37eed4a-befc-40d4-b435-40a761f99314",
"name": "batteryLevel",
"displayName": "Battery level",
"displayNameEvent": "Battery level changed",
"displayNameAction": "Set battery level",
"type": "int",
"unit": "Percentage",
"defaultValue": 0,
"minValue": 0,
"maxValue": 100
},
{
"id": "3336f0c2-158b-4353-b74f-f1bb9c4e8447",
"name": "batteryLevelControl",
"displayName": "Battery level control",
"displayNameEvent": "Battery level control changed",
"displayNameAction": "Set battery level",
"type": "double",
"minValue": 0,
"maxValue": 100,
"defaultValue": 0,
"unit": "Percentage",
"writable": true,
"ioType": "analogOutput"
},
@ -207,6 +217,14 @@
"displayNameEvent": "Battery entered or left critical state",
"type": "bool",
"defaultValue": false
},
{
"id": "bf076970-20fe-46f7-b4bc-fe34ec833829",
"name": "capacity",
"displayName": "Capacity",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": 10000
}
]
},