From 62dc44157e14bab7dc12db94aea18a7ec734e2ac Mon Sep 17 00:00:00 2001 From: Michael Zanetti Date: Sat, 27 Nov 2021 00:43:44 +0100 Subject: [PATCH] New Plugin: mec electronics --- debian/control | 8 + debian/nymea-plugin-mecelectronics.install.in | 1 + mecelectronics/README.md | 6 + .../integrationpluginmecelectronics.cpp | 364 ++++++++++++++++++ .../integrationpluginmecelectronics.h | 70 ++++ .../integrationpluginmecelectronics.json | 204 ++++++++++ mecelectronics/mecelectronics.png | Bin 0 -> 38966 bytes mecelectronics/mecelectronics.pro | 10 + mecelectronics/meta.json | 13 + ...5853701d-a335-4282-892f-f23670269505-de.ts | 324 ++++++++++++++++ ...3701d-a335-4282-892f-f23670269505-en_US.ts | 324 ++++++++++++++++ nymea-plugins.pro | 1 + 12 files changed, 1325 insertions(+) create mode 100644 debian/nymea-plugin-mecelectronics.install.in create mode 100644 mecelectronics/README.md create mode 100644 mecelectronics/integrationpluginmecelectronics.cpp create mode 100644 mecelectronics/integrationpluginmecelectronics.h create mode 100644 mecelectronics/integrationpluginmecelectronics.json create mode 100644 mecelectronics/mecelectronics.png create mode 100644 mecelectronics/mecelectronics.pro create mode 100644 mecelectronics/meta.json create mode 100644 mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-de.ts create mode 100644 mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-en_US.ts diff --git a/debian/control b/debian/control index b92711ac..ab990035 100644 --- a/debian/control +++ b/debian/control @@ -476,6 +476,14 @@ Description: nymea.io plugin for lifx . This package will install the nymea.io plugin for lifx +Package: nymea-plugin-mecelectronics +Architecture: any +Depends: ${shlibs:Depends}, + ${misc:Depends}, + nymea-plugins-translations, +Description: nymea.io plugin for mec electronics devices + This package will add support for the mec meter to nymea. + Package: nymea-plugin-mailnotification Architecture: any diff --git a/debian/nymea-plugin-mecelectronics.install.in b/debian/nymea-plugin-mecelectronics.install.in new file mode 100644 index 00000000..589ff78f --- /dev/null +++ b/debian/nymea-plugin-mecelectronics.install.in @@ -0,0 +1 @@ +usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginmecelectronics.so diff --git a/mecelectronics/README.md b/mecelectronics/README.md new file mode 100644 index 00000000..e31793ea --- /dev/null +++ b/mecelectronics/README.md @@ -0,0 +1,6 @@ +# mec electronics + +This plugin adds support for the mecMeter energy meter by mec electronics. + +More information at: https://www.mec.at/produkte/#mecMeter + diff --git a/mecelectronics/integrationpluginmecelectronics.cpp b/mecelectronics/integrationpluginmecelectronics.cpp new file mode 100644 index 00000000..2078ac35 --- /dev/null +++ b/mecelectronics/integrationpluginmecelectronics.cpp @@ -0,0 +1,364 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#include "integrationpluginmecelectronics.h" +#include "plugininfo.h" + +#include +#include +#include +#include + +#include +#include +#include + + +IntegrationPluginMecMeter::IntegrationPluginMecMeter() +{ +} + +IntegrationPluginMecMeter::~IntegrationPluginMecMeter() +{ +} + +void IntegrationPluginMecMeter::init() +{ + m_zeroConf = hardwareManager()->zeroConfController()->createServiceBrowser("_http._tcp"); + + connect(m_zeroConf, &ZeroConfServiceBrowser::serviceEntryAdded, this, [=](const ZeroConfServiceEntry &entry){ + if (myThings().findByParams({Param(mecMeterThingIdParamTypeId, entry.name())})) { + pluginStorage()->beginGroup(entry.name()); + pluginStorage()->setValue("cachedAddress", entry.hostAddress().toString()); + pluginStorage()->endGroup(); + } + }); +} + +void IntegrationPluginMecMeter::discoverThings(ThingDiscoveryInfo *info) +{ + foreach (const ZeroConfServiceEntry &entry, m_zeroConf->serviceEntries()) { + if (entry.protocol() != QAbstractSocket::IPv4Protocol) { + continue; + } + qCDebug(dcMecElectronics()) << "zeroconf entry:" << entry; + QRegExp match("mec[A-Z0-9]{12}"); + if (match.exactMatch(entry.name())) { + qCDebug(dcMecElectronics()) << "Found mec meter!"; + ThingDescriptor descriptor(mecMeterThingClassId, entry.name(), entry.hostAddress().toString()); + descriptor.setParams({Param(mecMeterThingIdParamTypeId, entry.name())}); + info->addThingDescriptor(descriptor); + } + } + info->finish(Thing::ThingErrorNoError); +} + +void IntegrationPluginMecMeter::startPairing(ThingPairingInfo *info) +{ + info->finish(Thing::ThingErrorNoError, QT_TR_NOOP("Please enter your login credentials for the mecMeter.")); +} + +void IntegrationPluginMecMeter::confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret) +{ + QString meterId = info->params().paramValue(mecMeterThingIdParamTypeId).toString(); + QNetworkRequest request = composeRequest(meterId, username, secret); + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); + connect(reply, &QNetworkReply::finished, info, [=](){ + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcMecElectronics()) << "Error connecting to mecmeter:" << reply->error() << reply->errorString(); + info->finish(Thing::ThingErrorHardwareFailure); + } + + pluginStorage()->beginGroup(meterId); + pluginStorage()->setValue("username", username); + pluginStorage()->setValue("password", secret); + pluginStorage()->endGroup(); + + info->finish(Thing::ThingErrorNoError); + }); + +} + +void IntegrationPluginMecMeter::setupThing(ThingSetupInfo *info) +{ + info->finish(Thing::ThingErrorNoError); +} + +void IntegrationPluginMecMeter::postSetupThing(Thing *thing) +{ + Q_UNUSED(thing) + + if (!m_timer) { + m_timer = hardwareManager()->pluginTimerManager()->registerTimer(1); + connect(m_timer, &PluginTimer::timeout, this, [this](){ + foreach (Thing *thing, myThings()) { + refresh(thing); + } + }); + } +} + +void IntegrationPluginMecMeter::thingRemoved(Thing *thing) +{ + Q_UNUSED(thing) + if (myThings().isEmpty() && m_timer) { + hardwareManager()->pluginTimerManager()->unregisterTimer(m_timer); + m_timer = nullptr; + } +} + +void IntegrationPluginMecMeter::refresh(Thing *thing) +{ + QString meterId = thing->paramValue(mecMeterThingIdParamTypeId).toString(); + pluginStorage()->beginGroup(meterId); + QString username = pluginStorage()->value("username").toString(); + QString password = pluginStorage()->value("password").toString(); + pluginStorage()->endGroup(); + QNetworkRequest request = composeRequest(thing->paramValue(mecMeterThingIdParamTypeId).toString(), username, password); + + QNetworkReply *reply = hardwareManager()->networkManager()->get(request); + connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater); + connect(reply, &QNetworkReply::finished, thing, [thing, reply](){ + if (reply->error() != QNetworkReply::NoError) { + qCWarning(dcMecElectronics()) << "Failed to refresh meter data. The reply returned with error" << reply->errorString(); + thing->setStateValue(mecMeterConnectedStateTypeId, false); + return; + } + + QByteArray data = reply->readAll(); + QJsonParseError error; + QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); + + if (error.error != QJsonParseError::NoError) { + qCWarning(dcMecElectronics()) << "Failed to parse meter data" << data << ":" << error.errorString(); + return; + } + + thing->setStateValue(mecMeterConnectedStateTypeId, true); + + QVariantMap dataMap = jsonDoc.toVariant().toMap(); + qCDebug(dcMecElectronics()) << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented)); + + /* + { + "EFAA": 0, + "EFAB": 0, + "EFAC": 0, + "EFAF": 0, + "EFAH": 0, + "EFAT": 0, + "EFBF": 0, + "EFBH": 0, + "EFCF": 0, + "EFCH": 0, + "EFRA": 0, + "EFRB": 0, + "EFRC": 0.026041666666666668, + "EFRT": 0.026041666666666668, + "EFSA": 0, + "EFSB": 0, + "EFSC": 1193.7760416666667, + "EFST": 841.9010416666667, + "EFTF": 0, + "EFTH": 0, + "EMT": 1.9661458333333335, + "ERA1": 0, + "ERA2": 0, + "ERA3": 0, + "ERA4": 0, + "ERAA": 0, + "ERAB": 0, + "ERAC": 11.848958333333334, + "ERAF": 0, + "ERAH": 0, + "ERAT": 11.848958333333334, + "ERB1": 0, + "ERB2": 0, + "ERB3": 0, + "ERB4": 0, + "ERBF": 0, + "ERBH": 0, + "ERC1": 0, + "ERC2": 0.026041666666666668, + "ERC3": 1.7447916666666667, + "ERC4": 0.9895833333333334, + "ERCF": 11.822916666666668, + "ERCH": 0, + "ERRA": 0, + "ERRB": 0, + "ERRC": 2.734375, + "ERRT": 2.734375, + "ERSA": 0, + "ERSB": 0, + "ERSC": 2341.588541666667, + "ERST": 2693.463541666667, + "ERT1": 0, + "ERT2": 0.026041666666666668, + "ERT3": 2.265625, + "ERT4": 0.46875, + "ERTF": 11.822916666666668, + "ERTH": 0, + "ESA": 0, + "ESB": 0, + "ESC": 3535.3645833333335, + "EST": 3535.3645833333335, + "EVT": 2355.7552083333335, + "F": 49.99, + "IA": 0.007428385416666667, + "IAA": 0, + "IAB": 0, + "IAC": 30.200000000000003, + "IADC": -6.40869140625e-05, + "IB": 0.03445963541666667, + "IBDC": -0.00044403076171874997, + "IC": 0.012877604166666667, + "ICDC": 0.000157928466796875, + "IN": 3.429166666666667, + "IN0": 0.034, + "PA": 0, + "PAF": 0, + "PAH": 0, + "PB": 0, + "PBF": 0, + "PBH": 0, + "PC": -0.01953125, + "PCF": -0.016276041666666668, + "PCH": 0, + "PFA": 0, + "PFB": 0, + "PFC": -0.008, + "PFT": -0.007, + "PT": -0.013020833333333334, + "PTF": -0.013020833333333334, + "PTH": 0, + "QA": 0, + "QB": 0, + "QC": -0.009765625, + "QT": 0, + "SA": 0, + "SAMPLES": 13385877, + "SB": 0, + "SC": 2.98828125, + "ST": 2.9817708333333335, + "STATUS": 372, + "T": 36, + "THIA": 0, + "THIB": 0, + "THIC": 40.81666666666667, + "THUA": 0, + "THUB": 0, + "THUC": 2.5250000000000004, + "TIME": 4283480878, + "UAA": 0, + "UAB": 0, + "UAC": 0, + "VA": 0, + "VAB": 0, + "VB": 0, + "VBC": 231.947734375, + "VC": 231.947734375, + "VCA": 231.947734375, + "VPT": 154.63182291666666, + "VT": 77.31591145833333 + } + */ + + + // Total energy / power + thing->setStateValue(mecMeterTotalEnergyConsumedStateTypeId, dataMap.value("EFAT").toDouble() / 1000.0); + thing->setStateValue(mecMeterTotalEnergyProducedStateTypeId, dataMap.value("ERAT").toDouble() / 1000.0); + thing->setStateValue(mecMeterCurrentPowerStateTypeId, dataMap.value("PT").toDouble()); +// thing->setStateValue(mecMeterTotalForwardeReactiveEnergyStateTypeId, dataMap.value("EFRT").toDouble()); + + // Voltage + thing->setStateValue(mecMeterVoltagePhaseAStateTypeId, dataMap.value("VA").toDouble()); + thing->setStateValue(mecMeterVoltagePhaseBStateTypeId, dataMap.value("VB").toDouble()); + thing->setStateValue(mecMeterVoltagePhaseCStateTypeId, dataMap.value("VC").toDouble()); + + // Current + thing->setStateValue(mecMeterCurrentPhaseAStateTypeId, dataMap.value("IA").toDouble()); + thing->setStateValue(mecMeterCurrentPhaseBStateTypeId, dataMap.value("IB").toDouble()); + thing->setStateValue(mecMeterCurrentPhaseCStateTypeId, dataMap.value("IC").toDouble()); + + // Power + thing->setStateValue(mecMeterCurrentPowerPhaseAStateTypeId, dataMap.value("PA").toDouble()); + thing->setStateValue(mecMeterCurrentPowerPhaseBStateTypeId, dataMap.value("PB").toDouble()); + thing->setStateValue(mecMeterCurrentPowerPhaseCStateTypeId, dataMap.value("PC").toDouble()); + + // Frequency +// thing->setStateValue(mecMeterFrequencyStateTypeId, dataMap.value("F").toDouble()); + + // Energy consumed + thing->setStateValue(mecMeterEnergyConsumedPhaseAStateTypeId, dataMap.value("EFAA").toDouble() / 1000.0); + thing->setStateValue(mecMeterEnergyConsumedPhaseBStateTypeId, dataMap.value("EFAB").toDouble() / 1000.0); + thing->setStateValue(mecMeterEnergyConsumedPhaseCStateTypeId, dataMap.value("EFAC").toDouble() / 1000.0); + + // Energy produced + thing->setStateValue(mecMeterEnergyProducedPhaseAStateTypeId, dataMap.value("ERAA").toDouble() / 1000.0); + thing->setStateValue(mecMeterEnergyProducedPhaseBStateTypeId, dataMap.value("ERAB").toDouble() / 1000.0); + thing->setStateValue(mecMeterEnergyProducedPhaseCStateTypeId, dataMap.value("ERAC").toDouble() / 1000.0); + }); +} + +QNetworkRequest IntegrationPluginMecMeter::composeRequest(const QString &meterId, const QString &username, const QString &password) +{ + QHostAddress address; + foreach (const ZeroConfServiceEntry &entry, m_zeroConf->serviceEntries()) { + if (entry.protocol() == QAbstractSocket::IPv4Protocol && entry.name() == meterId) { + address = entry.hostAddress(); + break; + } + } + + if (address.isNull()) { + pluginStorage()->beginGroup(meterId); + address = pluginStorage()->value("cachedAddress").toString(); + pluginStorage()->endGroup(); + } + + if (address.isNull()) { + qCWarning(dcMecElectronics()) << "Error finding mecMeter device in the network"; + return QNetworkRequest(); + } + + QUrl url; + url.setScheme("http"); + url.setHost(address.toString()); + url.setPath("/wizard/public/api/measurements"); + + QNetworkRequest request(url); + QString concatenated = username + ":" + password; + QByteArray data = concatenated.toLocal8Bit().toBase64(); + QString headerData = "Basic " + data; + request.setRawHeader("Authorization", headerData.toLocal8Bit()); + + return request; +} + diff --git a/mecelectronics/integrationpluginmecelectronics.h b/mecelectronics/integrationpluginmecelectronics.h new file mode 100644 index 00000000..c0534e78 --- /dev/null +++ b/mecelectronics/integrationpluginmecelectronics.h @@ -0,0 +1,70 @@ +/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * +* +* Copyright 2013 - 2020, nymea GmbH +* Contact: contact@nymea.io +* +* This file is part of nymea. +* This project including source code and documentation is protected by +* copyright law, and remains the property of nymea GmbH. All rights, including +* reproduction, publication, editing and translation, are reserved. The use of +* this project is subject to the terms of a license agreement to be concluded +* with nymea GmbH in accordance with the terms of use of nymea GmbH, available +* under https://nymea.io/license +* +* GNU Lesser General Public License Usage +* Alternatively, this project may be redistributed and/or modified under the +* terms of the GNU Lesser General Public License as published by the Free +* Software Foundation; version 3. This project is distributed in the hope that +* it will be useful, but WITHOUT ANY WARRANTY; without even the implied +* warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU +* Lesser General Public License for more details. +* +* You should have received a copy of the GNU Lesser General Public License +* along with this project. If not, see . +* +* For any further details and any questions please contact us under +* contact@nymea.io or see our FAQ/Licensing Information on +* https://nymea.io/license/faq +* +* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */ + +#ifndef INTEGRATIONPLUGINMECMETER_H +#define INTEGRATIONPLUGINMECMETER_H + +#include "integrations/integrationplugin.h" + +class PluginTimer; +class ZeroConfServiceBrowser; + +#include + +class IntegrationPluginMecMeter: public IntegrationPlugin +{ + Q_OBJECT + + Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginmecelectronics.json") + Q_INTERFACES(IntegrationPlugin) + +public: + explicit IntegrationPluginMecMeter(); + ~IntegrationPluginMecMeter(); + + void init() override; + void discoverThings(ThingDiscoveryInfo *info) override; + void startPairing(ThingPairingInfo *info) override; + void confirmPairing(ThingPairingInfo *info, const QString &username, const QString &secret) override; + void setupThing(ThingSetupInfo *info) override; + void postSetupThing(Thing *thing) override; + void thingRemoved(Thing *thing) override; + +private slots: + void refresh(Thing *thing); + +private: + QNetworkRequest composeRequest(const QString &meterId, const QString &userId, const QString &password); + + ZeroConfServiceBrowser *m_zeroConf = nullptr; + PluginTimer *m_timer = nullptr; +}; + +#endif // INTEGRATIONPLUGINMECMETER_H diff --git a/mecelectronics/integrationpluginmecelectronics.json b/mecelectronics/integrationpluginmecelectronics.json new file mode 100644 index 00000000..965f80d8 --- /dev/null +++ b/mecelectronics/integrationpluginmecelectronics.json @@ -0,0 +1,204 @@ +{ + "name": "mecElectronics", + "displayName": "mecElectronics", + "id": "5853701d-a335-4282-892f-f23670269505", + "vendors": [ + { + "name": "mecElectronics", + "displayName": "mec electronics", + "id": "09b121c5-29c5-456c-b30a-07c2662c763c", + "thingClasses": [ + { + "id": "a26a874d-aa3f-4531-bf9f-1c03ab70aa62", + "name": "mecMeter", + "displayName": "mecMeter", + "createMethods": ["discovery"], + "setupMethod": "userandpassword", + "interfaces": [ "energymeter", "connectable" ], + "paramTypes": [ + { + "id": "00f4fac0-0c27-4132-95cd-841869a8b122", + "name": "id", + "displayName": "ID", + "type": "QString", + "defaultValue": "" + } + ], + "stateTypes": [ + { + "id": "825fbdf8-cf4b-4122-a5f6-b99cff182154", + "name": "connected", + "displayName": "Connected", + "displayNameEvent": "Connected changed", + "type": "bool", + "defaultValue": false, + "cached": false + }, + { + "id": "ffcf6c7c-e1bc-48d3-adf6-142864c200bd", + "name": "currentPower", + "displayName": "Current power consumption", + "displayNameEvent": "Current power consumption changed", + "type": "double", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "2c36c0ce-1935-4fc7-84ad-b4e22335d7f7", + "name": "totalEnergyConsumed", + "displayName": "Total consumed energy", + "displayNameEvent": "Total consumed energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "317ca9f1-92a7-4b7e-bd16-6df6e364ef61", + "name": "totalEnergyProduced", + "displayName": "Total returned energy", + "displayNameEvent": "Total returned energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "a2900841-5817-4971-b5a2-cca3e1ab6c1d", + "name": "currentPhaseA", + "displayName": "Phase A current", + "displayNameEvent": "Phase A current changed", + "type": "double", + "unit": "Ampere", + "defaultValue": 0 + }, + { + "id": "0aebf62a-fc9c-4457-8168-6a40c0227337", + "name": "voltagePhaseA", + "displayName": "Phase A voltage", + "displayNameEvent": "Phase A voltage changed", + "type": "double", + "unit": "Volt", + "defaultValue": 0 + }, + { + "id": "777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d", + "name": "currentPowerPhaseA", + "displayName": "Phase A power", + "displayNameEvent": "Phase A power changed", + "type": "double", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "ae04176e-387e-4876-8e0c-32f8fa224595", + "name": "energyConsumedPhaseA", + "displayName": "Phase A consumed energy", + "displayNameEvent": "Phase A consumed energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "b454057d-8e97-4f96-b0c3-7e4cbf4044c0", + "name": "energyProducedPhaseA", + "displayName": "Phase A returned energy", + "displayNameEvent": "Phase A returned energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "90fc6894-044a-45ec-83f4-f38134f35018", + "name": "currentPhaseB", + "displayName": "Phase B current", + "displayNameEvent": "Phase B current changed", + "type": "double", + "unit": "Ampere", + "defaultValue": 0 + }, + { + "id": "4495030f-23e9-4013-ab00-d95fc8c2eb21", + "name": "voltagePhaseB", + "displayName": "Phase B voltage", + "displayNameEvent": "Phase B voltage changed", + "type": "double", + "unit": "Volt", + "defaultValue": 0 + }, + { + "id": "632998c0-28c5-4986-acaa-1a40b77efc9d", + "name": "currentPowerPhaseB", + "displayName": "Phase B power", + "displayNameEvent": "Phase B power changed", + "type": "double", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7", + "name": "energyConsumedPhaseB", + "displayName": "Phase B consumed energy", + "displayNameEvent": "Phase B consumed energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "a0407475-e770-4a74-b4b4-34b458a26801", + "name": "energyProducedPhaseB", + "displayName": "Phase B returned energy", + "displayNameEvent": "Phase B returned energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "ec0ed738-0e79-4db9-83df-746ec18d25f3", + "name": "currentPhaseC", + "displayName": "Phase C current", + "displayNameEvent": "Phase C current changed", + "type": "double", + "unit": "Ampere", + "defaultValue": 0 + }, + { + "id": "fb8f5094-6d6b-44b7-b244-67614a7a06ff", + "name": "voltagePhaseC", + "displayName": "Phase C voltage", + "displayNameEvent": "Phase C voltage changed", + "type": "double", + "unit": "Volt", + "defaultValue": 0 + }, + { + "id": "333909a9-f28e-4e8a-a377-ff32fb80ae82", + "name": "currentPowerPhaseC", + "displayName": "Phase C power", + "displayNameEvent": "Phase C power changed", + "type": "double", + "unit": "Watt", + "defaultValue": 0 + }, + { + "id": "ef43baf0-2f20-44d5-930d-528107c53cac", + "name": "energyConsumedPhaseC", + "displayName": "Phase C consumed energy", + "displayNameEvent": "Phase C consumed energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + }, + { + "id": "6b08f113-204c-45c9-9b1a-118416aefcd7", + "name": "energyProducedPhaseC", + "displayName": "Phase C returned energy", + "displayNameEvent": "Phase C returned energy changed", + "type": "double", + "unit": "KiloWattHour", + "defaultValue": 0 + } + ] + } + ] + } + ] +} diff --git a/mecelectronics/mecelectronics.png b/mecelectronics/mecelectronics.png new file mode 100644 index 0000000000000000000000000000000000000000..2f88aab8560b977b0724683f4f2e0548cf8cb9c1 GIT binary patch literal 38966 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 + + + + IntegrationPluginMecMeter + + + Please enter your login credentials for the mecMeter. + Bitte gib Deine Logindaten für das mecMeter ein. + + + + mecElectronics + + + + Connected + The name of the ParamType (ThingClass: mecMeter, EventType: connected, ID: {825fbdf8-cf4b-4122-a5f6-b99cff182154}) +---------- +The name of the StateType ({825fbdf8-cf4b-4122-a5f6-b99cff182154}) of ThingClass mecMeter + Verbunden + + + + Connected changed + The name of the EventType ({825fbdf8-cf4b-4122-a5f6-b99cff182154}) of ThingClass mecMeter + Verbunden/getrennt + + + + + Current power consumption + The name of the ParamType (ThingClass: mecMeter, EventType: currentPower, ID: {ffcf6c7c-e1bc-48d3-adf6-142864c200bd}) +---------- +The name of the StateType ({ffcf6c7c-e1bc-48d3-adf6-142864c200bd}) of ThingClass mecMeter + Aktueller Stromverbrauch + + + + Current power consumption changed + The name of the EventType ({ffcf6c7c-e1bc-48d3-adf6-142864c200bd}) of ThingClass mecMeter + Aktueller Stromverbrauch geändert + + + + ID + The name of the ParamType (ThingClass: mecMeter, Type: thing, ID: {00f4fac0-0c27-4132-95cd-841869a8b122}) + ID + + + + + Phase A consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyConsumedPhaseA, ID: {ae04176e-387e-4876-8e0c-32f8fa224595}) +---------- +The name of the StateType ({ae04176e-387e-4876-8e0c-32f8fa224595}) of ThingClass mecMeter + Energieverbrauch Phase A + + + + Phase A consumed energy changed + The name of the EventType ({ae04176e-387e-4876-8e0c-32f8fa224595}) of ThingClass mecMeter + Energieverbrauch Phase A geändert + + + + + Phase A current + The name of the ParamType (ThingClass: mecMeter, EventType: currentPhaseA, ID: {a2900841-5817-4971-b5a2-cca3e1ab6c1d}) +---------- +The name of the StateType ({a2900841-5817-4971-b5a2-cca3e1ab6c1d}) of ThingClass mecMeter + Strom Phase A + + + + Phase A current changed + The name of the EventType ({a2900841-5817-4971-b5a2-cca3e1ab6c1d}) of ThingClass mecMeter + Strom Phase A geändert + + + + + Phase A power + The name of the ParamType (ThingClass: mecMeter, EventType: currentPowerPhaseA, ID: {777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d}) +---------- +The name of the StateType ({777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d}) of ThingClass mecMeter + Energie Phase A + + + + Phase A power changed + The name of the EventType ({777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d}) of ThingClass mecMeter + Energie Phase A geändert + + + + + Phase A returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyProducedPhaseA, ID: {b454057d-8e97-4f96-b0c3-7e4cbf4044c0}) +---------- +The name of the StateType ({b454057d-8e97-4f96-b0c3-7e4cbf4044c0}) of ThingClass mecMeter + Rückgespeiste Energie Phase A + + + + Phase A returned energy changed + The name of the EventType ({b454057d-8e97-4f96-b0c3-7e4cbf4044c0}) of ThingClass mecMeter + Rückgespeiste Energie Phase A geändert + + + + + Phase A voltage + The name of the ParamType (ThingClass: mecMeter, EventType: voltagePhaseA, ID: {0aebf62a-fc9c-4457-8168-6a40c0227337}) +---------- +The name of the StateType ({0aebf62a-fc9c-4457-8168-6a40c0227337}) of ThingClass mecMeter + Spannung Phase A + + + + Phase A voltage changed + The name of the EventType ({0aebf62a-fc9c-4457-8168-6a40c0227337}) of ThingClass mecMeter + Spannung Phase A gändert + + + + + Phase B consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyConsumedPhaseB, ID: {e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7}) +---------- +The name of the StateType ({e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7}) of ThingClass mecMeter + Energieverbrauch Phase B + + + + Phase B consumed energy changed + The name of the EventType ({e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7}) of ThingClass mecMeter + Energieverbrauch Phase B geändert + + + + + Phase B current + The name of the ParamType (ThingClass: mecMeter, EventType: currentPhaseB, ID: {90fc6894-044a-45ec-83f4-f38134f35018}) +---------- +The name of the StateType ({90fc6894-044a-45ec-83f4-f38134f35018}) of ThingClass mecMeter + Strom Phase B + + + + Phase B current changed + The name of the EventType ({90fc6894-044a-45ec-83f4-f38134f35018}) of ThingClass mecMeter + Strom Phase B geändert + + + + + Phase B power + The name of the ParamType (ThingClass: mecMeter, EventType: currentPowerPhaseB, ID: {632998c0-28c5-4986-acaa-1a40b77efc9d}) +---------- +The name of the StateType ({632998c0-28c5-4986-acaa-1a40b77efc9d}) of ThingClass mecMeter + Energie Phase B + + + + Phase B power changed + The name of the EventType ({632998c0-28c5-4986-acaa-1a40b77efc9d}) of ThingClass mecMeter + Energie Phase B geändert + + + + + Phase B returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyProducedPhaseB, ID: {a0407475-e770-4a74-b4b4-34b458a26801}) +---------- +The name of the StateType ({a0407475-e770-4a74-b4b4-34b458a26801}) of ThingClass mecMeter + Rückgespeiste Energie Phase B + + + + Phase B returned energy changed + The name of the EventType ({a0407475-e770-4a74-b4b4-34b458a26801}) of ThingClass mecMeter + Rückgespeiste Energie Phase B geändert + + + + + Phase B voltage + The name of the ParamType (ThingClass: mecMeter, EventType: voltagePhaseB, ID: {4495030f-23e9-4013-ab00-d95fc8c2eb21}) +---------- +The name of the StateType ({4495030f-23e9-4013-ab00-d95fc8c2eb21}) of ThingClass mecMeter + Spannung Phase B + + + + Phase B voltage changed + The name of the EventType ({4495030f-23e9-4013-ab00-d95fc8c2eb21}) of ThingClass mecMeter + Spannung Phase B geändert + + + + + Phase C consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyConsumedPhaseC, ID: {ef43baf0-2f20-44d5-930d-528107c53cac}) +---------- +The name of the StateType ({ef43baf0-2f20-44d5-930d-528107c53cac}) of ThingClass mecMeter + Energieverbrauch Phase C + + + + Phase C consumed energy changed + The name of the EventType ({ef43baf0-2f20-44d5-930d-528107c53cac}) of ThingClass mecMeter + Energieverbrauch Phase C geändert + + + + + Phase C current + The name of the ParamType (ThingClass: mecMeter, EventType: currentPhaseC, ID: {ec0ed738-0e79-4db9-83df-746ec18d25f3}) +---------- +The name of the StateType ({ec0ed738-0e79-4db9-83df-746ec18d25f3}) of ThingClass mecMeter + Strom Phase C + + + + Phase C current changed + The name of the EventType ({ec0ed738-0e79-4db9-83df-746ec18d25f3}) of ThingClass mecMeter + Strom Phase C geändert + + + + + Phase C power + The name of the ParamType (ThingClass: mecMeter, EventType: currentPowerPhaseC, ID: {333909a9-f28e-4e8a-a377-ff32fb80ae82}) +---------- +The name of the StateType ({333909a9-f28e-4e8a-a377-ff32fb80ae82}) of ThingClass mecMeter + Energie Phase C + + + + Phase C power changed + The name of the EventType ({333909a9-f28e-4e8a-a377-ff32fb80ae82}) of ThingClass mecMeter + Energie Phase C geändert + + + + + Phase C returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyProducedPhaseC, ID: {6b08f113-204c-45c9-9b1a-118416aefcd7}) +---------- +The name of the StateType ({6b08f113-204c-45c9-9b1a-118416aefcd7}) of ThingClass mecMeter + Rückgespeiste Energie Phase C + + + + Phase C returned energy changed + The name of the EventType ({6b08f113-204c-45c9-9b1a-118416aefcd7}) of ThingClass mecMeter + Rückgespeiste Energie Phase C geändert + + + + + Phase C voltage + The name of the ParamType (ThingClass: mecMeter, EventType: voltagePhaseC, ID: {fb8f5094-6d6b-44b7-b244-67614a7a06ff}) +---------- +The name of the StateType ({fb8f5094-6d6b-44b7-b244-67614a7a06ff}) of ThingClass mecMeter + Spannung Phase C + + + + Phase C voltage changed + The name of the EventType ({fb8f5094-6d6b-44b7-b244-67614a7a06ff}) of ThingClass mecMeter + Spannung Phase C geändert + + + + + Total consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: totalEnergyConsumed, ID: {2c36c0ce-1935-4fc7-84ad-b4e22335d7f7}) +---------- +The name of the StateType ({2c36c0ce-1935-4fc7-84ad-b4e22335d7f7}) of ThingClass mecMeter + Gesamter Energieverbrauch + + + + Total consumed energy changed + The name of the EventType ({2c36c0ce-1935-4fc7-84ad-b4e22335d7f7}) of ThingClass mecMeter + Gesamter Energieverbrauch geändert + + + + + Total returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: totalEnergyProduced, ID: {317ca9f1-92a7-4b7e-bd16-6df6e364ef61}) +---------- +The name of the StateType ({317ca9f1-92a7-4b7e-bd16-6df6e364ef61}) of ThingClass mecMeter + Gesamte rückgespeiste Energie + + + + Total returned energy changed + The name of the EventType ({317ca9f1-92a7-4b7e-bd16-6df6e364ef61}) of ThingClass mecMeter + Gesamte rückgespeiste Energie geändert + + + + mec electronics + The name of the vendor ({09b121c5-29c5-456c-b30a-07c2662c763c}) + mec electronics + + + + mecElectronics + The name of the plugin mecElectronics ({5853701d-a335-4282-892f-f23670269505}) + mecElectronics + + + + mecMeter + The name of the ThingClass ({a26a874d-aa3f-4531-bf9f-1c03ab70aa62}) + mecMeter + + + diff --git a/mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-en_US.ts b/mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-en_US.ts new file mode 100644 index 00000000..54680200 --- /dev/null +++ b/mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-en_US.ts @@ -0,0 +1,324 @@ + + + + + IntegrationPluginMecMeter + + + Please enter your login credentials for the mecMeter. + + + + + mecElectronics + + + + Connected + The name of the ParamType (ThingClass: mecMeter, EventType: connected, ID: {825fbdf8-cf4b-4122-a5f6-b99cff182154}) +---------- +The name of the StateType ({825fbdf8-cf4b-4122-a5f6-b99cff182154}) of ThingClass mecMeter + + + + + Connected changed + The name of the EventType ({825fbdf8-cf4b-4122-a5f6-b99cff182154}) of ThingClass mecMeter + + + + + + Current power consumption + The name of the ParamType (ThingClass: mecMeter, EventType: currentPower, ID: {ffcf6c7c-e1bc-48d3-adf6-142864c200bd}) +---------- +The name of the StateType ({ffcf6c7c-e1bc-48d3-adf6-142864c200bd}) of ThingClass mecMeter + + + + + Current power consumption changed + The name of the EventType ({ffcf6c7c-e1bc-48d3-adf6-142864c200bd}) of ThingClass mecMeter + + + + + ID + The name of the ParamType (ThingClass: mecMeter, Type: thing, ID: {00f4fac0-0c27-4132-95cd-841869a8b122}) + + + + + + Phase A consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyConsumedPhaseA, ID: {ae04176e-387e-4876-8e0c-32f8fa224595}) +---------- +The name of the StateType ({ae04176e-387e-4876-8e0c-32f8fa224595}) of ThingClass mecMeter + + + + + Phase A consumed energy changed + The name of the EventType ({ae04176e-387e-4876-8e0c-32f8fa224595}) of ThingClass mecMeter + + + + + + Phase A current + The name of the ParamType (ThingClass: mecMeter, EventType: currentPhaseA, ID: {a2900841-5817-4971-b5a2-cca3e1ab6c1d}) +---------- +The name of the StateType ({a2900841-5817-4971-b5a2-cca3e1ab6c1d}) of ThingClass mecMeter + + + + + Phase A current changed + The name of the EventType ({a2900841-5817-4971-b5a2-cca3e1ab6c1d}) of ThingClass mecMeter + + + + + + Phase A power + The name of the ParamType (ThingClass: mecMeter, EventType: currentPowerPhaseA, ID: {777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d}) +---------- +The name of the StateType ({777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d}) of ThingClass mecMeter + + + + + Phase A power changed + The name of the EventType ({777ca8ed-623f-4aaa-8aaf-a0f3746ffc4d}) of ThingClass mecMeter + + + + + + Phase A returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyProducedPhaseA, ID: {b454057d-8e97-4f96-b0c3-7e4cbf4044c0}) +---------- +The name of the StateType ({b454057d-8e97-4f96-b0c3-7e4cbf4044c0}) of ThingClass mecMeter + + + + + Phase A returned energy changed + The name of the EventType ({b454057d-8e97-4f96-b0c3-7e4cbf4044c0}) of ThingClass mecMeter + + + + + + Phase A voltage + The name of the ParamType (ThingClass: mecMeter, EventType: voltagePhaseA, ID: {0aebf62a-fc9c-4457-8168-6a40c0227337}) +---------- +The name of the StateType ({0aebf62a-fc9c-4457-8168-6a40c0227337}) of ThingClass mecMeter + + + + + Phase A voltage changed + The name of the EventType ({0aebf62a-fc9c-4457-8168-6a40c0227337}) of ThingClass mecMeter + + + + + + Phase B consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyConsumedPhaseB, ID: {e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7}) +---------- +The name of the StateType ({e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7}) of ThingClass mecMeter + + + + + Phase B consumed energy changed + The name of the EventType ({e20911fb-e0a6-4fe6-a9f7-ecbb1ebb8ee7}) of ThingClass mecMeter + + + + + + Phase B current + The name of the ParamType (ThingClass: mecMeter, EventType: currentPhaseB, ID: {90fc6894-044a-45ec-83f4-f38134f35018}) +---------- +The name of the StateType ({90fc6894-044a-45ec-83f4-f38134f35018}) of ThingClass mecMeter + + + + + Phase B current changed + The name of the EventType ({90fc6894-044a-45ec-83f4-f38134f35018}) of ThingClass mecMeter + + + + + + Phase B power + The name of the ParamType (ThingClass: mecMeter, EventType: currentPowerPhaseB, ID: {632998c0-28c5-4986-acaa-1a40b77efc9d}) +---------- +The name of the StateType ({632998c0-28c5-4986-acaa-1a40b77efc9d}) of ThingClass mecMeter + + + + + Phase B power changed + The name of the EventType ({632998c0-28c5-4986-acaa-1a40b77efc9d}) of ThingClass mecMeter + + + + + + Phase B returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyProducedPhaseB, ID: {a0407475-e770-4a74-b4b4-34b458a26801}) +---------- +The name of the StateType ({a0407475-e770-4a74-b4b4-34b458a26801}) of ThingClass mecMeter + + + + + Phase B returned energy changed + The name of the EventType ({a0407475-e770-4a74-b4b4-34b458a26801}) of ThingClass mecMeter + + + + + + Phase B voltage + The name of the ParamType (ThingClass: mecMeter, EventType: voltagePhaseB, ID: {4495030f-23e9-4013-ab00-d95fc8c2eb21}) +---------- +The name of the StateType ({4495030f-23e9-4013-ab00-d95fc8c2eb21}) of ThingClass mecMeter + + + + + Phase B voltage changed + The name of the EventType ({4495030f-23e9-4013-ab00-d95fc8c2eb21}) of ThingClass mecMeter + + + + + + Phase C consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyConsumedPhaseC, ID: {ef43baf0-2f20-44d5-930d-528107c53cac}) +---------- +The name of the StateType ({ef43baf0-2f20-44d5-930d-528107c53cac}) of ThingClass mecMeter + + + + + Phase C consumed energy changed + The name of the EventType ({ef43baf0-2f20-44d5-930d-528107c53cac}) of ThingClass mecMeter + + + + + + Phase C current + The name of the ParamType (ThingClass: mecMeter, EventType: currentPhaseC, ID: {ec0ed738-0e79-4db9-83df-746ec18d25f3}) +---------- +The name of the StateType ({ec0ed738-0e79-4db9-83df-746ec18d25f3}) of ThingClass mecMeter + + + + + Phase C current changed + The name of the EventType ({ec0ed738-0e79-4db9-83df-746ec18d25f3}) of ThingClass mecMeter + + + + + + Phase C power + The name of the ParamType (ThingClass: mecMeter, EventType: currentPowerPhaseC, ID: {333909a9-f28e-4e8a-a377-ff32fb80ae82}) +---------- +The name of the StateType ({333909a9-f28e-4e8a-a377-ff32fb80ae82}) of ThingClass mecMeter + + + + + Phase C power changed + The name of the EventType ({333909a9-f28e-4e8a-a377-ff32fb80ae82}) of ThingClass mecMeter + + + + + + Phase C returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: energyProducedPhaseC, ID: {6b08f113-204c-45c9-9b1a-118416aefcd7}) +---------- +The name of the StateType ({6b08f113-204c-45c9-9b1a-118416aefcd7}) of ThingClass mecMeter + + + + + Phase C returned energy changed + The name of the EventType ({6b08f113-204c-45c9-9b1a-118416aefcd7}) of ThingClass mecMeter + + + + + + Phase C voltage + The name of the ParamType (ThingClass: mecMeter, EventType: voltagePhaseC, ID: {fb8f5094-6d6b-44b7-b244-67614a7a06ff}) +---------- +The name of the StateType ({fb8f5094-6d6b-44b7-b244-67614a7a06ff}) of ThingClass mecMeter + + + + + Phase C voltage changed + The name of the EventType ({fb8f5094-6d6b-44b7-b244-67614a7a06ff}) of ThingClass mecMeter + + + + + + Total consumed energy + The name of the ParamType (ThingClass: mecMeter, EventType: totalEnergyConsumed, ID: {2c36c0ce-1935-4fc7-84ad-b4e22335d7f7}) +---------- +The name of the StateType ({2c36c0ce-1935-4fc7-84ad-b4e22335d7f7}) of ThingClass mecMeter + + + + + Total consumed energy changed + The name of the EventType ({2c36c0ce-1935-4fc7-84ad-b4e22335d7f7}) of ThingClass mecMeter + + + + + + Total returned energy + The name of the ParamType (ThingClass: mecMeter, EventType: totalEnergyProduced, ID: {317ca9f1-92a7-4b7e-bd16-6df6e364ef61}) +---------- +The name of the StateType ({317ca9f1-92a7-4b7e-bd16-6df6e364ef61}) of ThingClass mecMeter + + + + + Total returned energy changed + The name of the EventType ({317ca9f1-92a7-4b7e-bd16-6df6e364ef61}) of ThingClass mecMeter + + + + + mec electronics + The name of the vendor ({09b121c5-29c5-456c-b30a-07c2662c763c}) + + + + + mecElectronics + The name of the plugin mecElectronics ({5853701d-a335-4282-892f-f23670269505}) + + + + + mecMeter + The name of the ThingClass ({a26a874d-aa3f-4531-bf9f-1c03ab70aa62}) + + + + diff --git a/nymea-plugins.pro b/nymea-plugins.pro index a8f3990e..92e777db 100644 --- a/nymea-plugins.pro +++ b/nymea-plugins.pro @@ -33,6 +33,7 @@ PLUGIN_DIRS = \ kodi \ lgsmarttv \ lifx \ + mecelectronics \ mailnotification \ mqttclient \ neatobotvac \