Merge PR #510: New Plugin: myStrom

master
Jenkins nymea 2021-12-15 11:53:17 +01:00
commit 27a2ba1104
12 changed files with 679 additions and 0 deletions

10
debian/control vendored
View File

@ -532,6 +532,15 @@ Description: nymea.io plugin for a generic MQTT client
This package will install a generic MQTT client plugin for nymea.io
Package: nymea-plugin-mystrom
Architecture: any
Depends: ${shlibs:Depends},
${misc:Depends},
nymea-plugins-translations,
Description: nymea.io plugin for myStrom devices
This package will add support for myStrom devices to nymea.
Package: nymea-plugin-neatobotvac
Architecture: any
Depends: ${shlibs:Depends},
@ -1308,6 +1317,7 @@ Depends: nymea-plugin-anel,
nymea-plugin-mailnotification,
nymea-plugin-texasinstruments,
nymea-plugin-telegram,
nymea-plugin-mystrom,
nymea-plugin-nanoleaf,
nymea-plugin-neatobotvac,
nymea-plugin-netatmo,

View File

@ -0,0 +1 @@
usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginmystrom.so

14
mystrom/README.md Normal file
View File

@ -0,0 +1,14 @@
# myStrom
This plugin adds support for the following myStrom devices.
* myStrom WiFi Switch (CH and EU version)
In order to use such a device, it must be connected to the same network as nymea.
To connect the device to the WiFi, connect to the my-XXXXXX WiFi network and open
the configuration web interface at http://192.168.254.1. Alternatively the
"+" button may be pressed for 2 seconds to use WPS setup with a WPS capable WiFi router.
To factory reset the device, hold the "+" button for 10 seconds.

View File

