diff --git a/debian/control b/debian/control
index c88e8e0c..f545e939 100644
--- a/debian/control
+++ b/debian/control
@@ -591,6 +591,21 @@ Description: nymea.io plugin for Pushbullet
This package will install the nymea.io plugin for sending messages via Pushbullet.
+Package: nymea-plugin-solarlog
+Architecture: any
+Depends: ${shlibs:Depends},
+ ${misc:Depends},
+ nymea-plugins-translations,
+Description: nymea.io plugin for Solar-Log
+ The nymea daemon is a plugin based IoT (Internet of Things) server. The
+ server works like a translator for devices, things and services and
+ allows them to interact.
+ With the powerful rule engine you are able to connect any device available
+ in the system and create individual scenes and behaviors for your environment.
+ .
+ This package will install the nymea.io plugin for Solar-Log.
+
+
Package: nymea-plugin-tasmota
Architecture: any
Depends: ${shlibs:Depends},
@@ -984,6 +999,7 @@ Depends: nymea-plugin-anel,
nymea-plugin-shelly,
nymea-plugin-senic,
nymea-plugin-sonos,
+ nymea-plugin-solarlog,
nymea-plugin-tado,
nymea-plugin-keba,
nymea-plugin-unifi,
diff --git a/debian/nymea-plugin-solarlog.install.in b/debian/nymea-plugin-solarlog.install.in
new file mode 100644
index 00000000..fec3ab6b
--- /dev/null
+++ b/debian/nymea-plugin-solarlog.install.in
@@ -0,0 +1 @@
+usr/lib/@DEB_HOST_MULTIARCH@/nymea/plugins/libnymea_integrationpluginsolarlog.so
diff --git a/nymea-plugins.pro b/nymea-plugins.pro
index e5605321..c734ab56 100644
--- a/nymea-plugins.pro
+++ b/nymea-plugins.pro
@@ -40,6 +40,7 @@ PLUGIN_DIRS = \
philipshue \
pushbullet \
shelly \
+ solarlog \
systemmonitor \
remotessh \
senic \
diff --git a/solarlog/README.md b/solarlog/README.md
new file mode 100644
index 00000000..092be2aa
--- /dev/null
+++ b/solarlog/README.md
@@ -0,0 +1,24 @@
+# Solar-Log
+
+This plug-in integrates Solar-Log devices into nymea.
+
+## Supported Things
+
+* Solar-Log 200
+* Solar-Log 250
+* Solar-Log 300
+* Solar-Log 500
+* Solar-Log 1000
+* Solar-Log 1200
+* Solar-Log 1900
+* Solar-Log 2000
+
+## Requirements
+
+* The package 'nymea-plugin-solarlog' must be installed.
+* The device and nymea must be in the same network.
+* Device to be updated to the Solar-Log Firmware Version 3.6.0.
+
+## More
+https://www.solar-log.com/en
+
diff --git a/solarlog/integrationpluginsolarlog.cpp b/solarlog/integrationpluginsolarlog.cpp
new file mode 100644
index 00000000..4c4da6f3
--- /dev/null
+++ b/solarlog/integrationpluginsolarlog.cpp
@@ -0,0 +1,145 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*
+* 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 "integrationpluginsolarlog.h"
+#include "plugininfo.h"
+#include "network/networkaccessmanager.h"
+
+#include
+#include
+#include
+
+IntegrationPluginSolarLog::IntegrationPluginSolarLog()
+{
+
+}
+
+void IntegrationPluginSolarLog::setupThing(ThingSetupInfo *info)
+{
+ Thing *thing = info->thing();
+ if (thing->thingClassId() == solarlogThingClassId) {
+ getData(thing);
+ m_asyncSetup.insert(thing, info);
+ connect(info, &ThingSetupInfo::aborted, this, [thing, this] {m_asyncSetup.remove(thing);});
+ } else {
+ Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
+ }
+}
+
+void IntegrationPluginSolarLog::postSetupThing(Thing *thing)
+{
+ Q_UNUSED(thing)
+
+ if (!m_refreshTimer) {
+ m_refreshTimer = hardwareManager()->pluginTimerManager()->registerTimer(2);
+ connect(m_refreshTimer, &PluginTimer::timeout, this, &IntegrationPluginSolarLog::onRefreshTimer);
+ }
+}
+
+void IntegrationPluginSolarLog::thingRemoved(Thing *thing)
+{
+ Q_UNUSED(thing)
+
+ if (myThings().isEmpty()) {
+ hardwareManager()->pluginTimerManager()->unregisterTimer(m_refreshTimer);
+ m_refreshTimer = nullptr;
+ }
+}
+
+void IntegrationPluginSolarLog::onRefreshTimer()
+{
+ foreach (Thing *thing, myThings().filterByThingClassId(solarlogThingClassId)) {
+ getData(thing);
+ }
+}
+
+void IntegrationPluginSolarLog::getData(Thing *thing)
+{
+ QUrl url;
+ url.setHost(thing->paramValue(solarlogThingHostParamTypeId).toString());
+ url.setPath("/getjp");
+ url.setScheme("http");
+ QNetworkRequest request(url);
+ request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json");
+ QNetworkReply *reply = hardwareManager()->networkManager()->post(request, QByteArray("{\"801\":{\"170\":null}}"));
+ connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
+ connect(reply, &QNetworkReply::finished, thing, [this, reply, thing]{
+
+ int status = reply->attribute(QNetworkRequest::HttpStatusCodeAttribute).toInt();
+
+ // Check HTTP status code
+ if (status != 200 || reply->error() != QNetworkReply::NoError) {
+ thing->setStateValue(solarlogConnectedStateTypeId, false);
+ qCWarning(dcSolarlog()) << "Request error:" << status << reply->errorString();
+ if (m_asyncSetup.contains(thing)) {
+ ThingSetupInfo *info = m_asyncSetup.take(thing);
+ info->finish(Thing::ThingErrorHardwareNotAvailable, tr("No Solar-Log device at given IP-Address"));
+ }
+ return;
+ }
+
+ thing->setStateValue(solarlogConnectedStateTypeId, true);
+ QByteArray rawData = reply->readAll();
+ QJsonParseError error;
+ QJsonDocument data = QJsonDocument::fromJson(rawData, &error);
+ if (error.error != QJsonParseError::NoError) {
+ qCWarning(dcSolarlog()) << "Received invalid JSON object, try to upgrade the Solarlog firmware. Min Version is 3.5.";
+ if (m_asyncSetup.contains(thing)) {
+ ThingSetupInfo *info = m_asyncSetup.take(thing);
+ info->finish(Thing::ThingErrorHardwareFailure, tr("Outdated Solar-Log firmware"));
+ }
+ return;
+ }
+
+ if (m_asyncSetup.contains(thing)) {
+ ThingSetupInfo *info = m_asyncSetup.take(thing);
+ info->finish(Thing::ThingErrorNoError);
+ }
+
+ QVariantMap map = data.toVariant().toMap().value("801").toMap().value("170").toMap();
+ thing->setStateValue(solarlogLastupdateStateTypeId, map.value(QString::number(JsonObjectNumbers::LastUpdateTime)));
+ thing->setStateValue(solarlogTotalPowerEventTypeId, (map.value(QString::number(JsonObjectNumbers::Pac)).toDouble()/1000.00));
+ thing->setStateValue(solarlogPdcStateTypeId, (map.value(QString::number(JsonObjectNumbers::Pdc)).toDouble()/1000.00));
+ thing->setStateValue(solarlogUacStateTypeId, map.value(QString::number(JsonObjectNumbers::Uac)));
+ thing->setStateValue(solarlogDcVoltageStateTypeId, map.value(QString::number(JsonObjectNumbers::DCVoltage)));
+ thing->setStateValue(solarlogYieldDayStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldDay)).toDouble()/1000.00));
+ thing->setStateValue(solarlogYieldYesterdayStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldYesterday)).toDouble()/1000.00));
+ thing->setStateValue(solarlogYieldMonthStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldMonth)).toDouble()/1000.00));
+ thing->setStateValue(solarlogYieldYearStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldYear)).toDouble()/1000.00));
+ thing->setStateValue(solarlogTotalEnergyProducedStateTypeId, (map.value(QString::number(JsonObjectNumbers::YieldTotal)).toDouble()/1000.00));
+ thing->setStateValue(solarlogCurrentTotalConsumptionStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsPac)));
+ thing->setStateValue(solarlogConsYieldDayStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldDay)));
+ thing->setStateValue(solarlogConsYieldYesterdayStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldYesterday)));
+ thing->setStateValue(solarlogConsYieldMonthStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldMonth)));
+ thing->setStateValue(solarlogConsYieldYearStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldYear)));
+ thing->setStateValue(solarlogConsYieldTotalStateTypeId, map.value(QString::number(JsonObjectNumbers::ConsYieldTotal)));
+ thing->setStateValue(solarlogTotalPowerStateTypeId, (map.value(QString::number(JsonObjectNumbers::TotalPower)).toDouble()/1000.00));
+ });
+}
diff --git a/solarlog/integrationpluginsolarlog.h b/solarlog/integrationpluginsolarlog.h
new file mode 100644
index 00000000..b81e45ae
--- /dev/null
+++ b/solarlog/integrationpluginsolarlog.h
@@ -0,0 +1,83 @@
+/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+*
+* 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 INTEGRATIONPLUGINSOLARLOG_H
+#define INTEGRATIONPLUGINSOLARLOG_H
+
+#include "integrations/integrationplugin.h"
+#include "plugintimer.h"
+
+#include
+#include
+#include
+
+
+class IntegrationPluginSolarLog: public IntegrationPlugin {
+ Q_OBJECT
+ Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginsolarlog.json")
+ Q_INTERFACES(IntegrationPlugin)
+
+public:
+ enum JsonObjectNumbers{
+ LastUpdateTime = 100,
+ Pac,
+ Pdc,
+ Uac,
+ DCVoltage,
+ YieldDay,
+ YieldYesterday,
+ YieldMonth,
+ YieldYear,
+ YieldTotal,
+ ConsPac,
+ ConsYieldDay,
+ ConsYieldYesterday,
+ ConsYieldMonth,
+ ConsYieldYear,
+ ConsYieldTotal,
+ TotalPower
+ };
+ explicit IntegrationPluginSolarLog();
+
+ void setupThing(ThingSetupInfo *info) override;
+ void postSetupThing(Thing *thing) override;
+ void thingRemoved(Thing *thing) override;
+
+private slots:
+ void onRefreshTimer();
+
+private:
+ PluginTimer *m_refreshTimer = nullptr;
+ QHash m_asyncSetup;
+
+ void getData(Thing *thing);
+};
+
+#endif // INTEGRATIONPLUGINSOLARLOG_H
diff --git a/solarlog/integrationpluginsolarlog.json b/solarlog/integrationpluginsolarlog.json
new file mode 100644
index 00000000..8a8f37e8
--- /dev/null
+++ b/solarlog/integrationpluginsolarlog.json
@@ -0,0 +1,194 @@
+{
+ "id": "606adc5a-c9a5-45fa-9652-ea385dcb0b81",
+ "name": "solarlog",
+ "displayName": "Solar-Log",
+ "vendors": [
+ {
+ "id": "0cf5f437-abf0-4396-92d4-be94d616c667",
+ "name": "solarlog",
+ "displayName": "Solar-Log",
+ "thingClasses": [
+ {
+ "id": "1374b47e-5555-4ec1-b2cd-6474048dd30c",
+ "name": "solarlog",
+ "displayName": "Solar-Log",
+ "createMethods": [ "user", "discovery" ],
+ "interfaces": ["extendedsmartmeterproducer", "connectable" ],
+ "paramTypes": [
+ {
+ "id": "84bd8a41-2411-4bb0-87a9-ab7e01044b10",
+ "name": "host",
+ "displayName": "Address",
+ "type": "QString",
+ "inputType": "TextLine",
+ "defaultValue": "solar-log"
+ }
+ ],
+ "stateTypes": [
+ {
+ "id": "eb9f8575-71e3-42a9-aa4d-ffea9586cc4f",
+ "name": "connected",
+ "displayName": "Reachable",
+ "displayNameEvent": "Reachable changed",
+ "type": "bool",
+ "defaultValue": false,
+ "cached": false
+ },
+ {
+ "id": "b944c513-a7f0-4bc1-941e-aae9849557fe",
+ "name": "lastupdate",
+ "displayName": "Last update",
+ "displayNameEvent": "Last update changed",
+ "type": "QString",
+ "defaultValue": ""
+ },
+ {
+ "id": "0bf515d8-0f48-4eba-9255-f774d68c80fe",
+ "name": "currentPower",
+ "displayName": "Power AC",
+ "displayNameEvent": "Power AC changed",
+ "type": "double",
+ "unit": "KiloWatt",
+ "defaultValue": 0
+ },
+ {
+ "id": "e4183a70-c848-447a-962a-f19dc5974140",
+ "name": "pdc",
+ "displayName": "Power DC",
+ "displayNameEvent": "Power DC changed",
+ "type": "double",
+ "unit": "KiloWatt",
+ "defaultValue": 0
+ },
+ {
+ "id": "7dc46b2e-5fba-4cc6-a159-09472cdfac62",
+ "name": "uac",
+ "displayName": "AC voltage",
+ "displayNameEvent": "AC voltage changed",
+ "type": "double",
+ "unit": "Volt",
+ "defaultValue": 0
+ },
+ {
+ "id": "bb891a05-59d8-4a3b-a0ea-b63af58558f7",
+ "name": "dcVoltage",
+ "displayName": "DC voltage",
+ "displayNameEvent": "DC voltage changed",
+ "type": "double",
+ "unit": "Volt",
+ "defaultValue": 0
+ },
+ {
+ "id": "53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8",
+ "name": "yieldDay",
+ "displayName": "Yield day",
+ "displayNameEvent": "Yield day changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "bd96d0b3-e921-49eb-8b34-0b3be5bb27fa",
+ "name": "yieldYesterday",
+ "displayName": "Yield yesterday",
+ "displayNameEvent": "Yield yesterday changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "9a77662a-2034-4031-8e7a-1e6347089d97",
+ "name": "yieldMonth",
+ "displayName": "Yield month",
+ "displayNameEvent": "Yield month changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "d18169ce-deeb-4f7b-b737-818a91760041",
+ "name": "yieldYear",
+ "displayName": "Yield year",
+ "displayNameEvent": "Yield year changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "3afb6ea1-fef8-4c17-8307-c7547a7a6f3c",
+ "name": "totalEnergyProduced",
+ "displayName": "Yield total",
+ "displayNameEvent": "Yield total changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "5b665247-278a-4b59-9046-add40763e937",
+ "name": "currentTotalConsumption",
+ "displayName": "Current total power consumption",
+ "displayNameEvent": "Current total power consumption changed",
+ "type": "double",
+ "unit": "KiloWatt",
+ "defaultValue": 0
+ },
+ {
+ "id": "40ff1d14-a5d2-4fdb-919c-58dfbcdca123",
+ "name": "consYieldDay",
+ "displayName": "Energy consumption day",
+ "displayNameEvent": "Energy consumption day changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "5d6d5ba5-ebc3-42ce-9d08-802da694b4da",
+ "name": "consYieldYesterday",
+ "displayName": "Energy consumption yesterday",
+ "displayNameEvent": "Energy consumption yesterday changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "a45a557a-a937-4382-8ef5-76f1ff5940e4",
+ "name": "consYieldMonth",
+ "displayName": "Energy consumption month",
+ "displayNameEvent": "Energy consumption month changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "1d42619b-3a50-4bde-b325-67a8014332ef",
+ "name": "consYieldYear",
+ "displayName": "Energy consumption year",
+ "displayNameEvent": "Energy consumption year changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "34f60062-5dec-45ed-9a27-4fbc083cb36e",
+ "name": "consYieldTotal",
+ "displayName": "Energy consumption total",
+ "displayNameEvent": "Energy consumption total changed",
+ "type": "double",
+ "unit": "KiloWattHour",
+ "defaultValue": 0
+ },
+ {
+ "id": "0aa21401-2a3d-4149-803b-f0ba8c66b2f7",
+ "name": "totalPower",
+ "displayName": "Installed generator power",
+ "displayNameEvent": "Installed generator power changed",
+ "type": "double",
+ "unit": "KiloWatt",
+ "defaultValue": 0
+ }
+ ]
+ }
+ ]
+ }
+ ]
+}
diff --git a/solarlog/meta.json b/solarlog/meta.json
new file mode 100644
index 00000000..4646a411
--- /dev/null
+++ b/solarlog/meta.json
@@ -0,0 +1,12 @@
+{
+ "title": "Solar-Log",
+ "tagline": "Integrates Solar-Log with nymea.",
+ "icon": "solarlog.png",
+ "stability": "consumer",
+ "offline": true,
+ "technologies": [
+ "network"
+ ],
+ "categories": [
+ ]
+}
diff --git a/solarlog/solarlog.png b/solarlog/solarlog.png
new file mode 100644
index 00000000..e26006be
Binary files /dev/null and b/solarlog/solarlog.png differ
diff --git a/solarlog/solarlog.pro b/solarlog/solarlog.pro
new file mode 100644
index 00000000..06846de6
--- /dev/null
+++ b/solarlog/solarlog.pro
@@ -0,0 +1,9 @@
+include(../plugins.pri)
+
+QT += network
+
+SOURCES += \
+ integrationpluginsolarlog.cpp \
+
+HEADERS += \
+ integrationpluginsolarlog.h \
diff --git a/solarlog/translations/606adc5a-c9a5-45fa-9652-ea385dcb0b81-de.ts b/solarlog/translations/606adc5a-c9a5-45fa-9652-ea385dcb0b81-de.ts
new file mode 100644
index 00000000..d0f9fb82
--- /dev/null
+++ b/solarlog/translations/606adc5a-c9a5-45fa-9652-ea385dcb0b81-de.ts
@@ -0,0 +1,308 @@
+
+
+
+
+ IntegrationPluginSolarLog
+
+
+ No Solar-Log device at given IP-Address
+ Kein Solar-Log Gerät an angegebener IP Adresse
+
+
+
+ Outdated Solar-Log firmware
+ Veraltete Solar-Log Firware
+
+
+
+ solarlog
+
+
+ Address
+ The name of the ParamType (ThingClass: solarlog, Type: thing, ID: {84bd8a41-2411-4bb0-87a9-ab7e01044b10})
+ Adresse
+
+
+
+
+ Installed generator power
+ The name of the ParamType (ThingClass: solarlog, EventType: totalPower, ID: {0aa21401-2a3d-4149-803b-f0ba8c66b2f7})
+----------
+The name of the StateType ({0aa21401-2a3d-4149-803b-f0ba8c66b2f7}) of ThingClass solarlog
+ Installierte Generatorleistung
+
+
+
+ Installed generator power changed
+ The name of the EventType ({0aa21401-2a3d-4149-803b-f0ba8c66b2f7}) of ThingClass solarlog
+ Installierte Generatorleistung geändert
+
+
+
+
+ Last update
+ The name of the ParamType (ThingClass: solarlog, EventType: lastupdate, ID: {b944c513-a7f0-4bc1-941e-aae9849557fe})
+----------
+The name of the StateType ({b944c513-a7f0-4bc1-941e-aae9849557fe}) of ThingClass solarlog
+ Letztes Update
+
+
+
+ Last update changed
+ The name of the EventType ({b944c513-a7f0-4bc1-941e-aae9849557fe}) of ThingClass solarlog
+ Letztes Update geändert
+
+
+
+
+
+ Solar-Log
+ The name of the ThingClass ({1374b47e-5555-4ec1-b2cd-6474048dd30c})
+----------
+The name of the vendor ({0cf5f437-abf0-4396-92d4-be94d616c667})
+----------
+The name of the plugin solarlog ({606adc5a-c9a5-45fa-9652-ea385dcb0b81})
+ Solar-Log
+
+
+
+
+ AC voltage
+ The name of the ParamType (ThingClass: solarlog, EventType: uac, ID: {7dc46b2e-5fba-4cc6-a159-09472cdfac62})
+----------
+The name of the StateType ({7dc46b2e-5fba-4cc6-a159-09472cdfac62}) of ThingClass solarlog
+ Wechselspannung
+
+
+
+ AC voltage changed
+ The name of the EventType ({7dc46b2e-5fba-4cc6-a159-09472cdfac62}) of ThingClass solarlog
+ Wechselspannung geändert
+
+
+
+
+ Current total power consumption
+ The name of the ParamType (ThingClass: solarlog, EventType: currentTotalConsumption, ID: {5b665247-278a-4b59-9046-add40763e937})
+----------
+The name of the StateType ({5b665247-278a-4b59-9046-add40763e937}) of ThingClass solarlog
+ Derzeitiger Gesamtleistungsverbrauch
+
+
+
+ Current total power consumption changed
+ The name of the EventType ({5b665247-278a-4b59-9046-add40763e937}) of ThingClass solarlog
+ Derzeitiger Gesamtleistungsverbrauch geändert
+
+
+
+
+ DC voltage
+ The name of the ParamType (ThingClass: solarlog, EventType: dcVoltage, ID: {bb891a05-59d8-4a3b-a0ea-b63af58558f7})
+----------
+The name of the StateType ({bb891a05-59d8-4a3b-a0ea-b63af58558f7}) of ThingClass solarlog
+ Gleichspannung
+
+
+
+ DC voltage changed
+ The name of the EventType ({bb891a05-59d8-4a3b-a0ea-b63af58558f7}) of ThingClass solarlog
+ Gleichspannung geändert
+
+
+
+
+ Energy consumption day
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldDay, ID: {40ff1d14-a5d2-4fdb-919c-58dfbcdca123})
+----------
+The name of the StateType ({40ff1d14-a5d2-4fdb-919c-58dfbcdca123}) of ThingClass solarlog
+ Tagesenergieverbrauch
+
+
+
+ Energy consumption day changed
+ The name of the EventType ({40ff1d14-a5d2-4fdb-919c-58dfbcdca123}) of ThingClass solarlog
+ Tagesenergieverbrauch geändert
+
+
+
+
+ Energy consumption month
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldMonth, ID: {a45a557a-a937-4382-8ef5-76f1ff5940e4})
+----------
+The name of the StateType ({a45a557a-a937-4382-8ef5-76f1ff5940e4}) of ThingClass solarlog
+ Monatsenergieverbrauch
+
+
+
+ Energy consumption month changed
+ The name of the EventType ({a45a557a-a937-4382-8ef5-76f1ff5940e4}) of ThingClass solarlog
+ Monatsenergieverbrauch geändert
+
+
+
+
+ Energy consumption total
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldTotal, ID: {34f60062-5dec-45ed-9a27-4fbc083cb36e})
+----------
+The name of the StateType ({34f60062-5dec-45ed-9a27-4fbc083cb36e}) of ThingClass solarlog
+ Totalenergieverbrauch
+
+
+
+ Energy consumption total changed
+ The name of the EventType ({34f60062-5dec-45ed-9a27-4fbc083cb36e}) of ThingClass solarlog
+ Totalenergieverbrauch geändert
+
+
+
+
+ Energy consumption year
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldYear, ID: {1d42619b-3a50-4bde-b325-67a8014332ef})
+----------
+The name of the StateType ({1d42619b-3a50-4bde-b325-67a8014332ef}) of ThingClass solarlog
+ Jahresenergieverbrauch
+
+
+
+ Energy consumption year changed
+ The name of the EventType ({1d42619b-3a50-4bde-b325-67a8014332ef}) of ThingClass solarlog
+ Jahresenergieverbrauch geändert
+
+
+
+
+ Energy consumption yesterday
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldYesterday, ID: {5d6d5ba5-ebc3-42ce-9d08-802da694b4da})
+----------
+The name of the StateType ({5d6d5ba5-ebc3-42ce-9d08-802da694b4da}) of ThingClass solarlog
+ Gestriger Tagesenergieverbrauch
+
+
+
+ Energy consumption yesterday changed
+ The name of the EventType ({5d6d5ba5-ebc3-42ce-9d08-802da694b4da}) of ThingClass solarlog
+ Gestriger Tagesenergieverbrauch geändert
+
+
+
+
+ Power AC
+ The name of the ParamType (ThingClass: solarlog, EventType: currentPower, ID: {0bf515d8-0f48-4eba-9255-f774d68c80fe})
+----------
+The name of the StateType ({0bf515d8-0f48-4eba-9255-f774d68c80fe}) of ThingClass solarlog
+ Leistung AC
+
+
+
+ Power AC changed
+ The name of the EventType ({0bf515d8-0f48-4eba-9255-f774d68c80fe}) of ThingClass solarlog
+ Leistung AC geändert
+
+
+
+
+ Power DC
+ The name of the ParamType (ThingClass: solarlog, EventType: pdc, ID: {e4183a70-c848-447a-962a-f19dc5974140})
+----------
+The name of the StateType ({e4183a70-c848-447a-962a-f19dc5974140}) of ThingClass solarlog
+ Leistung DC
+
+
+
+ Power DC changed
+ The name of the EventType ({e4183a70-c848-447a-962a-f19dc5974140}) of ThingClass solarlog
+ Leistung DC geändert
+
+
+
+
+ Reachable
+ The name of the ParamType (ThingClass: solarlog, EventType: connected, ID: {eb9f8575-71e3-42a9-aa4d-ffea9586cc4f})
+----------
+The name of the StateType ({eb9f8575-71e3-42a9-aa4d-ffea9586cc4f}) of ThingClass solarlog
+ Erreichbar
+
+
+
+ Reachable changed
+ The name of the EventType ({eb9f8575-71e3-42a9-aa4d-ffea9586cc4f}) of ThingClass solarlog
+ Erreichbar geändert
+
+
+
+
+ Yield day
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldDay, ID: {53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8})
+----------
+The name of the StateType ({53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8}) of ThingClass solarlog
+ Tagesertrag
+
+
+
+ Yield day changed
+ The name of the EventType ({53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8}) of ThingClass solarlog
+ Tagesertrag geändert
+
+
+
+
+ Yield month
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldMonth, ID: {9a77662a-2034-4031-8e7a-1e6347089d97})
+----------
+The name of the StateType ({9a77662a-2034-4031-8e7a-1e6347089d97}) of ThingClass solarlog
+ Monatsertrag
+
+
+
+ Yield month changed
+ The name of the EventType ({9a77662a-2034-4031-8e7a-1e6347089d97}) of ThingClass solarlog
+ Monatsertrag geändert
+
+
+
+
+ Yield total
+ The name of the ParamType (ThingClass: solarlog, EventType: totalEnergyProduced, ID: {3afb6ea1-fef8-4c17-8307-c7547a7a6f3c})
+----------
+The name of the StateType ({3afb6ea1-fef8-4c17-8307-c7547a7a6f3c}) of ThingClass solarlog
+ Totalertrag
+
+
+
+ Yield total changed
+ The name of the EventType ({3afb6ea1-fef8-4c17-8307-c7547a7a6f3c}) of ThingClass solarlog
+ Totalertrag geändert
+
+
+
+
+ Yield year
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldYear, ID: {d18169ce-deeb-4f7b-b737-818a91760041})
+----------
+The name of the StateType ({d18169ce-deeb-4f7b-b737-818a91760041}) of ThingClass solarlog
+ Jahresertrag
+
+
+
+ Yield year changed
+ The name of the EventType ({d18169ce-deeb-4f7b-b737-818a91760041}) of ThingClass solarlog
+ Jahresertrag geändert
+
+
+
+
+ Yield yesterday
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldYesterday, ID: {bd96d0b3-e921-49eb-8b34-0b3be5bb27fa})
+----------
+The name of the StateType ({bd96d0b3-e921-49eb-8b34-0b3be5bb27fa}) of ThingClass solarlog
+ Gestriger Tagesertrag
+
+
+
+ Yield yesterday changed
+ The name of the EventType ({bd96d0b3-e921-49eb-8b34-0b3be5bb27fa}) of ThingClass solarlog
+ Gestriger Tagesertrag geändert
+
+
+
diff --git a/solarlog/translations/606adc5a-c9a5-45fa-9652-ea385dcb0b81-en_US.ts b/solarlog/translations/606adc5a-c9a5-45fa-9652-ea385dcb0b81-en_US.ts
new file mode 100644
index 00000000..ab13650e
--- /dev/null
+++ b/solarlog/translations/606adc5a-c9a5-45fa-9652-ea385dcb0b81-en_US.ts
@@ -0,0 +1,308 @@
+
+
+
+
+ IntegrationPluginSolarLog
+
+
+ No Solar-Log device at given IP-Address
+
+
+
+
+ Outdated Solar-Log firmware
+
+
+
+
+ solarlog
+
+
+ Address
+ The name of the ParamType (ThingClass: solarlog, Type: thing, ID: {84bd8a41-2411-4bb0-87a9-ab7e01044b10})
+
+
+
+
+
+ Installed generator power
+ The name of the ParamType (ThingClass: solarlog, EventType: totalPower, ID: {0aa21401-2a3d-4149-803b-f0ba8c66b2f7})
+----------
+The name of the StateType ({0aa21401-2a3d-4149-803b-f0ba8c66b2f7}) of ThingClass solarlog
+
+
+
+
+ Installed generator power changed
+ The name of the EventType ({0aa21401-2a3d-4149-803b-f0ba8c66b2f7}) of ThingClass solarlog
+
+
+
+
+
+ Last update
+ The name of the ParamType (ThingClass: solarlog, EventType: lastupdate, ID: {b944c513-a7f0-4bc1-941e-aae9849557fe})
+----------
+The name of the StateType ({b944c513-a7f0-4bc1-941e-aae9849557fe}) of ThingClass solarlog
+
+
+
+
+ Last update changed
+ The name of the EventType ({b944c513-a7f0-4bc1-941e-aae9849557fe}) of ThingClass solarlog
+
+
+
+
+
+
+ Solar-Log
+ The name of the ThingClass ({1374b47e-5555-4ec1-b2cd-6474048dd30c})
+----------
+The name of the vendor ({0cf5f437-abf0-4396-92d4-be94d616c667})
+----------
+The name of the plugin solarlog ({606adc5a-c9a5-45fa-9652-ea385dcb0b81})
+
+
+
+
+
+ AC voltage
+ The name of the ParamType (ThingClass: solarlog, EventType: uac, ID: {7dc46b2e-5fba-4cc6-a159-09472cdfac62})
+----------
+The name of the StateType ({7dc46b2e-5fba-4cc6-a159-09472cdfac62}) of ThingClass solarlog
+
+
+
+
+ AC voltage changed
+ The name of the EventType ({7dc46b2e-5fba-4cc6-a159-09472cdfac62}) of ThingClass solarlog
+
+
+
+
+
+ Current total power consumption
+ The name of the ParamType (ThingClass: solarlog, EventType: currentTotalConsumption, ID: {5b665247-278a-4b59-9046-add40763e937})
+----------
+The name of the StateType ({5b665247-278a-4b59-9046-add40763e937}) of ThingClass solarlog
+
+
+
+
+ Current total power consumption changed
+ The name of the EventType ({5b665247-278a-4b59-9046-add40763e937}) of ThingClass solarlog
+
+
+
+
+
+ DC voltage
+ The name of the ParamType (ThingClass: solarlog, EventType: dcVoltage, ID: {bb891a05-59d8-4a3b-a0ea-b63af58558f7})
+----------
+The name of the StateType ({bb891a05-59d8-4a3b-a0ea-b63af58558f7}) of ThingClass solarlog
+
+
+
+
+ DC voltage changed
+ The name of the EventType ({bb891a05-59d8-4a3b-a0ea-b63af58558f7}) of ThingClass solarlog
+
+
+
+
+
+ Energy consumption day
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldDay, ID: {40ff1d14-a5d2-4fdb-919c-58dfbcdca123})
+----------
+The name of the StateType ({40ff1d14-a5d2-4fdb-919c-58dfbcdca123}) of ThingClass solarlog
+
+
+
+
+ Energy consumption day changed
+ The name of the EventType ({40ff1d14-a5d2-4fdb-919c-58dfbcdca123}) of ThingClass solarlog
+
+
+
+
+
+ Energy consumption month
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldMonth, ID: {a45a557a-a937-4382-8ef5-76f1ff5940e4})
+----------
+The name of the StateType ({a45a557a-a937-4382-8ef5-76f1ff5940e4}) of ThingClass solarlog
+
+
+
+
+ Energy consumption month changed
+ The name of the EventType ({a45a557a-a937-4382-8ef5-76f1ff5940e4}) of ThingClass solarlog
+
+
+
+
+
+ Energy consumption total
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldTotal, ID: {34f60062-5dec-45ed-9a27-4fbc083cb36e})
+----------
+The name of the StateType ({34f60062-5dec-45ed-9a27-4fbc083cb36e}) of ThingClass solarlog
+
+
+
+
+ Energy consumption total changed
+ The name of the EventType ({34f60062-5dec-45ed-9a27-4fbc083cb36e}) of ThingClass solarlog
+
+
+
+
+
+ Energy consumption year
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldYear, ID: {1d42619b-3a50-4bde-b325-67a8014332ef})
+----------
+The name of the StateType ({1d42619b-3a50-4bde-b325-67a8014332ef}) of ThingClass solarlog
+
+
+
+
+ Energy consumption year changed
+ The name of the EventType ({1d42619b-3a50-4bde-b325-67a8014332ef}) of ThingClass solarlog
+
+
+
+
+
+ Energy consumption yesterday
+ The name of the ParamType (ThingClass: solarlog, EventType: consYieldYesterday, ID: {5d6d5ba5-ebc3-42ce-9d08-802da694b4da})
+----------
+The name of the StateType ({5d6d5ba5-ebc3-42ce-9d08-802da694b4da}) of ThingClass solarlog
+
+
+
+
+ Energy consumption yesterday changed
+ The name of the EventType ({5d6d5ba5-ebc3-42ce-9d08-802da694b4da}) of ThingClass solarlog
+
+
+
+
+
+ Power AC
+ The name of the ParamType (ThingClass: solarlog, EventType: currentPower, ID: {0bf515d8-0f48-4eba-9255-f774d68c80fe})
+----------
+The name of the StateType ({0bf515d8-0f48-4eba-9255-f774d68c80fe}) of ThingClass solarlog
+
+
+
+
+ Power AC changed
+ The name of the EventType ({0bf515d8-0f48-4eba-9255-f774d68c80fe}) of ThingClass solarlog
+
+
+
+
+
+ Power DC
+ The name of the ParamType (ThingClass: solarlog, EventType: pdc, ID: {e4183a70-c848-447a-962a-f19dc5974140})
+----------
+The name of the StateType ({e4183a70-c848-447a-962a-f19dc5974140}) of ThingClass solarlog
+
+
+
+
+ Power DC changed
+ The name of the EventType ({e4183a70-c848-447a-962a-f19dc5974140}) of ThingClass solarlog
+
+
+
+
+
+ Reachable
+ The name of the ParamType (ThingClass: solarlog, EventType: connected, ID: {eb9f8575-71e3-42a9-aa4d-ffea9586cc4f})
+----------
+The name of the StateType ({eb9f8575-71e3-42a9-aa4d-ffea9586cc4f}) of ThingClass solarlog
+
+
+
+
+ Reachable changed
+ The name of the EventType ({eb9f8575-71e3-42a9-aa4d-ffea9586cc4f}) of ThingClass solarlog
+
+
+
+
+
+ Yield day
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldDay, ID: {53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8})
+----------
+The name of the StateType ({53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8}) of ThingClass solarlog
+
+
+
+
+ Yield day changed
+ The name of the EventType ({53ed041a-e3c3-4ae5-9a79-1cd7ad82e9a8}) of ThingClass solarlog
+
+
+
+
+
+ Yield month
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldMonth, ID: {9a77662a-2034-4031-8e7a-1e6347089d97})
+----------
+The name of the StateType ({9a77662a-2034-4031-8e7a-1e6347089d97}) of ThingClass solarlog
+
+
+
+
+ Yield month changed
+ The name of the EventType ({9a77662a-2034-4031-8e7a-1e6347089d97}) of ThingClass solarlog
+
+
+
+
+
+ Yield total
+ The name of the ParamType (ThingClass: solarlog, EventType: totalEnergyProduced, ID: {3afb6ea1-fef8-4c17-8307-c7547a7a6f3c})
+----------
+The name of the StateType ({3afb6ea1-fef8-4c17-8307-c7547a7a6f3c}) of ThingClass solarlog
+
+
+
+
+ Yield total changed
+ The name of the EventType ({3afb6ea1-fef8-4c17-8307-c7547a7a6f3c}) of ThingClass solarlog
+
+
+
+
+
+ Yield year
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldYear, ID: {d18169ce-deeb-4f7b-b737-818a91760041})
+----------
+The name of the StateType ({d18169ce-deeb-4f7b-b737-818a91760041}) of ThingClass solarlog
+
+
+
+
+ Yield year changed
+ The name of the EventType ({d18169ce-deeb-4f7b-b737-818a91760041}) of ThingClass solarlog
+
+
+
+
+
+ Yield yesterday
+ The name of the ParamType (ThingClass: solarlog, EventType: yieldYesterday, ID: {bd96d0b3-e921-49eb-8b34-0b3be5bb27fa})
+----------
+The name of the StateType ({bd96d0b3-e921-49eb-8b34-0b3be5bb27fa}) of ThingClass solarlog
+
+
+
+
+ Yield yesterday changed
+ The name of the EventType ({bd96d0b3-e921-49eb-8b34-0b3be5bb27fa}) of ThingClass solarlog
+
+
+
+