Merge PR #233: TP-Link: Add support for HS100, HS103, HS105, HS200 and KP100

master
Jenkins nymea 2020-02-25 00:09:39 +01:00
commit 5056f04dc4
7 changed files with 362 additions and 102 deletions

5
debian/changelog vendored
View File

@ -1,3 +1,8 @@
nymea-plugins (0.19.0) UNRELEASED; urgency=medium
-- Michael Zanetti <michael.zanetti@guh.io> Mon, 24 Feb 2020 01:46:44 +0100
nymea-plugins (0.18.1) xenial; urgency=medium
[ Michael Zanetti ]

View File

@ -1,7 +1,13 @@
# tp-link Kasa
This plugin adds support for tp-link Kasa smart plugs to nymea. Supported features are controlling power
and reading energy consumption.
This plugin adds support for the following tp-link Kasa devices to nymea.
* HS100 Kasa Smart Wi-Fi Plug
* HS103 Kasa Smart Wi-Fi Plug Lite
* HS105 Kasa Smart Wi-Fi Plug Mini
* HS110 Kasa Smart Wi-Fi Plug With Energy Monitoring
* HS200 Kasa Smart Wi-Fi Light Switch
* KP100 Kasa Smart Wi-Fi Plug Slim Edition
In order to use such a device, it must be connected to the same network as nymea. The Kasa app is required
for a one time setup of the device to connect it to the Wi-Fi.

View File