@ -0,0 +1,212 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2021, 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 <https://www.gnu.org/licenses/>.
*
* 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 "integrationpluginmystrom.h"
#include "plugininfo.h"
#include <network/networkaccessmanager.h>
#include <plugintimer.h>
#include <platform/platformzeroconfcontroller.h>
#include <network/zeroconf/zeroconfservicebrowser.h>
#include <QNetworkReply>
#include <QJsonDocument>
#include <QTimer>
#include <QUrlQuery>
// API doc:
// https://api.mystrom.ch/
IntegrationPluginMyStrom::IntegrationPluginMyStrom()
{
}
IntegrationPluginMyStrom::~IntegrationPluginMyStrom()
{
}
void IntegrationPluginMyStrom::init()
{
m_zeroConf = hardwareManager()->zeroConfController()->createServiceBrowser("_hap._tcp");
}
void IntegrationPluginMyStrom::discoverThings(ThingDiscoveryInfo *info)
{
foreach (const ZeroConfServiceEntry &entry, m_zeroConf->serviceEntries()) {
qCDebug(dcMyStrom()) << "Found myStrom device:" << entry;
if (entry.protocol() != QAbstractSocket::IPv4Protocol) {
continue;
}
ThingDescriptor descriptor(switchThingClassId, entry.name(), entry.hostAddress().toString());
descriptor.setParams({Param(switchThingIdParamTypeId, entry.txt("id"))});
info->addThingDescriptor(descriptor);
}
info->finish(Thing::ThingErrorNoError);
}
void IntegrationPluginMyStrom::setupThing(ThingSetupInfo *info)
{
QUrl infoUrl = composeUrl(info->thing(), "/api/v1/info");
if (infoUrl.isEmpty()) {
info->finish(Thing::ThingErrorHardwareNotAvailable, QT_TR_NOOP("Device cannot be found on the network."));
return;
}
QNetworkRequest request(infoUrl);
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
connect(reply, &QNetworkReply::finished, info, [=](){
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcMyStrom()) << "Error fetching device info from myStrom device" << info->thing()->name();
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error fetching device information from myStrom device."));
return;
}
QByteArray data = reply->readAll();
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcMyStrom()) << "Error parsing JSON from myStrom device:" << error.errorString() << data;
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error processing response from myStrom device."));
return;
}
qCDebug(dcMyStrom()) << "Device info:" << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented));
info->finish(Thing::ThingErrorNoError);
info->thing()->setStateValue("connected", true);
pluginStorage()->beginGroup(info->thing()->id().toString());
pluginStorage()->setValue("cachedAddress", infoUrl.host());
pluginStorage()->endGroup();
});
}
void IntegrationPluginMyStrom::postSetupThing(Thing *thing)
{
Q_UNUSED(thing)
if (!m_pluginTimer) {
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(1);
connect(m_pluginTimer, &PluginTimer::timeout, this, [=]{
foreach (Thing *thing, myThings().filterByThingClassId(switchThingClassId)) {
QUrl url = composeUrl(thing, "/report");
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(url));
connect(reply, &QNetworkReply::finished, thing, [reply, thing](){
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcMyStrom()) << "Error fetching report from myStrom device:" << reply->errorString();
thing->setStateValue(switchConnectedStateTypeId, false);
return;
}
QByteArray data = reply->readAll();
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcMyStrom()) << "Error parsing JSON from myStrom device" << thing->name() << data;
return;
}
thing->setStateValue(switchConnectedStateTypeId, true);
qCDebug(dcMyStrom()) << "Switch report:" << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented));
QVariantMap map = jsonDoc.toVariant().toMap();
thing->setStateValue(switchPowerStateTypeId, map.value("relay").toBool());
thing->setStateValue(switchCurrentPowerStateTypeId, map.value("power").toDouble());
double totalEnergyConsumed = thing->stateValue(switchTotalEnergyConsumedStateTypeId).toDouble();
double Ws = map.value("Ws").toDouble();
double kWh = Ws / 1000 / 3600;
totalEnergyConsumed += kWh;
thing->setStateValue(switchTotalEnergyConsumedStateTypeId, totalEnergyConsumed);
});
}
});
}
}
void IntegrationPluginMyStrom::thingRemoved(Thing *thing)
{
Q_UNUSED(thing)
if (myThings().isEmpty() && m_pluginTimer) {
hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer);
m_pluginTimer = nullptr;
}
}
void IntegrationPluginMyStrom::executeAction(ThingActionInfo *info)
{
if (info->thing()->thingClassId() == switchThingClassId) {
if (info->action().actionTypeId() == switchPowerActionTypeId) {
bool power = info->action().paramValue(switchPowerActionPowerParamTypeId).toBool();
QUrl powerUrl = composeUrl(info->thing(), "/relay");
QUrlQuery query;
query.addQueryItem("state", power ? "1" : "0");
powerUrl.setQuery(query);
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(powerUrl));
connect(reply, &QNetworkReply::finished, this, [info, reply, power](){
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcMyStrom()) << "Error switching myStrom switch:" << reply->error() << reply->errorString();
info->finish(Thing::ThingErrorHardwareFailure, QT_TR_NOOP("Error communicating with myStrom device."));
return;
}
qCDebug(dcMyStrom()) << "Power action executed";
info->thing()->setStateValue(switchPowerStateTypeId, power);
info->finish(Thing::ThingErrorNoError);
});
}
}
}
QUrl IntegrationPluginMyStrom::composeUrl(Thing *thing, const QString &path)
{
QHostAddress address;
foreach (const ZeroConfServiceEntry &entry, m_zeroConf->serviceEntries()) {
if (entry.protocol() == QAbstractSocket::IPv4Protocol && entry.txt("id") == thing->paramValue(switchThingIdParamTypeId).toString()) {
address = entry.hostAddress();
break;
}
}
if (address.isNull()) {
pluginStorage()->beginGroup(thing->id().toString());
address = pluginStorage()->value("cachedAddress").toString();
pluginStorage()->endGroup();
}
if (address.isNull()) {
qCWarning(dcMyStrom()) << "Error finding myStrom device in the network";
return QUrl();
}
QUrl url;
url.setScheme("http");
url.setHost(address.toString());
url.setPath(path);
return url;
}

