From 69f2cdf4060dde621b6f0b7dc49db7d8c7b3616f Mon Sep 17 00:00:00 2001 From: "bernhard.trinnes" Date: Wed, 29 Jul 2020 14:49:41 +0200 Subject: [PATCH] changed remarks from reviewer --- .../integrationplugingenericthings.cpp | 33 ++++++++------- .../integrationplugingenericthings.h | 2 +- .../integrationplugingenericthings.json | 20 +++++++--- ...b3188696-2585-4806-bf98-30ab576ce5c8-de.ts | 40 +++++++++++-------- ...88696-2585-4806-bf98-30ab576ce5c8-en_US.ts | 36 ++++++++++------- 5 files changed, 81 insertions(+), 50 deletions(-) diff --git a/genericthings/integrationplugingenericthings.cpp b/genericthings/integrationplugingenericthings.cpp index 9aecf77..26a4654 100644 --- a/genericthings/integrationplugingenericthings.cpp +++ b/genericthings/integrationplugingenericthings.cpp @@ -185,13 +185,20 @@ void IntegrationPluginGenericThings::setupThing(ThingSetupInfo *info) } }); } else if (thing->thingClassId() == extendedSmartMeterConsumerThingClassId) { - if (!m_smartMeterTimer) { - m_smartMeterTimer = hardwareManager()->pluginTimerManager()->registerTimer(10); - } - connect(m_smartMeterTimer, &PluginTimer::timeout, thing, [this, thing] { + QTimer* smartMeterTimer = new QTimer(this); + int timeframe = thing->setting(extendedSmartMeterConsumerSettingsImpulseTimeframeParamTypeId).toInt(); + smartMeterTimer->setInterval(timeframe * 1000); + m_smartMeterTimer.insert(thing, smartMeterTimer); + connect(thing, &Thing::settingChanged, smartMeterTimer, [smartMeterTimer] (const ParamTypeId ¶mTypeId, const QVariant &value) { + if (paramTypeId == extendedSmartMeterConsumerSettingsImpulseTimeframeParamTypeId) { + smartMeterTimer->setInterval(value.toInt() * 1000); + } + }); + + connect(smartMeterTimer, &QTimer::timeout, thing, [this, smartMeterTimer, thing] { double impulsePerKwh = thing->setting(extendedSmartMeterConsumerSettingsImpulsePerKwhParamTypeId).toDouble(); - double power = (m_pulsesPerTimeframe.value(thing)/impulsePerKwh)/(m_smartMeterTimer->interval()/3600.00); // Power = Energy/Time; Energy = Impulses/ImpPerkWh + double power = (m_pulsesPerTimeframe.value(thing)/impulsePerKwh)/(smartMeterTimer->interval()/3600.00); // Power = Energy/Time; Energy = Impulses/ImpPerkWh thing->setStateValue(extendedSmartMeterConsumerCurrentPowerStateTypeId, power*1000); m_pulsesPerTimeframe.insert(thing, 0); }); @@ -483,14 +490,14 @@ void IntegrationPluginGenericThings::executeAction(ThingActionInfo *info) Q_ASSERT_X(false, "executeAction", QString("Unhandled actionTypeId: %1").arg(action.actionTypeId().toString()).toUtf8()); } } else if (thing->thingClassId() == extendedSmartMeterConsumerThingClassId) { - if (action.actionTypeId() == extendedSmartMeterConsumerS0InputActionTypeId) { - bool value = info->action().param(extendedSmartMeterConsumerS0InputActionS0InputParamTypeId).value().toBool(); - thing->setStateValue(extendedSmartMeterConsumerS0InputStateTypeId, value); + if (action.actionTypeId() == extendedSmartMeterConsumerImpulseInputActionTypeId) { + bool value = info->action().param(extendedSmartMeterConsumerImpulseInputActionImpulseInputParamTypeId).value().toBool(); + thing->setStateValue(extendedSmartMeterConsumerImpulseInputStateTypeId, value); int impulsePerKwh = info->thing()->setting(extendedSmartMeterConsumerSettingsImpulsePerKwhParamTypeId).toInt(); if (value) { double currentEnergy = thing->stateValue(extendedSmartMeterConsumerTotalEnergyConsumedStateTypeId).toDouble(); thing->setStateValue(extendedSmartMeterConsumerTotalEnergyConsumedStateTypeId ,currentEnergy + (1.00/impulsePerKwh)); - m_pulsesPerTimeframe.insert(thing, m_pulsesPerTimeframe.value(thing)+1); + m_pulsesPerTimeframe[thing]++; } info->finish(Thing::ThingErrorNoError); return; @@ -514,11 +521,9 @@ void IntegrationPluginGenericThings::thingRemoved(Thing *thing) m_venetianBlindTargetAngle.remove(thing); } else if (thing->thingClassId() == extendedSmartMeterConsumerThingClassId) { m_pulsesPerTimeframe.remove(thing); - } - - if (myThings().isEmpty()) { - hardwareManager()->pluginTimerManager()->unregisterTimer(m_smartMeterTimer); - m_smartMeterTimer = nullptr; + } else if (thing->thingClassId() == extendedSmartMeterConsumerThingClassId) { + m_smartMeterTimer.take(thing)->deleteLater(); + m_pulsesPerTimeframe.remove(thing); } } diff --git a/genericthings/integrationplugingenericthings.h b/genericthings/integrationplugingenericthings.h index 77fa0ae..bba4e8f 100644 --- a/genericthings/integrationplugingenericthings.h +++ b/genericthings/integrationplugingenericthings.h @@ -50,13 +50,13 @@ public: void thingRemoved(Thing *thing) override; private: - PluginTimer *m_smartMeterTimer = nullptr; QHash m_pulsesPerTimeframe; double mapDoubleValue(double value, double fromMin, double fromMax, double toMin, double toMax); QHash m_extendedBlindPercentageTimer; QHash m_venetianBlindAngleTimer; + QHash m_smartMeterTimer; QHash m_extendedBlindTargetPercentage; QHash m_venetianBlindTargetAngle; diff --git a/genericthings/integrationplugingenericthings.json b/genericthings/integrationplugingenericthings.json index 6cffcfc..70d378d 100644 --- a/genericthings/integrationplugingenericthings.json +++ b/genericthings/integrationplugingenericthings.json @@ -697,7 +697,7 @@ { "id": "c3123967-f741-4fe1-a0d4-9a3e405d7e52", "name": "extendedSmartMeterConsumer", - "displayName": "Extended smart meter consumer", + "displayName": "Impulse based energy meter", "createMethods": ["user"], "interfaces": ["extendedsmartmeterconsumer"], "settingsTypes": [ @@ -709,6 +709,16 @@ "minValue": 1, "maxValue": 1000000, "defaultValue": 1000 + }, + { + "id": "73c9acc3-8f76-40d7-a79b-a1f08bb308d4", + "name": "impulseTimeframe", + "displayName": "Timeframe for power calculation", + "type": "int", + "unit": "Seconds", + "minValue": 1, + "maxValue": 600, + "defaultValue": 10 } ], "stateTypes": [ @@ -732,10 +742,10 @@ }, { "id": "9cd7e5ca-f8f8-48d5-9785-911ae75158c3", - "name": "s0Input", - "displayName": "S0 input", - "displayNameEvent": "S0 impulse", - "displayNameAction": "S0 impulse", + "name": "impulseInput", + "displayName": "Impulse input", + "displayNameEvent": "Impulse input changed", + "displayNameAction": "Set impulse input", "type": "bool", "defaultValue": false, "writable": true, diff --git a/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-de.ts b/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-de.ts index 14cc069..25a6b0d 100644 --- a/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-de.ts +++ b/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-de.ts @@ -567,31 +567,39 @@ The name of the StateType ({5821edb7-e6cb-4e5a-9d0b-3375126d3367}) of ThingClass The name of the EventType ({5821edb7-e6cb-4e5a-9d0b-3375126d3367}) of ThingClass extendedSmartMeterConsumer Energie geändert - - Extended smart meter consumer - The name of the ThingClass ({c3123967-f741-4fe1-a0d4-9a3e405d7e52}) - Erweiterter Smart-Meter Verbraucher - Impulse/kWh The name of the ParamType (ThingClass: extendedSmartMeterConsumer, Type: settings, ID: {c361732b-68eb-447e-a434-e84031231871}) Impulse/kWh - S0 impulse - The name of the ActionType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + Impulse input + The name of the ParamType (ThingClass: extendedSmartMeterConsumer, ActionType: impulseInput, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) ---------- -The name of the EventType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer - S0 Impulse - - - S0 input - The name of the ParamType (ThingClass: extendedSmartMeterConsumer, ActionType: s0Input, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) ----------- -The name of the ParamType (ThingClass: extendedSmartMeterConsumer, EventType: s0Input, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) +The name of the ParamType (ThingClass: extendedSmartMeterConsumer, EventType: impulseInput, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) ---------- The name of the StateType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer - S0 Input + Impulseingang + + + Impulse input changed + The name of the EventType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + Impulseingang geändert + + + Set impulse input + The name of the ActionType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + Setze Impulseingang + + + Timeframe for power calculation + The name of the ParamType (ThingClass: extendedSmartMeterConsumer, Type: settings, ID: {73c9acc3-8f76-40d7-a79b-a1f08bb308d4}) + Zeitfenster für Leistungsberechnung + + + Impulse based energy meter + The name of the ThingClass ({c3123967-f741-4fe1-a0d4-9a3e405d7e52}) + Impulsbasierter Energiezähler diff --git a/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-en_US.ts b/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-en_US.ts index edb544f..fd67c5f 100644 --- a/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-en_US.ts +++ b/genericthings/translations/b3188696-2585-4806-bf98-30ab576ce5c8-en_US.ts @@ -567,30 +567,38 @@ The name of the StateType ({5821edb7-e6cb-4e5a-9d0b-3375126d3367}) of ThingClass The name of the EventType ({5821edb7-e6cb-4e5a-9d0b-3375126d3367}) of ThingClass extendedSmartMeterConsumer - - Extended smart meter consumer - The name of the ThingClass ({c3123967-f741-4fe1-a0d4-9a3e405d7e52}) - - Impulse/kWh The name of the ParamType (ThingClass: extendedSmartMeterConsumer, Type: settings, ID: {c361732b-68eb-447e-a434-e84031231871}) - S0 impulse - The name of the ActionType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + Impulse input + The name of the ParamType (ThingClass: extendedSmartMeterConsumer, ActionType: impulseInput, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) ---------- -The name of the EventType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer +The name of the ParamType (ThingClass: extendedSmartMeterConsumer, EventType: impulseInput, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) +---------- +The name of the StateType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer - S0 input - The name of the ParamType (ThingClass: extendedSmartMeterConsumer, ActionType: s0Input, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) ----------- -The name of the ParamType (ThingClass: extendedSmartMeterConsumer, EventType: s0Input, ID: {9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) ----------- -The name of the StateType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + Impulse input changed + The name of the EventType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + + + + Set impulse input + The name of the ActionType ({9cd7e5ca-f8f8-48d5-9785-911ae75158c3}) of ThingClass extendedSmartMeterConsumer + + + + Timeframe for power calculation + The name of the ParamType (ThingClass: extendedSmartMeterConsumer, Type: settings, ID: {73c9acc3-8f76-40d7-a79b-a1f08bb308d4}) + + + + Impulse based energy meter + The name of the ThingClass ({c3123967-f741-4fe1-a0d4-9a3e405d7e52})