@ -43,6 +43,25 @@
DevicePluginTPLink::DevicePluginTPLink()
{
m_idParamTypesMap[kasaPlug100DeviceClassId] = kasaPlug100DeviceIdParamTypeId;
m_idParamTypesMap[kasaPlug110DeviceClassId] = kasaPlug110DeviceIdParamTypeId;
m_idParamTypesMap[kasaSwitch200DeviceClassId] = kasaSwitch200DeviceIdParamTypeId;
m_connectedStateTypesMap[kasaPlug100DeviceClassId] = kasaPlug100ConnectedStateTypeId;
m_connectedStateTypesMap[kasaPlug110DeviceClassId] = kasaPlug110ConnectedStateTypeId;
m_connectedStateTypesMap[kasaSwitch200DeviceClassId] = kasaSwitch200ConnectedStateTypeId;
m_powerStatetTypesMap[kasaPlug100DeviceClassId] = kasaPlug100PowerStateTypeId;
m_powerStatetTypesMap[kasaPlug110DeviceClassId] = kasaPlug110PowerStateTypeId;
m_powerStatetTypesMap[kasaSwitch200DeviceClassId] = kasaSwitch200PowerStateTypeId;
m_currentPowerStatetTypesMap[kasaPlug110DeviceClassId] = kasaPlug110CurrentPowerStateTypeId;
m_totalEnergyConsumedStatetTypesMap[kasaPlug110DeviceClassId] = kasaPlug110TotalEnergyConsumedStateTypeId;
m_powerActionParamTypesMap[kasaPlug100DeviceClassId] = kasaPlug100PowerActionPowerParamTypeId;
m_powerActionParamTypesMap[kasaPlug110DeviceClassId] = kasaPlug110PowerActionPowerParamTypeId;
m_powerActionParamTypesMap[kasaSwitch200DeviceClassId] = kasaSwitch200PowerActionPowerParamTypeId;
}
DevicePluginTPLink::~DevicePluginTPLink()
@ -84,19 +103,30 @@ void DevicePluginTPLink::discoverDevices(DeviceDiscoveryInfo *info)
}
QVariantMap properties = jsonDoc.toVariant().toMap();
QVariantMap sysInfo = properties.value("system").toMap().value("get_sysinfo").toMap();
if (sysInfo.value("type").toString() == "IOT.SMARTPLUGSWITCH") {
DeviceDescriptor descriptor(kasaPlugDeviceClassId, sysInfo.value("alias").toString(), sysInfo.value("dev_name").toString());
Param idParam = Param(kasaPlugDeviceIdParamTypeId, sysInfo.value("deviceId").toString());
qCWarning(dcTplink()) << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented));
QRegExp modelFilter;
if (info->deviceClassId() == kasaPlug100DeviceClassId) {
modelFilter = QRegExp("(HS100|HS103|HS105|KP100).*");
} else if (info->deviceClassId() == kasaPlug110DeviceClassId) {
modelFilter = QRegExp("HS110.*");
} else if (info->deviceClassId() == kasaSwitch200DeviceClassId) {
modelFilter = QRegExp("HS200.*");
}
QString model = sysInfo.value("model").toString();
if (modelFilter.exactMatch(model)) {
DeviceDescriptor descriptor(info->deviceClassId(), sysInfo.value("alias").toString(), sysInfo.value("dev_name").toString());
Param idParam = Param(m_idParamTypesMap.value(info->deviceClassId()), sysInfo.value("deviceId").toString());
descriptor.setParams(ParamList() << idParam);
Device *existingDevice = myDevices().findByParams(ParamList() << idParam);
if (existingDevice) {
descriptor.setDeviceId(existingDevice->id());
}
info->addDeviceDescriptor(descriptor);
} else {
qCWarning(dcTplink()) << "Unhandled device type:" << sysInfo.value("type").toString();
qCWarning(dcTplink()) << "Ignoring not matching device type:\n" << qUtf8Printable(jsonDoc.toJson(QJsonDocument::Indented));
}
}
@ -137,7 +167,7 @@ void DevicePluginTPLink::setupDevice(DeviceSetupInfo *info)
}
QVariantMap properties = jsonDoc.toVariant().toMap();
QVariantMap sysInfo = properties.value("system").toMap().value("get_sysinfo").toMap();
if (info->device()->paramValue(kasaPlugDeviceIdParamTypeId).toString() == sysInfo.value("deviceId").toString()) {
if (info->device()->paramValue(m_idParamTypesMap.value(info->device()->deviceClassId())).toString() == sysInfo.value("deviceId").toString()) {
qCDebug(dcTplink()) << "Found device at" << senderAddress;
connectToDevice(info->device(), senderAddress);
@ -213,11 +243,12 @@ void DevicePluginTPLink::executeAction(DeviceActionInfo *info)
QVariantMap map;
QVariantMap systemMap;
QVariantMap powerMap;
powerMap.insert("state", info->action().param(kasaPlugPowerActionPowerParamTypeId).value().toBool() ? 1 : 0);
ParamTypeId powerActionParamTypeId = m_powerActionParamTypesMap.value(info->device()->deviceClassId());
powerMap.insert("state", info->action().param(powerActionParamTypeId).value().toBool() ? 1 : 0);
systemMap.insert("set_relay_state", powerMap);
map.insert("system", systemMap);
// qCDebug(dcTplink()) << "Executing action" << qUtf8Printable(QJsonDocument::fromVariant(map).toJson(QJsonDocument::Compact));
qCDebug(dcTplink()) << "Executing action" << qUtf8Printable(QJsonDocument::fromVariant(map).toJson(QJsonDocument::Compact));
QByteArray payload = encryptPayload(QJsonDocument::fromVariant(map).toJson(QJsonDocument::Compact));
QByteArray data;
@ -277,7 +308,8 @@ void DevicePluginTPLink::connectToDevice(Device *device, const QHostAddress &add
connect(socket, &QTcpSocket::connected, device, [this, device, address] () {
qCDebug(dcTplink()) << "Connected to device" << address;
device->setStateValue(kasaPlugConnectedStateTypeId, true);
StateTypeId connectedStateTypeId = m_connectedStateTypesMap.value(device->deviceClassId());
device->setStateValue(connectedStateTypeId, true);
fetchState(device);
});
@ -317,7 +349,7 @@ void DevicePluginTPLink::connectToDevice(Device *device, const QHostAddress &add
socket->disconnectFromHost();
return;
}
// qCDebug(dcTplink()) << "Socket data received" << qUtf8Printable(jsonDoc.toJson());
qCDebug(dcTplink()) << "Socket data received" << qUtf8Printable(jsonDoc.toJson());
QVariantMap map = jsonDoc.toVariant().toMap();
if (map.contains("system")) {
@ -333,7 +365,8 @@ void DevicePluginTPLink::connectToDevice(Device *device, const QHostAddress &add
}
if (systemMap.contains("get_sysinfo")) {
int relayState = systemMap.value("get_sysinfo").toMap().value("relay_state").toInt();
device->setStateValue(kasaPlugPowerStateTypeId, relayState == 1 ? true : false);
StateTypeId powerStateTypeId = m_powerStatetTypesMap.value(device->deviceClassId());
device->setStateValue(powerStateTypeId, relayState == 1 ? true : false);
QString alias = systemMap.value("get_sysinfo").toMap().value("alias").toString();
if (device->name() != alias) {
@ -349,12 +382,14 @@ void DevicePluginTPLink::connectToDevice(Device *device, const QHostAddress &add
QVariantMap emeterMap = map.value("emeter").toMap();
if (emeterMap.contains("get_realtime")) {
// This has quite a bit of jitter... Let's smoothen it while within +/- 0.1W to produce less events in the system
double oldValue = device->stateValue(kasaPlugCurrentPowerStateTypeId).toDouble();
StateTypeId currentPowerStateTypeId = m_currentPowerStatetTypesMap.value(device->deviceClassId());
double oldValue = device->stateValue(currentPowerStateTypeId).toDouble();
double newValue = emeterMap.value("get_realtime").toMap().value("power_mw").toDouble() / 1000;
if (qAbs(oldValue - newValue) > 0.1) {
device->setStateValue(kasaPlugCurrentPowerStateTypeId, newValue);
device->setStateValue(currentPowerStateTypeId, newValue);
}
device->setStateValue(kasaPlugTotalEnergyConsumedStateTypeId, emeterMap.value("get_realtime").toMap().value("total_wh").toDouble() / 1000);
StateTypeId totalEnergyConsumedStateTypeId = m_totalEnergyConsumedStatetTypesMap.value(device->deviceClassId());
device->setStateValue(totalEnergyConsumedStateTypeId, emeterMap.value("get_realtime").toMap().value("total_wh").toDouble() / 1000);
}
}
@ -369,7 +404,8 @@ void DevicePluginTPLink::connectToDevice(Device *device, const QHostAddress &add
// Putting active job back to queue
m_jobQueue[device].prepend(m_pendingJobs.take(device));
}
device->setStateValue(kasaPlugConnectedStateTypeId, false);
StateTypeId connectedStateTypeId = m_connectedStateTypesMap.value(device->deviceClassId());
device->setStateValue(connectedStateTypeId, false);
QTimer::singleShot(500, device, [this, device, address]() {connectToDevice(device, address);});
});
@ -391,7 +427,7 @@ void DevicePluginTPLink::fetchState(Device *device, DeviceActionInfo *info)
getRealTime.insert("get_realtime", QVariant());
map.insert("emeter", getRealTime);
QByteArray plaintext = QJsonDocument::fromVariant(map).toJson(QJsonDocument::Compact);
// qCDebug(dcTplink()) << "Fetching device state";
qCDebug(dcTplink()) << "Fetching device state";
QByteArray payload = encryptPayload(plaintext);
QByteArray data;
QDataStream stream(&data, QIODevice::ReadWrite);

View File

@ -85,6 +85,13 @@ private:
QHash<Device*, QByteArray> m_inputBuffers;
PluginTimer *m_timer = nullptr;
QHash<DeviceClassId, ParamTypeId> m_idParamTypesMap;
QHash<DeviceClassId, StateTypeId> m_connectedStateTypesMap;
QHash<DeviceClassId, StateTypeId> m_powerStatetTypesMap;
QHash<DeviceClassId, StateTypeId> m_currentPowerStatetTypesMap;
QHash<DeviceClassId, StateTypeId> m_totalEnergyConsumedStatetTypesMap;
QHash<DeviceClassId, ParamTypeId> m_powerActionParamTypesMap;
};
#endif // DEVICEPLUGINANEL_H

View File

@ -8,10 +8,47 @@
"displayName": "tp-link",
"id": "8603b6cf-52ec-4481-aca2-f29ebd6cd8a8",
"deviceClasses": [
{
"id": "48f981ba-3836-4810-9744-a349088f4545",
"name": "kasaPlug100",
"displayName": "Kasa Smart Wi-Fi Plug (HS100/HS103/HS105/KP100)",
"createMethods": ["discovery"],
"interfaces": [ "powersocket", "connectable" ],
"paramTypes": [
{
"id": "7c7a4d88-6c7e-4981-b4f2-090976c0c9bb",
"name": "id",
"displayName": "ID",
"type": "QString",
"defaultValue": ""
}
],
"stateTypes": [
{
"id": "79bcdd81-2e9d-4312-a4a7-85f808d046ef",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "a8991ea0-89f0-477b-97fb-414dd7d185b3",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Turned on or off",
"displayNameAction": "Turn on or off",
"type": "bool",
"defaultValue": false,
"writable": true
}
]
},
{
"id": "32830124-9efb-4614-8227-ee269b1889b0",
"name": "kasaPlug",
"displayName": "Kasa Smart Wi-Fi Plug",
"name": "kasaPlug110",
"displayName": "Kasa Smart Wi-Fi Plug With Energy Monitoring (HS110)",
"createMethods": ["discovery"],
"interfaces": [ "powersocket", "extendedsmartmeterconsumer", "connectable" ],
"paramTypes": [
@ -62,6 +99,43 @@
"defaultValue": 0
}
]
},
{
"id": "d527e576-d65e-4ae6-ae43-c89b594fb4c1",
"name": "kasaSwitch200",
"displayName": "Kasa Smart Wi-Fi Light Switch (HS200)",
"createMethods": ["discovery"],
"interfaces": [ "light", "connectable" ],
"paramTypes": [
{
"id": "fe989b2f-034e-4615-8a47-4a8aa775ed99",
"name": "id",
"displayName": "ID",
"type": "QString",
"defaultValue": ""
}
],
"stateTypes": [
{
"id": "8792b3d1-f83d-44c3-b649-249a935d1eb4",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false,
"cached": false
},
{
"id": "3b0daf6c-ba04-4ff1-a381-685c869665b1",
"name": "power",
"displayName": "Power",
"displayNameEvent": "Turned on or off",
"displayNameAction": "Turn on or off",
"type": "bool",
"defaultValue": false,
"writable": true
}
]
}
]
}

View File

@ -4,22 +4,22 @@
<context>
<name>DevicePluginTPLink</name>
<message>
<location filename="../deviceplugintplink.cpp" line="60"/>
<location filename="../deviceplugintplink.cpp" line="88"/>
<source>An error happened sending the discovery to the network.</source>
<translation>Beim Durchsuchen des Netzwerks ist ein Fehler aufgetreten.</translation>
</message>
<message>
<location filename="../deviceplugintplink.cpp" line="107"/>
<location filename="../deviceplugintplink.cpp" line="151"/>
<source>An error happened finding the device in the network.</source>
<translation>Beim Suchen des Geräts ist ein Fehler aufgetreten.</translation>
</message>
<message>
<location filename="../deviceplugintplink.cpp" line="144"/>
<location filename="../deviceplugintplink.cpp" line="188"/>
<source>The device could not be found on the network.</source>
<translation>Das Gerät konnte nicht im Netzwerk gefunden werden.</translation>
</message>
<message>
<location filename="../deviceplugintplink.cpp" line="412"/>
<location filename="../deviceplugintplink.cpp" line="471"/>
<source>Error sending command to the network.</source>
<translation>Der Befehl konnte nicht ins Netzwerk gesendet werden.</translation>
</message>
@ -27,89 +27,155 @@
<context>
<name>tplink</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="38"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="41"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="58"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="61"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="64"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="67"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="70"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="73"/>
<source>Connected</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, EventType: connected, ID: {b66825ec-9f1b-48da-af18-f36913291c0e})
<extracomment>The name of the ParamType (DeviceClass: kasaSwitch200, EventType: connected, ID: {8792b3d1-f83d-44c3-b649-249a935d1eb4})
----------
The name of the StateType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({8792b3d1-f83d-44c3-b649-249a935d1eb4}) of DeviceClass kasaSwitch200
----------
The name of the ParamType (DeviceClass: kasaPlug110, EventType: connected, ID: {b66825ec-9f1b-48da-af18-f36913291c0e})
----------
The name of the StateType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug110
----------
The name of the ParamType (DeviceClass: kasaPlug100, EventType: connected, ID: {79bcdd81-2e9d-4312-a4a7-85f808d046ef})
----------
The name of the StateType ({79bcdd81-2e9d-4312-a4a7-85f808d046ef}) of DeviceClass kasaPlug100</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="44"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="76"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="79"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="82"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({8792b3d1-f83d-44c3-b649-249a935d1eb4}) of DeviceClass kasaSwitch200
----------
The name of the EventType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug110
----------
The name of the EventType ({79bcdd81-2e9d-4312-a4a7-85f808d046ef}) of DeviceClass kasaPlug100</extracomment>
<translation>Verbunden/getrennt</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="47"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="50"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="85"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="88"/>
<source>Current power consumption</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, EventType: currentPower, ID: {ccb52b57-5800-4f03-b7fa-f36dcebe1d4e})
<extracomment>The name of the ParamType (DeviceClass: kasaPlug110, EventType: currentPower, ID: {ccb52b57-5800-4f03-b7fa-f36dcebe1d4e})
----------
The name of the StateType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug110</extracomment>
<translation>Aktueller Energieverbrauch</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="53"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="91"/>
<source>Current power consumption changed</source>
<extracomment>The name of the EventType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug110</extracomment>
<translation>Aktueller Energieverbrauch geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="56"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="94"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="97"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="100"/>
<source>ID</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, Type: device, ID: {de3238f7-fe94-440d-b212-61cd4e221b50})</extracomment>
<extracomment>The name of the ParamType (DeviceClass: kasaSwitch200, Type: device, ID: {fe989b2f-034e-4615-8a47-4a8aa775ed99})
----------
The name of the ParamType (DeviceClass: kasaPlug110, Type: device, ID: {de3238f7-fe94-440d-b212-61cd4e221b50})
----------
The name of the ParamType (DeviceClass: kasaPlug100, Type: device, ID: {7c7a4d88-6c7e-4981-b4f2-090976c0c9bb})</extracomment>
<translation>ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="59"/>
<source>Kasa Smart Wi-Fi Plug</source>
<extracomment>The name of the DeviceClass ({32830124-9efb-4614-8227-ee269b1889b0})</extracomment>
<translation>Kasa Smart Wi-Fi Plug</translation>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="103"/>
<source>Kasa Smart Wi-Fi Light Switch (HS200)</source>
<extracomment>The name of the DeviceClass ({d527e576-d65e-4ae6-ae43-c89b594fb4c1})</extracomment>
<translation>Kasa Smart Wi-Fi Lichtschalter (HS200)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="62"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="65"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="68"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="106"/>
<source>Kasa Smart Wi-Fi Plug (HS100/HS103/HS105/KP100)</source>
<extracomment>The name of the DeviceClass ({48f981ba-3836-4810-9744-a349088f4545})</extracomment>
<translation>Kasa Smart WLAN-Steckdose (HS100/HS103/HS105/KP100)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="109"/>
<source>Kasa Smart Wi-Fi Plug With Energy Monitoring (HS110)</source>
<extracomment>The name of the DeviceClass ({32830124-9efb-4614-8227-ee269b1889b0})</extracomment>
<translation>Kasa Smart WLAN-Steckdose mit Verbrauchsanzeige (HS110)</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="112"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="115"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="118"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="121"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="124"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="127"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="130"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="133"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="136"/>
<source>Power</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, ActionType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
<extracomment>The name of the ParamType (DeviceClass: kasaSwitch200, ActionType: power, ID: {3b0daf6c-ba04-4ff1-a381-685c869665b1})
----------
The name of the ParamType (DeviceClass: kasaPlug, EventType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
The name of the ParamType (DeviceClass: kasaSwitch200, EventType: power, ID: {3b0daf6c-ba04-4ff1-a381-685c869665b1})
----------
The name of the StateType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({3b0daf6c-ba04-4ff1-a381-685c869665b1}) of DeviceClass kasaSwitch200
----------
The name of the ParamType (DeviceClass: kasaPlug110, ActionType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
----------
The name of the ParamType (DeviceClass: kasaPlug110, EventType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
----------
The name of the StateType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug110
----------
The name of the ParamType (DeviceClass: kasaPlug100, ActionType: power, ID: {a8991ea0-89f0-477b-97fb-414dd7d185b3})
----------
The name of the ParamType (DeviceClass: kasaPlug100, EventType: power, ID: {a8991ea0-89f0-477b-97fb-414dd7d185b3})
----------
The name of the StateType ({a8991ea0-89f0-477b-97fb-414dd7d185b3}) of DeviceClass kasaPlug100</extracomment>
<translation>Eingeschaltet</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="71"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="74"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="142"/>
<source>Total energy consumed</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, EventType: totalEnergyConsumed, ID: {a3533121-69ee-44fd-8394-13373e8f960e})
<extracomment>The name of the ParamType (DeviceClass: kasaPlug110, EventType: totalEnergyConsumed, ID: {a3533121-69ee-44fd-8394-13373e8f960e})
----------
The name of the StateType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug110</extracomment>
<translation>Gesamter Energieverbrauch</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="77"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="145"/>
<source>Total energy consumed changed</source>
<extracomment>The name of the EventType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug110</extracomment>
<translation>Gesamter Energieverbrauch geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="80"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="148"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="151"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="154"/>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the ActionType ({3b0daf6c-ba04-4ff1-a381-685c869665b1}) of DeviceClass kasaSwitch200
----------
The name of the ActionType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug110
----------
The name of the ActionType ({a8991ea0-89f0-477b-97fb-414dd7d185b3}) of DeviceClass kasaPlug100</extracomment>
<translation>Ein- ausschalten</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="83"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="157"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="160"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="163"/>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({3b0daf6c-ba04-4ff1-a381-685c869665b1}) of DeviceClass kasaSwitch200
----------
The name of the EventType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug110
----------
The name of the EventType ({a8991ea0-89f0-477b-97fb-414dd7d185b3}) of DeviceClass kasaPlug100</extracomment>
<translation>Ein- ausgeschaltet</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="86"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="89"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="166"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="169"/>
<source>tp-link</source>
<extracomment>The name of the vendor ({8603b6cf-52ec-4481-aca2-f29ebd6cd8a8})
----------

View File

@ -4,22 +4,22 @@
<context>
<name>DevicePluginTPLink</name>
<message>
<location filename="../deviceplugintplink.cpp" line="60"/>
<location filename="../deviceplugintplink.cpp" line="88"/>
<source>An error happened sending the discovery to the network.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceplugintplink.cpp" line="107"/>
<location filename="../deviceplugintplink.cpp" line="151"/>
<source>An error happened finding the device in the network.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceplugintplink.cpp" line="144"/>
<location filename="../deviceplugintplink.cpp" line="188"/>
<source>The device could not be found on the network.</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../deviceplugintplink.cpp" line="412"/>
<location filename="../deviceplugintplink.cpp" line="471"/>
<source>Error sending command to the network.</source>
<translation type="unfinished"></translation>
</message>
@ -27,89 +27,155 @@
<context>
<name>tplink</name>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="38"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="41"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="58"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="61"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="64"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="67"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="70"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="73"/>
<source>Connected</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, EventType: connected, ID: {b66825ec-9f1b-48da-af18-f36913291c0e})
<extracomment>The name of the ParamType (DeviceClass: kasaSwitch200, EventType: connected, ID: {8792b3d1-f83d-44c3-b649-249a935d1eb4})
----------
The name of the StateType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({8792b3d1-f83d-44c3-b649-249a935d1eb4}) of DeviceClass kasaSwitch200
----------
The name of the ParamType (DeviceClass: kasaPlug110, EventType: connected, ID: {b66825ec-9f1b-48da-af18-f36913291c0e})
----------
The name of the StateType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug110
----------
The name of the ParamType (DeviceClass: kasaPlug100, EventType: connected, ID: {79bcdd81-2e9d-4312-a4a7-85f808d046ef})
----------
The name of the StateType ({79bcdd81-2e9d-4312-a4a7-85f808d046ef}) of DeviceClass kasaPlug100</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="44"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="76"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="79"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="82"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="47"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="50"/>
<source>Current power consumption</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, EventType: currentPower, ID: {ccb52b57-5800-4f03-b7fa-f36dcebe1d4e})
<extracomment>The name of the EventType ({8792b3d1-f83d-44c3-b649-249a935d1eb4}) of DeviceClass kasaSwitch200
----------
The name of the StateType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug</extracomment>
The name of the EventType ({b66825ec-9f1b-48da-af18-f36913291c0e}) of DeviceClass kasaPlug110
----------
The name of the EventType ({79bcdd81-2e9d-4312-a4a7-85f808d046ef}) of DeviceClass kasaPlug100</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="53"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="85"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="88"/>
<source>Current power consumption</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug110, EventType: currentPower, ID: {ccb52b57-5800-4f03-b7fa-f36dcebe1d4e})
----------
The name of the StateType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug110</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="91"/>
<source>Current power consumption changed</source>
<extracomment>The name of the EventType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({ccb52b57-5800-4f03-b7fa-f36dcebe1d4e}) of DeviceClass kasaPlug110</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="56"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="94"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="97"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="100"/>
<source>ID</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, Type: device, ID: {de3238f7-fe94-440d-b212-61cd4e221b50})</extracomment>
<extracomment>The name of the ParamType (DeviceClass: kasaSwitch200, Type: device, ID: {fe989b2f-034e-4615-8a47-4a8aa775ed99})
----------
The name of the ParamType (DeviceClass: kasaPlug110, Type: device, ID: {de3238f7-fe94-440d-b212-61cd4e221b50})
----------
The name of the ParamType (DeviceClass: kasaPlug100, Type: device, ID: {7c7a4d88-6c7e-4981-b4f2-090976c0c9bb})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="59"/>
<source>Kasa Smart Wi-Fi Plug</source>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="103"/>
<source>Kasa Smart Wi-Fi Light Switch (HS200)</source>
<extracomment>The name of the DeviceClass ({d527e576-d65e-4ae6-ae43-c89b594fb4c1})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="106"/>
<source>Kasa Smart Wi-Fi Plug (HS100/HS103/HS105/KP100)</source>
<extracomment>The name of the DeviceClass ({48f981ba-3836-4810-9744-a349088f4545})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="109"/>
<source>Kasa Smart Wi-Fi Plug With Energy Monitoring (HS110)</source>
<extracomment>The name of the DeviceClass ({32830124-9efb-4614-8227-ee269b1889b0})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="62"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="65"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="68"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="112"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="115"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="118"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="121"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="124"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="127"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="130"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="133"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="136"/>
<source>Power</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, ActionType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
<extracomment>The name of the ParamType (DeviceClass: kasaSwitch200, ActionType: power, ID: {3b0daf6c-ba04-4ff1-a381-685c869665b1})
----------
The name of the ParamType (DeviceClass: kasaPlug, EventType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
The name of the ParamType (DeviceClass: kasaSwitch200, EventType: power, ID: {3b0daf6c-ba04-4ff1-a381-685c869665b1})
----------
The name of the StateType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({3b0daf6c-ba04-4ff1-a381-685c869665b1}) of DeviceClass kasaSwitch200
----------
The name of the ParamType (DeviceClass: kasaPlug110, ActionType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
----------
The name of the ParamType (DeviceClass: kasaPlug110, EventType: power, ID: {f1a5fda4-87a6-46f6-9499-16811a5f4f4d})
----------
The name of the StateType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug110
----------
The name of the ParamType (DeviceClass: kasaPlug100, ActionType: power, ID: {a8991ea0-89f0-477b-97fb-414dd7d185b3})
----------
The name of the ParamType (DeviceClass: kasaPlug100, EventType: power, ID: {a8991ea0-89f0-477b-97fb-414dd7d185b3})
----------
The name of the StateType ({a8991ea0-89f0-477b-97fb-414dd7d185b3}) of DeviceClass kasaPlug100</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="71"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="74"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="139"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="142"/>
<source>Total energy consumed</source>
<extracomment>The name of the ParamType (DeviceClass: kasaPlug, EventType: totalEnergyConsumed, ID: {a3533121-69ee-44fd-8394-13373e8f960e})
<extracomment>The name of the ParamType (DeviceClass: kasaPlug110, EventType: totalEnergyConsumed, ID: {a3533121-69ee-44fd-8394-13373e8f960e})
----------
The name of the StateType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug</extracomment>
The name of the StateType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug110</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="77"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="145"/>
<source>Total energy consumed changed</source>
<extracomment>The name of the EventType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({a3533121-69ee-44fd-8394-13373e8f960e}) of DeviceClass kasaPlug110</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="80"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="148"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="151"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="154"/>
<source>Turn on or off</source>
<extracomment>The name of the ActionType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the ActionType ({3b0daf6c-ba04-4ff1-a381-685c869665b1}) of DeviceClass kasaSwitch200
----------
The name of the ActionType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug110
----------
The name of the ActionType ({a8991ea0-89f0-477b-97fb-414dd7d185b3}) of DeviceClass kasaPlug100</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="83"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="157"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="160"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="163"/>
<source>Turned on or off</source>
<extracomment>The name of the EventType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug</extracomment>
<extracomment>The name of the EventType ({3b0daf6c-ba04-4ff1-a381-685c869665b1}) of DeviceClass kasaSwitch200
----------
The name of the EventType ({f1a5fda4-87a6-46f6-9499-16811a5f4f4d}) of DeviceClass kasaPlug110
----------
The name of the EventType ({a8991ea0-89f0-477b-97fb-414dd7d185b3}) of DeviceClass kasaPlug100</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="86"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="89"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="166"/>
<location filename="../../../build-nymea-plugins-Desktop-Debug/tplink/plugininfo.h" line="169"/>
<source>tp-link</source>
<extracomment>The name of the vendor ({8603b6cf-52ec-4481-aca2-f29ebd6cd8a8})
----------