View File

@ -0,0 +1,66 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* Copyright 2013 - 2021, 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 <https://www.gnu.org/licenses/>.
*
* 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 INTEGRATIONPLUGINMYSTROM_H
#define INTEGRATIONPLUGINMYSTROM_H
#include "integrations/integrationplugin.h"
#include <QUrlQuery>
class PluginTimer;
class ZeroConfServiceBrowser;
class IntegrationPluginMyStrom: public IntegrationPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginmystrom.json")
Q_INTERFACES(IntegrationPlugin)
public:
explicit IntegrationPluginMyStrom();
~IntegrationPluginMyStrom();
void init() override;
void discoverThings(ThingDiscoveryInfo *info) override;
void setupThing(ThingSetupInfo *info) override;
void postSetupThing(Thing *thing) override;
void thingRemoved(Thing *thing) override;
void executeAction(ThingActionInfo *info) override;
private:
QUrl composeUrl(Thing *thing, const QString &path);
ZeroConfServiceBrowser *m_zeroConf = nullptr;
PluginTimer *m_pluginTimer = nullptr;
};
#endif // INTEGRATIONPLUGINMYSTROM_H

View File

@ -0,0 +1,82 @@
{
"name": "myStrom",
"displayName": "myStrom",
"id": "fc7f1a24-42a8-45ce-9ffb-136292eb0164",
"vendors": [
{
"name": "myStrom",
"displayName": "myStrom",
"id": "884b2875-759a-4373-aca4-6a8cb7220f85",
"thingClasses": [
{
"id": "27dc49c0-58cd-4d5f-a95b-0c437dd828cf",
"name": "switch",
"displayName": "myStrom WiFi Switch",
"createMethods": ["discovery"],
"interfaces": [ "powersocket", "smartmeterconsumer", "wirelessconnectable" ],
"paramTypes": [
{
"id": "44144c44-a447-4cee-b77a-18454a779a9c",
"name": "id",
"displayName": "ID",
"type": "QString",
"defaultValue": ""
}
],
"stateTypes": [
{
"id": "8864755d-4e6a-4e45-b2db-3eb5d4f3d53d",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "71723ea3-d2a1-48c4-9a2c-532d938e5022",
"name": "signalStrength",
"displayName": "Signal strength",
"displayNameEvent": "Signal strength changed",
"type": "uint",
"unit": "Percentage",
"minValue": 0,
"maxValue": 100,
"defaultValue": 100
},
{
"id": "717f2593-1544-483b-aac8-f9800b299e4d",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Turned on or off",
"displayNameAction": "Turn on or off",
"type": "bool",
"defaultValue": false,
"writable": true,
"ioType": "digitalOutput"
},
{
"id": "a3533121-69ee-44fd-8394-13373e8f960e",
"name": "totalEnergyConsumed",
"displayName": "Total energy consumed",
"displayNameEvent": "Total energy consumed changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": 0
},
{
"id": "ccb52b57-5800-4f03-b7fa-f36dcebe1d4e",
"name": "currentPower",
"displayName": "Current power consumption",
"displayNameEvent": "Current power consumption changed",
"type": "double",
"unit": "Watt",
"defaultValue": 0,
"filter": "adaptive"
}
]
}
]
}
]
}

14
mystrom/meta.json Normal file
View File

@ -0,0 +1,14 @@
{
"title": "myStrom",
"tagline": "myStrom",
"icon": "mystrom.png",
"stability": "consumer",
"offline": true,
"technologies": [
"network"
],
"categories": [
"sensor",
"socket"
]
}

BIN
mystrom/myStrom.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 2.4 KiB

9
mystrom/mystrom.pro Normal file
View File

