From 5eeaccd3fdef1d94037a50d67c63313d478ae02a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Mon, 24 Mar 2025 11:52:21 +0100 Subject: [PATCH] Energy: Make energy meter a three phase --- .../integrationplugingenericenergy.cpp | 28 ++++++-- .../integrationplugingenericenergy.h | 7 +- .../integrationplugingenericenergy.json | 70 +++++++++++++++++++ 3 files changed, 98 insertions(+), 7 deletions(-) diff --git a/genericenergy/integrationplugingenericenergy.cpp b/genericenergy/integrationplugingenericenergy.cpp index 3da37db..8f13a5b 100644 --- a/genericenergy/integrationplugingenericenergy.cpp +++ b/genericenergy/integrationplugingenericenergy.cpp @@ -1,7 +1,7 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * This file is part of nymea. @@ -103,15 +103,35 @@ void IntegrationPluginGenericEnergy::executeAction(ThingActionInfo *info) } } else if (thing->thingClassId() == energyMeterThingClassId) { if (action.actionTypeId() == energyMeterCurrentPowerActionTypeId) { - thing->setStateValue(energyMeterCurrentPowerStateTypeId, action.paramValue(energyMeterCurrentPowerActionCurrentPowerParamTypeId)); + thing->setStateValue(energyMeterCurrentPowerStateTypeId, + action.paramValue(energyMeterCurrentPowerActionCurrentPowerParamTypeId)); } else if (action.actionTypeId() == energyMeterTotalEnergyConsumedActionTypeId) { - thing->setStateValue(energyMeterTotalEnergyConsumedStateTypeId, action.paramValue(energyMeterTotalEnergyConsumedActionTotalEnergyConsumedParamTypeId)); + thing->setStateValue(energyMeterTotalEnergyConsumedStateTypeId, + action.paramValue(energyMeterTotalEnergyConsumedActionTotalEnergyConsumedParamTypeId)); } else if (action.actionTypeId() == energyMeterTotalEnergyProducedActionTypeId) { - thing->setStateValue(energyMeterTotalEnergyProducedStateTypeId, action.paramValue(energyMeterTotalEnergyProducedActionTotalEnergyProducedParamTypeId)); + thing->setStateValue(energyMeterTotalEnergyProducedStateTypeId, + action.paramValue(energyMeterTotalEnergyProducedActionTotalEnergyProducedParamTypeId)); + } else if (action.actionTypeId() == energyMeterCurrentPowerPhaseAActionTypeId) { + thing->setStateValue(energyMeterCurrentPowerPhaseAStateTypeId, + action.paramValue(energyMeterCurrentPowerPhaseAActionCurrentPowerPhaseAParamTypeId)); + } else if (action.actionTypeId() == energyMeterCurrentPowerPhaseBActionTypeId) { + thing->setStateValue(energyMeterCurrentPowerPhaseBStateTypeId, + action.paramValue(energyMeterCurrentPowerPhaseBActionCurrentPowerPhaseBParamTypeId)); + } else if (action.actionTypeId() == energyMeterCurrentPowerPhaseCActionTypeId) { + thing->setStateValue(energyMeterCurrentPowerPhaseCStateTypeId, + action.paramValue(energyMeterCurrentPowerPhaseCActionCurrentPowerPhaseCParamTypeId)); } else if (action.actionTypeId() == energyMeterCurrentPhaseAActionTypeId) { thing->setStateValue(energyMeterCurrentPhaseAStateTypeId, action.paramValue(energyMeterCurrentPhaseAActionCurrentPhaseAParamTypeId)); + } else if (action.actionTypeId() == energyMeterCurrentPhaseBActionTypeId) { + thing->setStateValue(energyMeterCurrentPhaseBStateTypeId, action.paramValue(energyMeterCurrentPhaseBActionCurrentPhaseBParamTypeId)); + } else if (action.actionTypeId() == energyMeterCurrentPhaseCActionTypeId) { + thing->setStateValue(energyMeterCurrentPhaseCStateTypeId, action.paramValue(energyMeterCurrentPhaseCActionCurrentPhaseCParamTypeId)); } else if (action.actionTypeId() == energyMeterVoltagePhaseAActionTypeId) { thing->setStateValue(energyMeterVoltagePhaseAStateTypeId, action.paramValue(energyMeterVoltagePhaseAActionVoltagePhaseAParamTypeId)); + } else if (action.actionTypeId() == energyMeterVoltagePhaseBActionTypeId) { + thing->setStateValue(energyMeterVoltagePhaseBStateTypeId, action.paramValue(energyMeterVoltagePhaseBActionVoltagePhaseBParamTypeId)); + } else if (action.actionTypeId() == energyMeterVoltagePhaseCActionTypeId) { + thing->setStateValue(energyMeterVoltagePhaseCStateTypeId, action.paramValue(energyMeterVoltagePhaseCActionVoltagePhaseCParamTypeId)); } info->finish(Thing::ThingErrorNoError); } else if (thing->thingClassId() == impulseSmartMeterThingClassId) { diff --git a/genericenergy/integrationplugingenericenergy.h b/genericenergy/integrationplugingenericenergy.h index 45aae00..2dd4c4f 100644 --- a/genericenergy/integrationplugingenericenergy.h +++ b/genericenergy/integrationplugingenericenergy.h @@ -1,6 +1,6 @@ /* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * -* Copyright 2013 - 2020, nymea GmbH +* Copyright 2013 - 2025, nymea GmbH * Contact: contact@nymea.io * * This file is part of nymea. @@ -31,8 +31,9 @@ #ifndef INTEGRATIONPLUGINGENERICENERGY_H #define INTEGRATIONPLUGINGENERICENERGY_H -#include "integrations/integrationplugin.h" -#include "plugintimer.h" +#include +#include + #include "extern-plugininfo.h" #include diff --git a/genericenergy/integrationplugingenericenergy.json b/genericenergy/integrationplugingenericenergy.json index bf44398..e73add4 100644 --- a/genericenergy/integrationplugingenericenergy.json +++ b/genericenergy/integrationplugingenericenergy.json @@ -75,6 +75,56 @@ "unit": "Ampere", "writable": true }, + { + "id": "37097a51-063e-4b04-aa7b-67ddda8a3c81", + "name": "currentPhaseB", + "displayName": "Current on phase B", + "displayNameAction": "Set current on phase B", + "type": "double", + "defaultValue": 0.00, + "unit": "Ampere", + "writable": true + }, + { + "id": "6c3497fd-9894-4485-a295-15b0d829d023", + "name": "currentPhaseC", + "displayName": "Current on phase C", + "displayNameAction": "Set current on phase C", + "type": "double", + "defaultValue": 0.00, + "unit": "Ampere", + "writable": true + }, + { + "id": "91e82743-2d97-41e9-8bf2-cb6034818079", + "name": "currentPowerPhaseA", + "displayName": "Current power on phase A", + "displayNameAction": "Set current power on phase A", + "type": "double", + "defaultValue": 0.00, + "unit": "Watt", + "writable": true + }, + { + "id": "7ecbec82-71ec-4df3-b298-837e7f37aa4b", + "name": "currentPowerPhaseB", + "displayName": "Current power on phase B", + "displayNameAction": "Set current power on phase B", + "type": "double", + "defaultValue": 0.00, + "unit": "Watt", + "writable": true + }, + { + "id": "eded281b-217b-48f5-8b91-b5142ea87505", + "name": "currentPowerPhaseC", + "displayName": "Current power on phase C", + "displayNameAction": "Set current power on phase C", + "type": "double", + "defaultValue": 0.00, + "unit": "Watt", + "writable": true + }, { "id": "03deaf24-e515-4649-8979-ef8ae8ee7c02", "name": "voltagePhaseA", @@ -84,6 +134,26 @@ "defaultValue": 0.00, "unit": "Volt", "writable": true + }, + { + "id": "7e1514fb-7e69-4849-90c4-8f27dbd6453a", + "name": "voltagePhaseB", + "displayName": "Voltage on phase B", + "displayNameAction": "Set voltage on phase B", + "type": "double", + "defaultValue": 0.00, + "unit": "Volt", + "writable": true + }, + { + "id": "b6e69a07-a362-4eef-87b7-5a670e332919", + "name": "voltagePhaseC", + "displayName": "Voltage on phase C", + "displayNameAction": "Set voltage on phase C", + "type": "double", + "defaultValue": 0.00, + "unit": "Volt", + "writable": true } ] },