From 4e5a4c514248787f7c208a5ea7092a5c2c5b2ecc Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 26 Jun 2022 00:11:11 +0200 Subject: [PATCH 1/2] Tasmota: Add support for energy metering --- tasmota/integrationplugintasmota.cpp | 88 +++++++++++++-------------- tasmota/integrationplugintasmota.h | 7 --- tasmota/integrationplugintasmota.json | 58 ++++++++++++++++++ 3 files changed, 102 insertions(+), 51 deletions(-) diff --git a/tasmota/integrationplugintasmota.cpp b/tasmota/integrationplugintasmota.cpp index 1eb499b4..d21c622f 100644 --- a/tasmota/integrationplugintasmota.cpp +++ b/tasmota/integrationplugintasmota.cpp @@ -42,9 +42,11 @@ #include "network/mqtt/mqttchannel.h" static QHash sonoff_basicPowerStateTypeIds = { + {"POWER", sonoff_basicPowerStateTypeId}, // On single channel devices, sometimes there's no index {"POWER1", sonoff_basicPowerStateTypeId}, }; static QHash sonoff_dimmerPowerStateTypeIds = { + {"POWER", sonoff_dimmerPowerStateTypeId}, // On single channel devices, sometimes there's no index {"POWER1", sonoff_dimmerPowerStateTypeId}, }; static QHash sonoff_dualPowerStateTypeIds = { @@ -92,9 +94,6 @@ IntegrationPluginTasmota::IntegrationPluginTasmota() m_openingChannelParamTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsThingOpeningChannelParamTypeId; m_closingChannelParamTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsThingClosingChannelParamTypeId; - m_powerStateTypeMap[tasmotaSwitchThingClassId] = tasmotaSwitchPowerStateTypeId; - m_powerStateTypeMap[tasmotaLightThingClassId] = tasmotaLightPowerStateTypeId; - m_closableOpenActionTypeMap[tasmotaShutterThingClassId] = tasmotaShutterOpenActionTypeId; m_closableCloseActionTypeMap[tasmotaShutterThingClassId] = tasmotaShutterCloseActionTypeId; m_closableStopActionTypeMap[tasmotaShutterThingClassId] = tasmotaShutterStopActionTypeId; @@ -102,29 +101,6 @@ IntegrationPluginTasmota::IntegrationPluginTasmota() m_closableOpenActionTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsOpenActionTypeId; m_closableCloseActionTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsCloseActionTypeId; m_closableStopActionTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsStopActionTypeId; - - // Helper maps for all devices - m_connectedStateTypeMap[sonoff_basicThingClassId] = sonoff_basicConnectedStateTypeId; - m_connectedStateTypeMap[sonoff_dualThingClassId] = sonoff_dualConnectedStateTypeId; - m_connectedStateTypeMap[sonoff_triThingClassId] = sonoff_triConnectedStateTypeId; - m_connectedStateTypeMap[sonoff_quadThingClassId] = sonoff_quadConnectedStateTypeId; - m_connectedStateTypeMap[sonoff_dimmerThingClassId] = sonoff_dimmerConnectedStateTypeId; - m_connectedStateTypeMap[tasmotaSwitchThingClassId] = tasmotaSwitchConnectedStateTypeId; - m_connectedStateTypeMap[tasmotaLightThingClassId] = tasmotaLightConnectedStateTypeId; - m_connectedStateTypeMap[tasmotaShutterThingClassId] = tasmotaShutterConnectedStateTypeId; - m_connectedStateTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsConnectedStateTypeId; - - m_signalStrengthStateTypeMap[sonoff_basicThingClassId] = sonoff_basicSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[sonoff_dualThingClassId] = sonoff_dualSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[sonoff_triThingClassId] = sonoff_triSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[sonoff_quadThingClassId] = sonoff_quadSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[sonoff_dimmerThingClassId] = sonoff_dimmerSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[tasmotaSwitchThingClassId] = tasmotaSwitchSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[tasmotaLightThingClassId] = tasmotaLightSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[tasmotaShutterThingClassId] = tasmotaShutterSignalStrengthStateTypeId; - m_signalStrengthStateTypeMap[tasmotaBlindsThingClassId] = tasmotaBlindsSignalStrengthStateTypeId; - - m_brightnessStateTypeMap[sonoff_dimmerThingClassId] = sonoff_dimmerBrightnessStateTypeId; } IntegrationPluginTasmota::~IntegrationPluginTasmota() @@ -266,10 +242,9 @@ void IntegrationPluginTasmota::setupThing(ThingSetupInfo *info) return; } - if (m_connectedStateTypeMap.contains(thing->thingClassId())) { + if (thing->hasState("connected")) { Thing* parentDevice = myThings().findById(thing->parentId()); - StateTypeId connectedStateTypeId = m_connectedStateTypeMap.value(thing->thingClassId()); - thing->setStateValue(m_connectedStateTypeMap.value(thing->thingClassId()), parentDevice->stateValue(connectedStateTypeId)); + thing->setStateValue("connected", parentDevice->stateValue("connected")); return info->finish(Thing::ThingErrorNoError); } @@ -327,7 +302,7 @@ void IntegrationPluginTasmota::executeAction(ThingActionInfo *info) } // Legacy (deprecated) connected devices - if (m_powerStateTypeMap.contains(thing->thingClassId())) { + if (thing->hasState("power")) { Thing *parentDev = myThings().findById(thing->parentId()); MqttChannel *channel = m_mqttChannels.value(parentDev); if (!channel) { @@ -335,10 +310,10 @@ void IntegrationPluginTasmota::executeAction(ThingActionInfo *info) return info->finish(Thing::ThingErrorHardwareNotAvailable); } ParamTypeId channelParamTypeId = m_channelParamTypeMap.value(thing->thingClassId()); - ParamTypeId powerActionParamTypeId = ParamTypeId(m_powerStateTypeMap.value(thing->thingClassId()).toString()); + ParamTypeId powerActionParamTypeId = thing->thingClass().actionTypes().findByName("power").paramTypes().findByName("power").id(); qCDebug(dcTasmota) << "Publishing:" << channel->topicPrefixList().first() + "/sonoff/cmnd/" + thing->paramValue(channelParamTypeId).toString() << (action.param(powerActionParamTypeId).value().toBool() ? "ON" : "OFF"); channel->publish(channel->topicPrefixList().first() + "/sonoff/cmnd/" + thing->paramValue(channelParamTypeId).toString().toLower(), action.param(powerActionParamTypeId).value().toBool() ? "ON" : "OFF"); - thing->setStateValue(m_powerStateTypeMap.value(thing->thingClassId()), action.param(powerActionParamTypeId).value().toBool()); + thing->setStateValue("power", action.param(powerActionParamTypeId).value().toBool()); return info->finish(Thing::ThingErrorNoError); } if (m_closableStopActionTypeMap.contains(thing->thingClassId())) { @@ -375,11 +350,11 @@ void IntegrationPluginTasmota::onClientConnected(MqttChannel *channel) { qCDebug(dcTasmota) << "Sonoff thing connected!"; Thing *dev = m_mqttChannels.key(channel); - dev->setStateValue(m_connectedStateTypeMap.value(dev->thingClassId()), true); + dev->setStateValue("connected", true); foreach (Thing *child, myThings()) { if (child->parentId() == dev->id()) { - child->setStateValue(m_connectedStateTypeMap.value(child->thingClassId()), true); + child->setStateValue("connected", true); } } } @@ -388,11 +363,11 @@ void IntegrationPluginTasmota::onClientDisconnected(MqttChannel *channel) { qCDebug(dcTasmota) << "Sonoff thing disconnected!"; Thing *dev = m_mqttChannels.key(channel); - dev->setStateValue(m_connectedStateTypeMap.value(dev->thingClassId()), false); + dev->setStateValue("connected", false); foreach (Thing *child, myThings()) { if (child->parentId() == dev->id()) { - child->setStateValue(m_connectedStateTypeMap.value(child->thingClassId()), false); + child->setStateValue("connected", false); } } } @@ -411,8 +386,8 @@ void IntegrationPluginTasmota::onPublishReceived(MqttChannel *channel, const QSt if (child->paramValue(m_channelParamTypeMap.value(child->thingClassId())).toString() != channelName) { continue; } - if (m_powerStateTypeMap.contains(child->thingClassId())) { - child->setStateValue(m_powerStateTypeMap.value(child->thingClassId()), payload == "ON"); + if (child->hasState("power")) { + child->setStateValue("power", payload == "ON"); } if (child->thingClassId() == tasmotaSwitchThingClassId) { Event event(tasmotaSwitchPressedEventTypeId, child->id()); @@ -428,20 +403,45 @@ void IntegrationPluginTasmota::onPublishReceived(MqttChannel *channel, const QSt return; } QVariantMap dataMap = jsonDoc.toVariant().toMap(); - thing->setStateValue(m_signalStrengthStateTypeMap.value(thing->thingClassId()), dataMap.value("Wifi").toMap().value("RSSI").toInt()); + thing->setStateValue("signalStrength", dataMap.value("Wifi").toMap().value("RSSI").toInt()); - if (m_brightnessStateTypeMap.contains(thing->thingClassId())) { - thing->setStateValue(m_brightnessStateTypeMap.value(thing->thingClassId()), dataMap.value("Dimmer").toInt()); + if (thing->hasState("brightness")) { + thing->setStateValue("brightness", dataMap.value("Dimmer").toInt()); } // Legacy (deprecated) connected things by params foreach (Thing *child, myThings().filterByParentId(thing->id())) { - if (m_powerStateTypeMap.contains(child->thingClassId())) { + if (child->hasState("power")) { QString childChannel = child->paramValue(m_channelParamTypeMap.value(child->thingClassId())).toString(); QString valueString = jsonDoc.toVariant().toMap().value(childChannel).toString(); - child->setStateValue(m_powerStateTypeMap.value(child->thingClassId()), valueString == "ON"); + child->setStateValue("power", valueString == "ON"); } - child->setStateValue(m_signalStrengthStateTypeMap.value(child->thingClassId()), dataMap.value("Wifi").toMap().value("RSSI").toInt()); + child->setStateValue("signalStrength", dataMap.value("Wifi").toMap().value("RSSI").toInt()); + } + } + if (topic.startsWith(channel->topicPrefixList().first() + "/sonoff/SENSOR")) { + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(payload, &error); + if (error.error != QJsonParseError::NoError) { + qCWarning(dcTasmota) << "Cannot parse JSON from Tasmota device" << error.errorString(); + return; + } + QVariantMap dataMap = jsonDoc.toVariant().toMap(); + + if (dataMap.contains("ENERGY")) { + QVariantMap energyMap = dataMap.value("ENERGY").toMap(); + QString channelName = topic.split("/").last(); + + // If we received energy meter values but don't have a power meter child yet, create one + Thing *meter = myThings().filterByParentId(thing->id()).filterByInterface("smartmeterconsumer").findByParams({Param(powerMeterChannelThingChannelNameParamTypeId, channelName)}); + if (!meter) { + ThingDescriptor descriptor(powerMeterChannelThingClassId, thing->name(), QString(), thing->id()); + descriptor.setParams({Param(powerMeterChannelThingChannelNameParamTypeId, channelName)}); + emit autoThingsAppeared({descriptor}); + return; + } + meter->setStateValue("currentPower", energyMap.value("Power").toDouble()); + meter->setStateValue("totalEnergyConsumed", energyMap.value("Total").toDouble()); } } } diff --git a/tasmota/integrationplugintasmota.h b/tasmota/integrationplugintasmota.h index a499234d..2d6a4248 100644 --- a/tasmota/integrationplugintasmota.h +++ b/tasmota/integrationplugintasmota.h @@ -68,17 +68,10 @@ private: QHash m_channelParamTypeMap; QHash m_openingChannelParamTypeMap; QHash m_closingChannelParamTypeMap; - QHash m_powerStateTypeMap; QHash m_closableOpenActionTypeMap; QHash m_closableCloseActionTypeMap; QHash m_closableStopActionTypeMap; - - // Helpers for both devices - QHash m_connectedStateTypeMap; - QHash m_signalStrengthStateTypeMap; - - QHash m_brightnessStateTypeMap; }; #endif // INTEGRATIONPLUGINTASMOTA_H diff --git a/tasmota/integrationplugintasmota.json b/tasmota/integrationplugintasmota.json index 59b0833e..623d5c21 100644 --- a/tasmota/integrationplugintasmota.json +++ b/tasmota/integrationplugintasmota.json @@ -623,6 +623,64 @@ "displayName": "Stop" } ] + }, + { + "id": "805487dd-768b-47d5-a0a9-c7021bbec6ff", + "name": "powerMeterChannel", + "displayName": "Power meter", + "createMethods": ["auto"], + "interfaces": ["smartmeterconsumer", "wirelessconnectable"], + "paramTypes": [ + { + "id": "72bafebf-e541-4ede-aed5-a17241a57743", + "name": "channelName", + "displayName": "Channel name", + "type": "QString" + } + ], + "stateTypes": [ + { + "id": "f268fa63-e17f-41ab-9536-ec2e21a9164c", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connected changed", + "type": "bool", + "defaultValue": false, + "cached": false + }, + { + "id": "5ef7fb87-901f-4f1f-8db0-1aa0e0ee633e", + "name": "signalStrength", + "displayName": "Signal strength", + "displayNameEvent": "Signal strength changed", + "type": "uint", + "unit": "Percentage", + "minValue": 0, + "maxValue": 100, + "defaultValue": 0, + "cached": false + }, + { + "id": "bcd91dba-d063-445a-9680-32d64da29fc0", + "name": "currentPower", + "displayName": "Current power consumption", + "displayNameEvent": "Current power consumption changed", + "type": "double", + "unit": "Watt", + "defaultValue": 0, + "cached": false + }, + { + "id": "ebd82e2f-4d23-451a-a26d-9c95fd3c00be", + "name": "totalEnergyConsumed", + "displayName": "Total consumed energy", + "displayNameEvent": "Total consumption changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + } + ] + } ] } From 3eca97aa8aed98b00fa142054dff2a166b3bc06b Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sun, 26 Jun 2022 23:17:50 +0200 Subject: [PATCH 2/2] Configure teleperiod to 10 secs interval --- tasmota/integrationplugintasmota.cpp | 1 + ...6e0c0-0cbf-4731-aabb-b2201088d6cb-en_US.ts | 171 ++---------------- 2 files changed, 21 insertions(+), 151 deletions(-) diff --git a/tasmota/integrationplugintasmota.cpp b/tasmota/integrationplugintasmota.cpp index d21c622f..00bd0474 100644 --- a/tasmota/integrationplugintasmota.cpp +++ b/tasmota/integrationplugintasmota.cpp @@ -140,6 +140,7 @@ void IntegrationPluginTasmota::setupThing(ThingSetupInfo *info) configItems.insert("MqttUser", channel->username()); configItems.insert("MqttPassword", channel->password()); configItems.insert("Topic", "sonoff"); + configItems.insert("TelePeriod", "10"); configItems.insert("FullTopic", channel->topicPrefixList().first() + "/%topic%/"); QStringList configList; diff --git a/tasmota/translations/d136e0c0-0cbf-4731-aabb-b2201088d6cb-en_US.ts b/tasmota/translations/d136e0c0-0cbf-4731-aabb-b2201088d6cb-en_US.ts index 9f4cc6e3..53e0bee1 100644 --- a/tasmota/translations/d136e0c0-0cbf-4731-aabb-b2201088d6cb-en_US.ts +++ b/tasmota/translations/d136e0c0-0cbf-4731-aabb-b2201088d6cb-en_US.ts @@ -49,63 +49,26 @@ The name of the ParamType (ThingClass: sonoff_basic, Type: thing, ID: {cdead654- The name of the ParamType (ThingClass: sonoff_basic, Type: thing, ID: {f210d0c0-dda1-442d-a0cc-2f2e48c24984}) - - Connected changed - The name of the EventType ({686ad054-0ee5-4135-8f2d-dda993532262}) of ThingClass tasmotaBlinds ----------- -The name of the EventType ({7bbf0bbf-abb3-487e-b5e9-077f7b00d8ef}) of ThingClass tasmotaShutter ----------- -The name of the EventType ({72050de9-c318-4e53-93e5-36f7c2fc7cab}) of ThingClass tasmotaLight ----------- -The name of the EventType ({b4607e5d-70c4-4e76-9d9a-c6de7c50377e}) of ThingClass tasmotaSwitch ----------- -The name of the EventType ({1078dd25-b5bd-4005-8c1f-005ddca7ea21}) of ThingClass sonoff_dimmer ----------- -The name of the EventType ({5b422d28-9f60-4ea9-ab23-42a0ec605b9e}) of ThingClass sonoff_quad ----------- -The name of the EventType ({e6439ea4-4373-4ac1-a790-748604cf2830}) of ThingClass sonoff_tri ----------- -The name of the EventType ({e2f55332-e706-412e-beb6-abf76b3bcff3}) of ThingClass sonoff_dual ----------- -The name of the EventType ({9cde6321-2abf-4a58-a1d6-c7418edb9747}) of ThingClass sonoff_basic - - Connected - The name of the ParamType (ThingClass: tasmotaBlinds, EventType: connected, ID: {686ad054-0ee5-4135-8f2d-dda993532262}) + The name of the StateType ({f268fa63-e17f-41ab-9536-ec2e21a9164c}) of ThingClass powerMeterChannel ---------- The name of the StateType ({686ad054-0ee5-4135-8f2d-dda993532262}) of ThingClass tasmotaBlinds ---------- -The name of the ParamType (ThingClass: tasmotaShutter, EventType: connected, ID: {7bbf0bbf-abb3-487e-b5e9-077f7b00d8ef}) ----------- The name of the StateType ({7bbf0bbf-abb3-487e-b5e9-077f7b00d8ef}) of ThingClass tasmotaShutter ---------- -The name of the ParamType (ThingClass: tasmotaLight, EventType: connected, ID: {72050de9-c318-4e53-93e5-36f7c2fc7cab}) ----------- The name of the StateType ({72050de9-c318-4e53-93e5-36f7c2fc7cab}) of ThingClass tasmotaLight ---------- -The name of the ParamType (ThingClass: tasmotaSwitch, EventType: connected, ID: {b4607e5d-70c4-4e76-9d9a-c6de7c50377e}) ----------- The name of the StateType ({b4607e5d-70c4-4e76-9d9a-c6de7c50377e}) of ThingClass tasmotaSwitch ---------- -The name of the ParamType (ThingClass: sonoff_dimmer, EventType: connected, ID: {1078dd25-b5bd-4005-8c1f-005ddca7ea21}) ----------- The name of the StateType ({1078dd25-b5bd-4005-8c1f-005ddca7ea21}) of ThingClass sonoff_dimmer ---------- -The name of the ParamType (ThingClass: sonoff_quad, EventType: connected, ID: {5b422d28-9f60-4ea9-ab23-42a0ec605b9e}) ----------- The name of the StateType ({5b422d28-9f60-4ea9-ab23-42a0ec605b9e}) of ThingClass sonoff_quad ---------- -The name of the ParamType (ThingClass: sonoff_tri, EventType: connected, ID: {e6439ea4-4373-4ac1-a790-748604cf2830}) ----------- The name of the StateType ({e6439ea4-4373-4ac1-a790-748604cf2830}) of ThingClass sonoff_tri ---------- -The name of the ParamType (ThingClass: sonoff_dual, EventType: connected, ID: {e2f55332-e706-412e-beb6-abf76b3bcff3}) ----------- The name of the StateType ({e2f55332-e706-412e-beb6-abf76b3bcff3}) of ThingClass sonoff_dual ---------- -The name of the ParamType (ThingClass: sonoff_basic, EventType: connected, ID: {9cde6321-2abf-4a58-a1d6-c7418edb9747}) ----------- The name of the StateType ({9cde6321-2abf-4a58-a1d6-c7418edb9747}) of ThingClass sonoff_basic @@ -156,46 +119,29 @@ The name of the ParamType (ThingClass: sonoff_tri, Type: thing, ID: {7dada813-d3 Channel name - The name of the ParamType (ThingClass: tasmotaLight, Type: thing, ID: {1f792ae4-cf39-4e12-99ca-c593bd020fcb}) + The name of the ParamType (ThingClass: powerMeterChannel, Type: thing, ID: {72bafebf-e541-4ede-aed5-a17241a57743}) +---------- +The name of the ParamType (ThingClass: tasmotaLight, Type: thing, ID: {1f792ae4-cf39-4e12-99ca-c593bd020fcb}) ---------- The name of the ParamType (ThingClass: tasmotaSwitch, Type: thing, ID: {564cf6c6-86eb-41a5-9b87-fb32f1b6fcd6}) - - Power changed - The name of the EventType ({88dbdf8e-45ff-466f-8352-8654a6b5fe68}) of ThingClass tasmotaLight ----------- -The name of the EventType ({413503d7-fc9f-417a-95fa-5c350a6f69f9}) of ThingClass tasmotaSwitch ----------- -The name of the EventType ({c8ec62d4-024b-4770-b893-6288b64f0dfe}) of ThingClass sonoff_dimmer ----------- -The name of the EventType ({0b5a48c9-73b8-42ab-9909-71b8dc2227e3}) of ThingClass sonoff_basic - - Power The name of the ParamType (ThingClass: tasmotaLight, ActionType: power, ID: {88dbdf8e-45ff-466f-8352-8654a6b5fe68}) ---------- -The name of the ParamType (ThingClass: tasmotaLight, EventType: power, ID: {88dbdf8e-45ff-466f-8352-8654a6b5fe68}) ----------- The name of the StateType ({88dbdf8e-45ff-466f-8352-8654a6b5fe68}) of ThingClass tasmotaLight ---------- The name of the ParamType (ThingClass: tasmotaSwitch, ActionType: power, ID: {413503d7-fc9f-417a-95fa-5c350a6f69f9}) ---------- -The name of the ParamType (ThingClass: tasmotaSwitch, EventType: power, ID: {413503d7-fc9f-417a-95fa-5c350a6f69f9}) ----------- The name of the StateType ({413503d7-fc9f-417a-95fa-5c350a6f69f9}) of ThingClass tasmotaSwitch ---------- The name of the ParamType (ThingClass: sonoff_dimmer, ActionType: power, ID: {c8ec62d4-024b-4770-b893-6288b64f0dfe}) ---------- -The name of the ParamType (ThingClass: sonoff_dimmer, EventType: power, ID: {c8ec62d4-024b-4770-b893-6288b64f0dfe}) ----------- The name of the StateType ({c8ec62d4-024b-4770-b893-6288b64f0dfe}) of ThingClass sonoff_dimmer ---------- The name of the ParamType (ThingClass: sonoff_basic, ActionType: power, ID: {0b5a48c9-73b8-42ab-9909-71b8dc2227e3}) ---------- -The name of the ParamType (ThingClass: sonoff_basic, EventType: power, ID: {0b5a48c9-73b8-42ab-9909-71b8dc2227e3}) ----------- The name of the StateType ({0b5a48c9-73b8-42ab-9909-71b8dc2227e3}) of ThingClass sonoff_basic @@ -277,160 +223,75 @@ The name of the ActionType ({c9c9c569-e224-4f63-abed-782cba04d61b}) of ThingClas Signal strength - The name of the ParamType (ThingClass: tasmotaBlinds, EventType: signalStrength, ID: {dc58b863-1e84-4469-b226-cd4349d82050}) + The name of the StateType ({5ef7fb87-901f-4f1f-8db0-1aa0e0ee633e}) of ThingClass powerMeterChannel ---------- The name of the StateType ({dc58b863-1e84-4469-b226-cd4349d82050}) of ThingClass tasmotaBlinds ---------- -The name of the ParamType (ThingClass: tasmotaShutter, EventType: signalStrength, ID: {1de7fac2-87f1-4c2b-9286-1b0895c5ac49}) ----------- The name of the StateType ({1de7fac2-87f1-4c2b-9286-1b0895c5ac49}) of ThingClass tasmotaShutter ---------- -The name of the ParamType (ThingClass: tasmotaLight, EventType: signalStrength, ID: {dcc39f5e-6bcb-4c04-910e-8dd5f9ad5402}) ----------- The name of the StateType ({dcc39f5e-6bcb-4c04-910e-8dd5f9ad5402}) of ThingClass tasmotaLight ---------- -The name of the ParamType (ThingClass: tasmotaSwitch, EventType: signalStrength, ID: {34e54234-d2d6-4c93-8d52-bada19e5ff23}) ----------- The name of the StateType ({34e54234-d2d6-4c93-8d52-bada19e5ff23}) of ThingClass tasmotaSwitch ---------- -The name of the ParamType (ThingClass: sonoff_dimmer, EventType: signalStrength, ID: {662d99de-bfce-4cf0-8029-108e9911866c}) ----------- The name of the StateType ({662d99de-bfce-4cf0-8029-108e9911866c}) of ThingClass sonoff_dimmer ---------- -The name of the ParamType (ThingClass: sonoff_quad, EventType: signalStrength, ID: {d80d8f37-f3c0-4364-998b-312339fd1fa8}) ----------- The name of the StateType ({d80d8f37-f3c0-4364-998b-312339fd1fa8}) of ThingClass sonoff_quad ---------- -The name of the ParamType (ThingClass: sonoff_tri, EventType: signalStrength, ID: {08b4ec84-1aec-4e68-a3b4-ae251b8cbe6d}) ----------- The name of the StateType ({08b4ec84-1aec-4e68-a3b4-ae251b8cbe6d}) of ThingClass sonoff_tri ---------- -The name of the ParamType (ThingClass: sonoff_dual, EventType: signalStrength, ID: {3d6a567f-d266-4711-bcf1-3ac1f53abadb}) ----------- The name of the StateType ({3d6a567f-d266-4711-bcf1-3ac1f53abadb}) of ThingClass sonoff_dual ---------- -The name of the ParamType (ThingClass: sonoff_basic, EventType: signalStrength, ID: {f70e202a-c178-4fbe-a778-713220d11b23}) ----------- The name of the StateType ({f70e202a-c178-4fbe-a778-713220d11b23}) of ThingClass sonoff_basic - - Signal strength changed - The name of the EventType ({dc58b863-1e84-4469-b226-cd4349d82050}) of ThingClass tasmotaBlinds ----------- -The name of the EventType ({1de7fac2-87f1-4c2b-9286-1b0895c5ac49}) of ThingClass tasmotaShutter ----------- -The name of the EventType ({dcc39f5e-6bcb-4c04-910e-8dd5f9ad5402}) of ThingClass tasmotaLight ----------- -The name of the EventType ({34e54234-d2d6-4c93-8d52-bada19e5ff23}) of ThingClass tasmotaSwitch ----------- -The name of the EventType ({662d99de-bfce-4cf0-8029-108e9911866c}) of ThingClass sonoff_dimmer ----------- -The name of the EventType ({d80d8f37-f3c0-4364-998b-312339fd1fa8}) of ThingClass sonoff_quad ----------- -The name of the EventType ({08b4ec84-1aec-4e68-a3b4-ae251b8cbe6d}) of ThingClass sonoff_tri ----------- -The name of the EventType ({3d6a567f-d266-4711-bcf1-3ac1f53abadb}) of ThingClass sonoff_dual ----------- -The name of the EventType ({f70e202a-c178-4fbe-a778-713220d11b23}) of ThingClass sonoff_basic - - Power channel 1 The name of the ParamType (ThingClass: sonoff_quad, ActionType: powerCH1, ID: {e8fd95c3-2323-40d8-89cf-40e0068977d8}) ---------- -The name of the ParamType (ThingClass: sonoff_quad, EventType: powerCH1, ID: {e8fd95c3-2323-40d8-89cf-40e0068977d8}) ----------- The name of the StateType ({e8fd95c3-2323-40d8-89cf-40e0068977d8}) of ThingClass sonoff_quad ---------- The name of the ParamType (ThingClass: sonoff_tri, ActionType: powerCH1, ID: {27bdb42d-ef95-4905-ac3d-925bcc8a1ba1}) ---------- -The name of the ParamType (ThingClass: sonoff_tri, EventType: powerCH1, ID: {27bdb42d-ef95-4905-ac3d-925bcc8a1ba1}) ----------- The name of the StateType ({27bdb42d-ef95-4905-ac3d-925bcc8a1ba1}) of ThingClass sonoff_tri ---------- The name of the ParamType (ThingClass: sonoff_dual, ActionType: powerCH1, ID: {b8bf3085-8061-4cd6-af1f-f76a03054f46}) ---------- -The name of the ParamType (ThingClass: sonoff_dual, EventType: powerCH1, ID: {b8bf3085-8061-4cd6-af1f-f76a03054f46}) ----------- The name of the StateType ({b8bf3085-8061-4cd6-af1f-f76a03054f46}) of ThingClass sonoff_dual - - Power channel 1 changed - The name of the EventType ({e8fd95c3-2323-40d8-89cf-40e0068977d8}) of ThingClass sonoff_quad ----------- -The name of the EventType ({27bdb42d-ef95-4905-ac3d-925bcc8a1ba1}) of ThingClass sonoff_tri ----------- -The name of the EventType ({b8bf3085-8061-4cd6-af1f-f76a03054f46}) of ThingClass sonoff_dual - - Power channel 2 The name of the ParamType (ThingClass: sonoff_quad, ActionType: powerCH2, ID: {baf0ca62-7f09-45ea-aea1-6de34764e6cb}) ---------- -The name of the ParamType (ThingClass: sonoff_quad, EventType: powerCH2, ID: {baf0ca62-7f09-45ea-aea1-6de34764e6cb}) ----------- The name of the StateType ({baf0ca62-7f09-45ea-aea1-6de34764e6cb}) of ThingClass sonoff_quad ---------- The name of the ParamType (ThingClass: sonoff_tri, ActionType: powerCH2, ID: {705d8277-896a-4d56-b9ff-0a614ecfd39c}) ---------- -The name of the ParamType (ThingClass: sonoff_tri, EventType: powerCH2, ID: {705d8277-896a-4d56-b9ff-0a614ecfd39c}) ----------- The name of the StateType ({705d8277-896a-4d56-b9ff-0a614ecfd39c}) of ThingClass sonoff_tri ---------- The name of the ParamType (ThingClass: sonoff_dual, ActionType: powerCH2, ID: {4fbcaeb6-9242-4aa6-b462-a214fb38bcc9}) ---------- -The name of the ParamType (ThingClass: sonoff_dual, EventType: powerCH2, ID: {4fbcaeb6-9242-4aa6-b462-a214fb38bcc9}) ----------- The name of the StateType ({4fbcaeb6-9242-4aa6-b462-a214fb38bcc9}) of ThingClass sonoff_dual - - Power channel 2 changed - The name of the EventType ({baf0ca62-7f09-45ea-aea1-6de34764e6cb}) of ThingClass sonoff_quad ----------- -The name of the EventType ({705d8277-896a-4d56-b9ff-0a614ecfd39c}) of ThingClass sonoff_tri ----------- -The name of the EventType ({4fbcaeb6-9242-4aa6-b462-a214fb38bcc9}) of ThingClass sonoff_dual - - Power channel 3 The name of the ParamType (ThingClass: sonoff_quad, ActionType: powerCH3, ID: {8b939d15-3e45-40aa-bb53-9b3fb47f3cb3}) ---------- -The name of the ParamType (ThingClass: sonoff_quad, EventType: powerCH3, ID: {8b939d15-3e45-40aa-bb53-9b3fb47f3cb3}) ----------- The name of the StateType ({8b939d15-3e45-40aa-bb53-9b3fb47f3cb3}) of ThingClass sonoff_quad ---------- The name of the ParamType (ThingClass: sonoff_tri, ActionType: powerCH3, ID: {156f285d-e474-43d9-9a9d-17b3bcaef893}) ---------- -The name of the ParamType (ThingClass: sonoff_tri, EventType: powerCH3, ID: {156f285d-e474-43d9-9a9d-17b3bcaef893}) ----------- The name of the StateType ({156f285d-e474-43d9-9a9d-17b3bcaef893}) of ThingClass sonoff_tri - - Power channel 3 changed - The name of the EventType ({8b939d15-3e45-40aa-bb53-9b3fb47f3cb3}) of ThingClass sonoff_quad ----------- -The name of the EventType ({156f285d-e474-43d9-9a9d-17b3bcaef893}) of ThingClass sonoff_tri - - Power channel 4 The name of the ParamType (ThingClass: sonoff_quad, ActionType: powerCH4, ID: {4060baa0-2b11-4905-908c-b6f1c3b6a892}) ---------- -The name of the ParamType (ThingClass: sonoff_quad, EventType: powerCH4, ID: {4060baa0-2b11-4905-908c-b6f1c3b6a892}) ----------- The name of the StateType ({4060baa0-2b11-4905-908c-b6f1c3b6a892}) of ThingClass sonoff_quad - - Power channel 4 changed - The name of the EventType ({4060baa0-2b11-4905-908c-b6f1c3b6a892}) of ThingClass sonoff_quad - - Set power channel 1 The name of the ActionType ({e8fd95c3-2323-40d8-89cf-40e0068977d8}) of ThingClass sonoff_quad @@ -465,16 +326,9 @@ The name of the ActionType ({156f285d-e474-43d9-9a9d-17b3bcaef893}) of ThingClas Brightness The name of the ParamType (ThingClass: sonoff_dimmer, ActionType: brightness, ID: {5cd8d0df-1188-4da1-9a87-bff991d3b2af}) ---------- -The name of the ParamType (ThingClass: sonoff_dimmer, EventType: brightness, ID: {5cd8d0df-1188-4da1-9a87-bff991d3b2af}) ----------- The name of the StateType ({5cd8d0df-1188-4da1-9a87-bff991d3b2af}) of ThingClass sonoff_dimmer - - Brightness changed - The name of the EventType ({5cd8d0df-1188-4da1-9a87-bff991d3b2af}) of ThingClass sonoff_dimmer - - Dimmer (Sonoff D1...) The name of the ThingClass ({4fb65caa-7f84-4496-91f6-1cd35574cc2e}) @@ -485,5 +339,20 @@ The name of the StateType ({5cd8d0df-1188-4da1-9a87-bff991d3b2af}) of ThingClass The name of the ActionType ({5cd8d0df-1188-4da1-9a87-bff991d3b2af}) of ThingClass sonoff_dimmer + + Current power consumption + The name of the StateType ({bcd91dba-d063-445a-9680-32d64da29fc0}) of ThingClass powerMeterChannel + + + + Power meter + The name of the ThingClass ({805487dd-768b-47d5-a0a9-c7021bbec6ff}) + + + + Total consumed energy + The name of the StateType ({ebd82e2f-4d23-451a-a26d-9c95fd3c00be}) of ThingClass powerMeterChannel + +