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 00000000..2f88aab8 Binary files /dev/null and b/mecelectronics/mecelectronics.png differ diff --git a/mecelectronics/mecelectronics.pro b/mecelectronics/mecelectronics.pro new file mode 100644 index 00000000..a9554e76 --- /dev/null +++ b/mecelectronics/mecelectronics.pro @@ -0,0 +1,10 @@ +include(../plugins.pri) + +QT += network + +SOURCES += \ + integrationpluginmecelectronics.cpp \ + +HEADERS += \ + integrationpluginmecelectronics.h \ + diff --git a/mecelectronics/meta.json b/mecelectronics/meta.json new file mode 100644 index 00000000..e50949c4 --- /dev/null +++ b/mecelectronics/meta.json @@ -0,0 +1,13 @@ +{ + "title": "mecElectronics", + "tagline": "mecMeter", + "icon": "mecelectronics.png", + "stability": "community", + "offline": true, + "technologies": [ + "network" + ], + "categories": [ + "energy", + ] +} diff --git a/mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-de.ts b/mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-de.ts new file mode 100644 index 00000000..adfd7688 --- /dev/null +++ b/mecelectronics/translations/5853701d-a335-4282-892f-f23670269505-de.ts @@ -0,0 +1,324 @@ + + + + + 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 \