@ -0,0 +1,9 @@
include(../plugins.pri)
QT += network
SOURCES += \
integrationpluginmystrom.cpp \
HEADERS += \
integrationpluginmystrom.h \

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
<name>IntegrationPluginMyStrom</name>
<message>
<location filename="../integrationpluginmystrom.cpp" line="78"/>
<source>Device cannot be found on the network.</source>
<translation>Das Gerät konnte nicht im Netzwerk gefunden werden.</translation>
</message>
<message>
<location filename="../integrationpluginmystrom.cpp" line="87"/>
<source>Error fetching device information from myStrom device.</source>
<translation>Fehler beim Empfangen der Geräteinformationen.</translation>
</message>
<message>
<location filename="../integrationpluginmystrom.cpp" line="95"/>
<source>Error processing response from myStrom device.</source>
<translation>Fehler beim Bearbeiten der Antwort des myStrom Gerätes.</translation>
</message>
<message>
<location filename="../integrationpluginmystrom.cpp" line="170"/>
<source>Error communicating with myStrom device.</source>
<translation>Fehler in der Kommunikation zum myStrom Gerät.</translation>
</message>
</context>
<context>
<name>myStrom</name>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="46"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="49"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: connected, ID: {8864755d-4e6a-4e45-b2db-3eb5d4f3d53d})
----------
The name of the StateType ({8864755d-4e6a-4e45-b2db-3eb5d4f3d53d}) of ThingClass switch</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="52"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({8864755d-4e6a-4e45-b2db-3eb5d4f3d53d}) of ThingClass switch</extracomment>
<translation>Verbindung hergestellt oder getrennt</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="55"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="58"/>
<source>Current power consumption</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: currentPower, ID: {ccb52b57-5800-4f03-b7fa-f36dcebe1d4e})
----------
The name of the StateType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of ThingClass switch</extracomment>
<translation>Aktueller Stromverbrauch</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="61"/>
<source>Current power consumption changed</source>
<extracomment>The name of the EventType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of ThingClass switch</extracomment>
<translation>Aktueller Stromverbrauch geändert</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="64"/>
<source>ID</source>
<extracomment>The name of the ParamType (ThingClass: switch, Type: thing, ID: {44144c44-a447-4cee-b77a-18454a779a9c})</extracomment>
<translation>ID</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="67"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="70"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="73"/>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: switch, ActionType: power, ID: {717f2593-1544-483b-aac8-f9800b299e4d})
----------
The name of the ParamType (ThingClass: switch, EventType: power, ID: {717f2593-1544-483b-aac8-f9800b299e4d})
----------
The name of the StateType ({717f2593-1544-483b-aac8-f9800b299e4d}) of ThingClass switch</extracomment>
<translation>An</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="76"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="79"/>
<source>Signal strength</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: signalStrength, ID: {71723ea3-d2a1-48c4-9a2c-532d938e5022})
----------
The name of the StateType ({71723ea3-d2a1-48c4-9a2c-532d938e5022}) of ThingClass switch</extracomment>
<translation>Signalstärke</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="82"/>
<source>Signal strength changed</source>
<extracomment>The name of the EventType ({71723ea3-d2a1-48c4-9a2c-532d938e5022}) of ThingClass switch</extracomment>
<translation>Signalstärke geändert</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="85"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="88"/>
<source>Total energy consumed</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: totalEnergyConsumed, ID: {a3533121-69ee-44fd-8394-13373e8f960e})
----------
The name of the StateType ({a3533121-69ee-44fd-8394-13373e8f960e}) of ThingClass switch</extracomment>
<translation>Gesamtenergieverbrauch</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="91"/>
<source>Total energy consumed changed</source>
<extracomment>The name of the EventType ({a3533121-69ee-44fd-8394-13373e8f960e}) of ThingClass switch</extracomment>
<translation>Gesamtenergieverbrauch geändert</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="94"/>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({717f2593-1544-483b-aac8-f9800b299e4d}) of ThingClass switch</extracomment>
<translation>Ein- oder ausschalten</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="97"/>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({717f2593-1544-483b-aac8-f9800b299e4d}) of ThingClass switch</extracomment>
<translation>Ein- oder ausgeschaltet</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="100"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="103"/>
<source>myStrom</source>
<extracomment>The name of the vendor ({884b2875-759a-4373-aca4-6a8cb7220f85})
----------
The name of the plugin myStrom ({fc7f1a24-42a8-45ce-9ffb-136292eb0164})</extracomment>
<translation>myStrom</translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="106"/>
<source>myStrom WiFi Switch</source>
<extracomment>The name of the ThingClass ({27dc49c0-58cd-4d5f-a95b-0c437dd828cf})</extracomment>
<translation>myStrom WiFi Switch</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,135 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>IntegrationPluginMyStrom</name>
<message>
<location filename="../integrationpluginmystrom.cpp" line="78"/>
<source>Device cannot be found on the network.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginmystrom.cpp" line="87"/>
<source>Error fetching device information from myStrom device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginmystrom.cpp" line="95"/>
<source>Error processing response from myStrom device.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginmystrom.cpp" line="170"/>
<source>Error communicating with myStrom device.</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>myStrom</name>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="46"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="49"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: connected, ID: {8864755d-4e6a-4e45-b2db-3eb5d4f3d53d})
----------
The name of the StateType ({8864755d-4e6a-4e45-b2db-3eb5d4f3d53d}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="52"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({8864755d-4e6a-4e45-b2db-3eb5d4f3d53d}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="55"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="58"/>
<source>Current power consumption</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: currentPower, ID: {ccb52b57-5800-4f03-b7fa-f36dcebe1d4e})
----------
The name of the StateType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="61"/>
<source>Current power consumption changed</source>
<extracomment>The name of the EventType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="64"/>
<source>ID</source>
<extracomment>The name of the ParamType (ThingClass: switch, Type: thing, ID: {44144c44-a447-4cee-b77a-18454a779a9c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="67"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="70"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="73"/>
<source>Power</source>
<extracomment>The name of the ParamType (ThingClass: switch, ActionType: power, ID: {717f2593-1544-483b-aac8-f9800b299e4d})
----------
The name of the ParamType (ThingClass: switch, EventType: power, ID: {717f2593-1544-483b-aac8-f9800b299e4d})
----------
The name of the StateType ({717f2593-1544-483b-aac8-f9800b299e4d}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="76"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="79"/>
<source>Signal strength</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: signalStrength, ID: {71723ea3-d2a1-48c4-9a2c-532d938e5022})
----------
The name of the StateType ({71723ea3-d2a1-48c4-9a2c-532d938e5022}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="82"/>
<source>Signal strength changed</source>
<extracomment>The name of the EventType ({71723ea3-d2a1-48c4-9a2c-532d938e5022}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="85"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="88"/>
<source>Total energy consumed</source>
<extracomment>The name of the ParamType (ThingClass: switch, EventType: totalEnergyConsumed, ID: {a3533121-69ee-44fd-8394-13373e8f960e})
----------
The name of the StateType ({a3533121-69ee-44fd-8394-13373e8f960e}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="91"/>
<source>Total energy consumed changed</source>
<extracomment>The name of the EventType ({a3533121-69ee-44fd-8394-13373e8f960e}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="94"/>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({717f2593-1544-483b-aac8-f9800b299e4d}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="97"/>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({717f2593-1544-483b-aac8-f9800b299e4d}) of ThingClass switch</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="100"/>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="103"/>
<source>myStrom</source>
<extracomment>The name of the vendor ({884b2875-759a-4373-aca4-6a8cb7220f85})
----------
The name of the plugin myStrom ({fc7f1a24-42a8-45ce-9ffb-136292eb0164})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build/nymea-plugins-Desktop-Debug/mystrom/plugininfo.h" line="106"/>
<source>myStrom WiFi Switch</source>
<extracomment>The name of the ThingClass ({27dc49c0-58cd-4d5f-a95b-0c437dd828cf})</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -36,6 +36,7 @@ PLUGIN_DIRS = \
lifx \
mailnotification \
mqttclient \
mystrom \
neatobotvac \
nanoleaf \
netatmo \