added fronius plug-in

This commit is contained in:
bernhard.trinnes 2020-07-14 13:29:09 +02:00
parent e26d38e155
commit 6903391d18
22 changed files with 3505 additions and 0 deletions

17
debian/control vendored
View File

@ -293,6 +293,22 @@ Description: nymea.io plugin for Xiaomi Flower care devices
also know as Plant care or MiCare
Package: nymea-plugin-fronius
Architecture: any
Section: libs
Depends: ${shlibs:Depends},
${misc:Depends},
nymea-plugins-translations,
Description: nymea.io plugin for Fronius PV inverters
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 Fronius
Package: nymea-plugin-eq-3
Architecture: any
Depends: ${shlibs:Depends},
@ -978,6 +994,7 @@ Depends: nymea-plugin-anel,
nymea-plugin-doorbird,
nymea-plugin-eq-3,
nymea-plugin-flowercare,
nymea-plugin-fronius,
nymea-plugin-genericthings,
nymea-plugin-kodi,
nymea-plugin-lgsmarttv,

View File

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

18
fronius/README.md Normal file
View File

@ -0,0 +1,18 @@
# Fronius
nymea plug-in for Fronius solar devices.
## Supported Things
* PV-Inverter
* Storage
* Data Logger
* Smart Meter
## Requirements
* The package "nymea-plugin-fronius" must be installed.
## More
https://www.fronius.com/en/photovoltaics

BIN
fronius/fronius.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 24 KiB

20
fronius/fronius.pro Normal file
View File

@ -0,0 +1,20 @@
include(../plugins.pri)
QT += \
^network \
SOURCES += \
integrationpluginfronius.cpp \
froniusthing.cpp \
froniuslogger.cpp \
froniusinverter.cpp \
froniusstorage.cpp \
froniusmeter.cpp \
HEADERS += \
integrationpluginfronius.h \
froniusthing.h \
froniuslogger.h \
froniusinverter.h \
froniusstorage.h \
froniusmeter.h \

135
fronius/froniusinverter.cpp Normal file
View File

@ -0,0 +1,135 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 "froniusinverter.h"
#include <QJsonDocument>
#include "extern-plugininfo.h"
#include <QDateTime>
FroniusInverter::FroniusInverter(Thing *thing, QObject *parent) : FroniusThing(thing, parent)
{
}
QString FroniusInverter::activity() const
{
return m_activity;
}
void FroniusInverter::setActivity(const QString &activity)
{
m_activity = activity;
}
QUrl FroniusInverter::updateUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
QUrlQuery query;
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl() + "GetInverterRealtimeData.cgi");
query.addQueryItem("Scope", "Device");
query.addQueryItem("DeviceId", deviceId());
query.addQueryItem("DataCollection", "CommonInverterData");
requestUrl.setQuery(query);
return requestUrl;
}
void FroniusInverter::updateThingInfo(const QByteArray &data)
{
// Convert the rawdata to a JSON document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "FroniusInverter: Failed to parse JSON data" << data << ":" << error.errorString();
pluginThing()->setStateValue(inverterConnectedStateTypeId,false);
return;
}
// Parse the data and update the states of our device
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
QVariantMap headMap = jsonDoc.toVariant().toMap().value("Head").toMap();
// Set the inverter device state
if (dataMap.contains("PAC")) {
if(dataMap.value("PAC").toMap().values().at(0) == "W")
pluginThing()->setStateValue(inverterCurrentPowerStateTypeId, dataMap.value("PAC").toMap().values().at(1).toInt());
}
if (dataMap.contains("DAY_ENERGY")) {
if (dataMap.value("DAY_ENERGY").toMap().values().at(0) == "Wh")
pluginThing()->setStateValue(inverterEdayStateTypeId, dataMap.value("DAY_ENERGY").toMap().values().at(1).toDouble()/1000);
}
if (dataMap.contains("YEAR_ENERGY")) {
if(dataMap.value("YEAR_ENERGY").toMap().values().at(0) == "Wh")
pluginThing()->setStateValue(inverterEyearStateTypeId, dataMap.value("YEAR_ENERGY").toMap().values().at(1).toInt()/1000);
}
if (dataMap.contains("TOTAL_ENERGY")) {
if(dataMap.value("TOTAL_ENERGY").toMap().values().at(0) == "Wh")
pluginThing()->setStateValue(inverterTotalEnergyProducedStateTypeId, dataMap.value("TOTAL_ENERGY").toMap().values().at(1).toInt()/1000);
}
//update successful
pluginThing()->setStateValue(inverterConnectedStateTypeId,true);
}
QUrl FroniusInverter::activityUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl()+"GetPowerFlowRealtimeData.fcgi");
return requestUrl;
}
void FroniusInverter::updateActivityInfo(const QByteArray &data)
{
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if(error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "FroniusInverter: Failed to parse JSON data" << data << ":" << error.errorString();
return;
}
// create StorageInfo list map
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
if (dataMap.value("Site").toMap().value("P_PV").toFloat() > 0) {
pluginThing()->setStateValue(inverterActiveStateTypeId, "production");
} else {
pluginThing()->setStateValue(inverterActiveStateTypeId, "inactive");
}
}

56
fronius/froniusinverter.h Normal file
View File

@ -0,0 +1,56 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 FRONIUSINVERTER_H
#define FRONIUSINVERTER_H
#include <QObject>
#include "froniusthing.h"
class FroniusInverter : public FroniusThing
{
Q_OBJECT
public:
explicit FroniusInverter(Thing *thing, QObject *parent = 0);
QString activity() const;
void setActivity(const QString &activity);
Thing* inverterThing() const;
QUrl updateUrl();
void updateThingInfo(const QByteArray &data);
QUrl activityUrl();
void updateActivityInfo(const QByteArray &data);
private:
QString m_activity;
};
#endif // FRONIUSINVERTER_H

145
fronius/froniuslogger.cpp Normal file
View File

@ -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 <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 "froniuslogger.h"
#include "extern-plugininfo.h"
#include <QJsonDocument>
#include <QDateTime>
FroniusLogger::FroniusLogger(Thing *thing, QObject *parent) : FroniusThing(thing, parent)
{
}
QUrl FroniusLogger::updateUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl() + "GetLoggerInfo.cgi");
return requestUrl;
}
void FroniusLogger::updateThingInfo(const QByteArray &data)
{
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
// qCWarning(dcFroniusSolar()) << "Failed to parse JSON data" << data << ":" << error.errorString();
pluginThing()->setStateValue(dataloggerConnectedStateTypeId,false);
return;
}
// Parse the data and update the states of our device
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
QVariantMap headMap = jsonDoc.toVariant().toMap().value("Head").toMap();
QVariantMap bodyMap = jsonDoc.toVariant().toMap().value("Body").toMap();
// print the fetched data in dataMap format to stdout
//qCDebug(dcFroniusSolar()) << dataMap;
// create LoggerInfo list Map
QVariantMap LoggerInfoMap = bodyMap.value("LoggerInfo").toMap();
// copy retrieved information to device states
if (LoggerInfoMap.contains("ProductID"))
pluginThing()->setStateValue(dataloggerProductidStateTypeId, LoggerInfoMap.value("ProductID").toString());
if (LoggerInfoMap.contains("PlatformID"))
pluginThing()->setStateValue(dataloggerPlatformidStateTypeId, LoggerInfoMap.value("PlatformID").toString());
if (LoggerInfoMap.contains("HWVersion"))
pluginThing()->setStateValue(dataloggerHwversionStateTypeId, LoggerInfoMap.value("HWVersion").toString());
if (LoggerInfoMap.contains("SWVersion"))
pluginThing()->setStateValue(dataloggerSwversionStateTypeId, LoggerInfoMap.value("SWVersion").toString());
if (LoggerInfoMap.contains("TimezoneLocation"))
pluginThing()->setStateValue(dataloggerTzonelocStateTypeId, LoggerInfoMap.value("TimezoneLocation").toString());
if (LoggerInfoMap.contains("TimezoneName"))
pluginThing()->setStateValue(dataloggerTzoneStateTypeId, LoggerInfoMap.value("TimezoneName").toString());
if (LoggerInfoMap.contains("DefaultLanguage"))
pluginThing()->setStateValue(dataloggerDefaultlangStateTypeId, LoggerInfoMap.value("DefaultLanguage").toString());
if (LoggerInfoMap.contains("CashFactor"))
pluginThing()->setStateValue(dataloggerCashfactorStateTypeId, LoggerInfoMap.value("CashFactor").toDouble());
if (LoggerInfoMap.contains("CashCurrency"))
pluginThing()->setStateValue(dataloggerCashcurrencyStateTypeId, LoggerInfoMap.value("CashCurrency").toString());
if (LoggerInfoMap.contains("CO2Factor"))
pluginThing()->setStateValue(dataloggerCo2factorStateTypeId, LoggerInfoMap.value("CO2Factor").toDouble());
if (LoggerInfoMap.contains("CO2Unit"))
pluginThing()->setStateValue(dataloggerCo2unitStateTypeId, LoggerInfoMap.value("CO2Unit").toString());
//update successful
pluginThing()->setStateValue(dataloggerConnectedStateTypeId,true);
}
void FroniusLogger::updatePowerRelayState(const QByteArray &data)
{
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
// qCWarning(dcFroniusSolar()) << "Failed to parse JSON data" << data << ":" << error.errorString();
pluginThing()->setStateValue(dataloggerConnectedStateTypeId,false);
return;
}
// Parse the data and update the states of our device
QVariantMap bodyMap = jsonDoc.toVariant().toMap().value("Body").toMap();
QVariantMap dataMap = bodyMap.value("Data").toMap();
QVariantMap emrsMap = dataMap.value("emrs").toMap();
// create LoggerInfo list Map
QVariantMap GpiosMap = emrsMap.value("gpios").toMap();
//qCDebug(dcFroniusSolar()) << "Body: " << GpiosMap;
// copy retrieved information to device states
if (GpiosMap.contains("Reason")) {
qCDebug(dcFronius()) << "Power Relay State Reason: " << GpiosMap.value("Reason").toString();
pluginThing()->setStateValue(dataloggerPowerManagmentRelayReasonStateTypeId, GpiosMap.value("Reason").toString());
}
if (GpiosMap.contains("State")) {
qCDebug(dcFronius()) << "Power Relay State: " << GpiosMap.value("State").toString();
pluginThing()->setStateValue(dataloggerPowerManagmentRelayStateTypeId, GpiosMap.value("State").toBool());
}
//update successful
pluginThing()->setStateValue(dataloggerConnectedStateTypeId,true);
}

53
fronius/froniuslogger.h Normal file
View File

@ -0,0 +1,53 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 FRONIUSLOGGER_H
#define FRONIUSLOGGER_H
#include <QObject>
#include <QUrl>
#include "froniusinverter.h"
#include "froniusmeter.h"
#include "froniusstorage.h"
class FroniusLogger : public FroniusThing
{
Q_OBJECT
public:
explicit FroniusLogger(Thing *thing, QObject *parent = 0);
QUrl updateUrl();
void updateThingInfo(const QByteArray &data);
void updatePowerRelayState(const QByteArray &data);
};
#endif // FRONIUSLOGGER_H

127
fronius/froniusmeter.cpp Normal file
View File

@ -0,0 +1,127 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 "froniusmeter.h"
#include "extern-plugininfo.h"
#include <QJsonDocument>
#include <QDateTime>
FroniusMeter::FroniusMeter(Thing* thing, QObject *parent) : FroniusThing(thing, parent)
{
}
QString FroniusMeter::activity() const
{
return m_activity;
}
void FroniusMeter::setActivity(const QString &activity)
{
m_activity = activity;
}
QUrl FroniusMeter::updateUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
QUrlQuery query;
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl() + "GetMeterRealtimeData.cgi");
query.addQueryItem("Scope", "Device");
query.addQueryItem("DeviceId", deviceId());
requestUrl.setQuery(query);
return requestUrl;
}
void FroniusMeter::updateThingInfo(const QByteArray &data)
{
// Convert the rawdata to a JSON document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "FroniusMeter: Failed to parse JSON data" << data << ":" << error.errorString();
pluginThing()->setStateValue(inverterConnectedStateTypeId,false);
return;
}
// Parse the data and update the states of our thing
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
//QVariantMap headMap = jsonDoc.toVariant().toMap().value("Head").toMap();
//Add Smart meter with following states: „PowerReal_P_Sum“, „EnergyReal_WAC_Sum_Produced“, „EnergyReal_WAC_Sum_Consumed“
// Set the inverter thing state
if (dataMap.contains("PowerReal_P_Sum")) {
pluginThing()->setStateValue(meterCurrentPowerStateTypeId, dataMap.value("PowerReal_P_Sum").toInt());
}
if (dataMap.contains("EnergyReal_WAC_Sum_Produced")) {
pluginThing()->setStateValue(meterTotalEnergyProducedStateTypeId, dataMap.value("EnergyReal_WAC_Sum_Produced").toInt()/1000);
}
if (dataMap.contains("EnergyReal_WAC_Sum_Consumed")) {
pluginThing()->setStateValue(meterTotalEnergyConsumedStateTypeId, dataMap.value("EnergyReal_WAC_Sum_Consumed").toInt()/1000);
}
//update successful
pluginThing()->setStateValue(meterConnectedStateTypeId,true);
}
QUrl FroniusMeter::activityUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl()+"GetPowerFlowRealtimeData.fcgi");
return requestUrl;
}
void FroniusMeter::updateActivityInfo(const QByteArray &data)
{
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if(error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "FroniusMeter: Failed to parse JSON data" << data << ":" << error.errorString();
return;
}
// create Meter Info list map
//QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
//if (dataMap.value("Site").toMap().value("P_PV").toFloat() > 0) {
// pluginThing()->setStateValue(inverteractivStateTypeId, "production");
//} else {
// pluginThing()->setStateValue(inverteractivStateTypeId, "inactive");
//}
}

55
fronius/froniusmeter.h Normal file
View File

@ -0,0 +1,55 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 FRONIUSMETER_H
#define FRONIUSMETER_H
#include <QObject>
#include "froniusthing.h"
class FroniusMeter : public FroniusThing
{
Q_OBJECT
public:
explicit FroniusMeter(Thing* thing, QObject *parent = 0);
QString activity() const;
void setActivity(const QString &activity);
Thing* inverterThing() const;
QUrl updateUrl();
void updateThingInfo(const QByteArray &data);
QUrl activityUrl();
void updateActivityInfo(const QByteArray &data);
private:
QString m_activity;
};
#endif // FRONIUSMETER_H

138
fronius/froniusstorage.cpp Normal file
View File

@ -0,0 +1,138 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 "froniusstorage.h"
#include <QJsonDocument>
#include "extern-plugininfo.h"
#include <QDateTime>
FroniusStorage::FroniusStorage(Thing* thing, QObject *parent) : FroniusThing(thing, parent)
{
}
QString FroniusStorage::charging_state() const
{
return m_charging_state;
}
void FroniusStorage::setChargingState(const QString &charging_state)
{
m_charging_state = charging_state;
}
int FroniusStorage::charge() const
{
return m_charge;
}
void FroniusStorage::setCharge(const int &charge)
{
m_charge = charge;
}
QUrl FroniusStorage::updateUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
QUrlQuery query;
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl() + "GetStorageRealtimeData.cgi");
query.addQueryItem("Scope", "Device");
query.addQueryItem("DeviceId", deviceId());
requestUrl.setQuery(query);
return requestUrl;
}
void FroniusStorage::updateThingInfo(const QByteArray &data)
{
// Convert the rawdata to a JSON document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "FroniusStorage: Failed to parse JSON data" << data << ":" << error.errorString();
pluginThing()->setStateValue(storageConnectedStateTypeId,false);
return;
}
// Parse the data and update the states of our thing
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
// QVariantMap headMap = jsonDoc.toVariant().toMap().value("Head").toMap();
// create StorageInfo list map
QVariantMap storageInfoMap = dataMap.value("Controller").toMap();
// copy retrieved information to thing states
if (storageInfoMap.contains("StateOfCharge_Relative")) {
pluginThing()->setStateValue(storageBatteryLevelStateTypeId, storageInfoMap.value("StateOfCharge_Relative").toInt());
pluginThing()->setStateValue(storageBatteryCriticalStateTypeId, storageInfoMap.value("StateOfCharge_Relative").toInt() < 5);
}
if (storageInfoMap.contains("Temperature_Cell"))
pluginThing()->setStateValue(storageCellTemperatureStateTypeId, storageInfoMap.value("Temperature_Cell").toDouble());
//update successful
pluginThing()->setStateValue(storageConnectedStateTypeId,true);
}
QUrl FroniusStorage::activityUrl()
{
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(hostAddress());
requestUrl.setPath(baseUrl()+"GetPowerFlowRealtimeData.fcgi");
return requestUrl;
}
void FroniusStorage::updateActivityInfo(const QByteArray &data)
{
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if(error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "FroniusStorage: Failed to parse JSON data" << data << ":" << error.errorString();
return;
}
// create StorageInfo list map
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
float charge_akku = dataMap.value("Site").toMap().value("P_Akku").toFloat();
if (charge_akku == 0) {
pluginThing()->setStateValue(storageChargingStateTypeId, "inactive");
} else if (charge_akku < 0) {
pluginThing()->setStateValue(storageChargingStateTypeId, "charging");
} else {
pluginThing()->setStateValue(storageChargingStateTypeId, "discharging");
}
}

60
fronius/froniusstorage.h Normal file
View File

@ -0,0 +1,60 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 FRONIUSSTORAGE_H
#define FRONIUSSTORAGE_H
#include <QObject>
#include "froniusthing.h"
class FroniusStorage : public FroniusThing
{
Q_OBJECT
public:
explicit FroniusStorage(Thing *thing, QObject *parent = 0);
QString charging_state() const;
void setChargingState(const QString &charging_state);
int charge() const;
void setCharge(const int &charge);
QUrl updateUrl();
void updateThingInfo(const QByteArray &data);
QUrl activityUrl();
void updateActivityInfo(const QByteArray &data);
private:
QString m_charging_state;
int m_charge;
};
#endif // FRONIUSSTORAGE_H

102
fronius/froniusthing.cpp Normal file
View File

@ -0,0 +1,102 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 "froniusthing.h"
FroniusThing::FroniusThing(Thing *thing, QObject *parent) :
QObject(parent)
{
m_thing = thing;
}
QString FroniusThing::name() const
{
return m_name;
}
void FroniusThing::setName(const QString &name)
{
m_name = name;
}
QString FroniusThing::hostId() const
{
return m_hostId;
}
void FroniusThing::setHostId(const QString &hostId)
{
m_hostId = hostId;
}
QString FroniusThing::hostAddress() const
{
return m_hostAddress;
}
void FroniusThing::setHostAddress(const QString &hostAddress)
{
m_hostAddress = hostAddress;
}
QString FroniusThing::baseUrl() const
{
return m_baseUrl;
}
void FroniusThing::setBaseUrl(const QString &baseUrl)
{
m_baseUrl = baseUrl;
}
QString FroniusThing::uniqueId() const
{
return m_uniqueId;
}
void FroniusThing::setUniqueId(const QString &uniqueId)
{
m_uniqueId = uniqueId;
}
QString FroniusThing::deviceId() const
{
return m_thingId;
}
void FroniusThing::setDeviceId(const QString &thingId)
{
m_thingId = thingId;
}
Thing* FroniusThing::pluginThing() const
{
return m_thing;
}

82
fronius/froniusthing.h Normal file
View File

@ -0,0 +1,82 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 FRONIUSTHING_H
#define FRONIUSTHING_H
#include "extern-plugininfo.h"
#include "integrations/thing.h"
#include <QObject>
#include <QUrl>
#include <QUrlQuery>
class FroniusThing : public QObject
{
Q_OBJECT
public:
explicit FroniusThing(Thing *thing, QObject *parrent = 0);
QString name() const;
void setName(const QString &name);
QString hostId() const;
void setHostId(const QString &hostId);
QString hostAddress() const;
void setHostAddress(const QString &hostAddress);
QString baseUrl() const;
void setBaseUrl(const QString &baseUrl);
QString uniqueId() const;
void setUniqueId(const QString &uniqueId);
QString deviceId() const;
void setDeviceId(const QString &deviceId);
Thing* pluginThing() const;
private:
Thing* m_thing;
QString m_name;
QString m_hostId;
QString m_hostAddress;
QString m_apiVersion;
QString m_baseUrl;
QString m_uniqueId;
QString m_thingId;
};
#endif // FRONIUSTHING_H

View File

@ -0,0 +1,512 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 "plugininfo.h"
#include "integrationpluginfronius.h"
#include "plugintimer.h"
#include "network/networkaccessmanager.h"
#include <QUrl>
#include <QUrlQuery>
#include <QJsonDocument>
#include <QPointer>
#include <QDebug>
// Notes: Test IPs: 93.82.221.82 | 88.117.152.99
IntegrationPluginFronius::IntegrationPluginFronius(QObject *parent): IntegrationPlugin(parent){
}
void IntegrationPluginFronius::setupThing(ThingSetupInfo *info)
{
qCDebug(dcFronius()) << "Setting up a new thing:" << info->thing()->name();
Thing *thing = info->thing();
if (thing->thingClassId() == dataloggerThingClassId) {
//check if a data logger is already added with this IPv4Address
foreach(FroniusLogger *logger, m_froniusLoggers.keys()){
if(logger->hostAddress() == thing->paramValue(dataloggerThingLoggerHostParamTypeId).toString()){
//this logger at this IPv4 address is already added
qCWarning(dcFronius()) << "thing at " << thing->paramValue(dataloggerThingLoggerHostParamTypeId).toString() << " already added!";
info->finish(Thing::ThingErrorThingInUse);
return;
}
}
// Perform a HTTP request on the given IPv4Address to find things
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(thing->paramValue(dataloggerThingLoggerHostParamTypeId).toString());
requestUrl.setPath("/solar_api/GetAPIVersion.cgi");
qCDebug(dcFronius()) << "Search at address" << requestUrl.toString();
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(requestUrl));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, info, thing, reply]() {
QByteArray data = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Fronius: Network request error:" << reply->error() << reply->errorString() << reply->url();
info->finish(Thing::ThingErrorHardwareNotAvailable, tr("Device not reachable"));
return;
}
// Convert the rawdata to a JSON document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "Fronius: Failed to parse JSON data" << data << ":" << error.errorString() << data;
info->finish(Thing::ThingErrorHardwareFailure, tr("Please try again"));
return;
}
FroniusLogger *newLogger = new FroniusLogger(thing, this);
newLogger->setBaseUrl(jsonDoc.toVariant().toMap().value("BaseURL").toString());
newLogger->setHostAddress(thing->paramValue(dataloggerThingLoggerHostParamTypeId).toString());
m_froniusLoggers.insert(newLogger, thing);
info->finish(Thing::ThingErrorNoError);
});
//Async Setup
} else if (thing->thingClassId() == inverterThingClassId) {
FroniusInverter *newInverter = new FroniusInverter(thing,this);
newInverter->setDeviceId(thing->paramValue(inverterThingIdParamTypeId).toString());
newInverter->setBaseUrl(thing->paramValue(inverterThingBaseParamTypeId).toString());
newInverter->setHostAddress(thing->paramValue(inverterThingHostParamTypeId).toString());
m_froniusInverters.insert(newInverter,thing);
// get inverter unique ID
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(newInverter->hostAddress());
requestUrl.setPath(newInverter->baseUrl() + "GetInverterInfo.cgi");
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(requestUrl));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, info, newInverter, reply]() {
QByteArray data = reply->readAll();
reply->deleteLater();
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Fronius: Network request error:" << reply->error() << reply->errorString();
info->finish(Thing::ThingErrorHardwareNotAvailable, "Device not reachable");
return;
}
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "Fronius: Failed to parse JSON data" << data << ":" << error.errorString();
info->finish(Thing::ThingErrorHardwareNotAvailable, "Please try again");
return;
}
// Check reply information
QVariantMap dataMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap();
// check for thing id in reply
if (dataMap.contains(newInverter->deviceId())) {
qCDebug(dcFronius()) << "Found Thing with unique:" << dataMap.value(newInverter->deviceId()).toMap().value("UniqueID").toString();
newInverter->setUniqueId(dataMap.value(newInverter->deviceId()).toMap().value("UniqueID").toString());
newInverter->pluginThing()->setParamValue(inverterThingUniqueIdParamTypeId,newInverter->uniqueId());
qCDebug(dcFronius()) << "Stored unique ID:" << newInverter->uniqueId();
}
info->finish(Thing::ThingErrorNoError);
});
// Async Setup
} else if (thing->thingClassId() == storageThingClassId) {
FroniusStorage *newStorage = new FroniusStorage(thing, this);
newStorage->setDeviceId(thing->paramValue(storageThingIdParamTypeId).toString());
newStorage->setBaseUrl(thing->paramValue(storageThingBaseParamTypeId).toString());
newStorage->setHostAddress(thing->paramValue(storageThingHostParamTypeId).toString());
m_froniusStorages.insert(newStorage,thing);
// Get storage manufacturer and maximum capacity
QUrlQuery query;
QUrl requestUrl;
requestUrl.setScheme("http");
requestUrl.setHost(newStorage->hostAddress());
requestUrl.setPath(newStorage->baseUrl() + "GetStorageRealtimeData.cgi");
query.addQueryItem("Scope","Device");
query.addQueryItem("DeviceId", newStorage->deviceId());
requestUrl.setQuery(query);
qCDebug(dcFronius()) << "Get Storage Data at address" << requestUrl.toString();
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(requestUrl));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, info, newStorage, reply]() {
QByteArray data = reply->readAll();
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Fronius: Network request error:" << reply->error() << reply->errorString();
info->finish(Thing::ThingErrorNoError);
return;
}
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "Fronius: Failed to parse JSON data" << data << ":" << error.errorString();
info->finish(Thing::ThingErrorHardwareFailure, tr("Please try again"));
return;
}
// Create StorageInfo list map
QVariantMap storageInfoMap = jsonDoc.toVariant().toMap().value("Body").toMap().value("Data").toMap().value("Controller").toMap();
newStorage->pluginThing()->setParamValue(storageThingManufacturerParamTypeId, storageInfoMap.value("Details").toMap().value("Manufacturer").toString());
newStorage->pluginThing()->setParamValue(storageThingCapacityParamTypeId, storageInfoMap.value("Capacity_Maximum").toInt());
info->finish(Thing::ThingErrorNoError);
});
//Async Setup
} else if (thing->thingClassId() == meterThingClassId) {
FroniusMeter *newMeter = new FroniusMeter(thing, this);;
newMeter->setDeviceId(thing->paramValue(meterThingIdParamTypeId).toString());
newMeter->setBaseUrl(thing->paramValue(meterThingBaseParamTypeId).toString());
newMeter->setHostAddress(thing->paramValue(meterThingHostParamTypeId).toString());
m_froniusMeters.insert(newMeter, thing);
info->finish(Thing::ThingErrorNoError);
//Async setup
} else {
Q_ASSERT_X(false, "setupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
void IntegrationPluginFronius::postSetupThing(Thing *thing)
{
qCDebug(dcFronius()) << "Post setup" << thing->name();
if (!m_pluginTimer) {
m_pluginTimer = hardwareManager()->pluginTimerManager()->registerTimer(30);
connect(m_pluginTimer, &PluginTimer::timeout, this, [this]() {
foreach (Thing *logger, m_froniusLoggers)
updateThingStates(logger);
foreach (Thing *inverter, m_froniusInverters)
updateThingStates(inverter);
foreach (Thing *meter, m_froniusMeters)
updateThingStates(meter);
foreach (Thing *storage, m_froniusStorages)
updateThingStates(storage);
});
}
if (thing->thingClassId() == dataloggerThingClassId) {
searchNewThings(m_froniusLoggers.key(thing));
updateThingStates(thing);
} else if (thing->thingClassId() == inverterThingClassId) {
updateThingStates(thing);
} else if (thing->thingClassId() == meterThingClassId) {
updateThingStates(thing);
} else if (thing->thingClassId() == storageThingClassId) {
updateThingStates(thing);
} else {
Q_ASSERT_X(false, "postSetupThing", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
void IntegrationPluginFronius::thingRemoved(Thing *thing)
{
if (thing->thingClassId() == dataloggerThingClassId) {
FroniusLogger *logger = m_froniusLoggers.key(thing);
m_froniusLoggers.remove(logger);
logger->deleteLater();
return;
} else if (thing->thingClassId() == inverterThingClassId) {
FroniusInverter *inverter = m_froniusInverters.key(thing);
m_froniusInverters.remove(inverter);
inverter->deleteLater();
return;
} else if (thing->thingClassId() == meterThingClassId) {
FroniusMeter *meter = m_froniusMeters.key(thing);
m_froniusMeters.remove(meter);
meter->deleteLater();
return;
} else if (thing->thingClassId() == storageThingClassId) {
FroniusStorage *storage = m_froniusStorages.key(thing);
m_froniusStorages.remove(storage);
storage->deleteLater();
return;
} else {
Q_ASSERT_X(false, "thingRemoved", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
if (myThings().isEmpty()) {
hardwareManager()->pluginTimerManager()->unregisterTimer(m_pluginTimer);
m_pluginTimer = nullptr;
}
}
void IntegrationPluginFronius::executeAction(ThingActionInfo *info)
{
Action action = info->action();
Thing *thing = info->thing();
qCDebug(dcFronius()) << "Execute action" << thing->name() << action.actionTypeId().toString();
if (thing->thingClassId() == dataloggerThingClassId) {
if (action.actionTypeId() == dataloggerSearchDevicesActionTypeId) {
searchNewThings(m_froniusLoggers.key(thing));
info->finish(Thing::ThingErrorNoError);
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(action.actionTypeId().toString()).toUtf8());
}
} else {
Q_ASSERT_X(false, "executeAction", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
void IntegrationPluginFronius::updateThingStates(Thing *thing)
{
qCDebug(dcFronius()) << "Update thing values for" << thing->name();
if(thing->thingClassId() == inverterThingClassId) {
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusInverters.key(thing)->updateUrl()));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, thing, reply]() {
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << reply->error() << reply->errorString() << reply->request().url();
return;
}
QByteArray data = reply->readAll();
if(m_froniusInverters.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusInverters.key(thing)->updateThingInfo(data);
}
});
QNetworkReply *next_reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusInverters.key(thing)->activityUrl()));
connect(next_reply, &QNetworkReply::finished, next_reply, &QNetworkReply::deleteLater);
connect(next_reply, &QNetworkReply::finished, [this, thing, next_reply]() {
if (next_reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << next_reply->error() << next_reply->errorString() << next_reply->request().url();
return;
}
QByteArray data = next_reply->readAll();
if(m_froniusInverters.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusInverters.key(thing)->updateActivityInfo(data);
}
});
} else if (thing->thingClassId() == dataloggerThingClassId) {
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusLoggers.key(thing)->updateUrl()));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, thing, reply]() {
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << reply->error() << reply->errorString() << reply->request().url();
return;
}
QByteArray data = reply->readAll();
if(m_froniusLoggers.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusLoggers.key(thing)->updateThingInfo(data);
}
});
} else if (thing->thingClassId() == meterThingClassId) {
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusMeters.key(thing)->updateUrl()));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, thing, reply]() {
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << reply->error() << reply->errorString() << reply->request().url();
return;
}
QByteArray data = reply->readAll();
if(m_froniusMeters.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusMeters.key(thing)->updateThingInfo(data);
}
});
QNetworkReply *next_reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusMeters.key(thing)->activityUrl()));
connect(next_reply, &QNetworkReply::finished, next_reply, &QNetworkReply::deleteLater);
connect(next_reply, &QNetworkReply::finished, [this, thing, next_reply]() {
if (next_reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << next_reply->error() << next_reply->errorString() << next_reply->request().url();
return;
}
QByteArray data = next_reply->readAll();
if(m_froniusMeters.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusMeters.key(thing)->updateActivityInfo(data);
}
});
} else if (thing->thingClassId() == storageThingClassId) {
QNetworkReply *reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusStorages.key(thing)->updateUrl()));
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, thing, reply]() {
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << reply->error() << reply->errorString() << reply->request().url();
return;
}
QByteArray data = reply->readAll();
if(m_froniusStorages.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusStorages.key(thing)->updateThingInfo(data);
}
});
QNetworkReply *next_reply = hardwareManager()->networkManager()->get(QNetworkRequest(m_froniusStorages.key(thing)->activityUrl()));
connect(next_reply, &QNetworkReply::finished, next_reply, &QNetworkReply::deleteLater);
connect(next_reply, &QNetworkReply::finished, [this, thing, next_reply]() {
next_reply->deleteLater();
if (next_reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << next_reply->error() << next_reply->errorString() << next_reply->request().url();
return;
}
QByteArray data = next_reply->readAll();
if(m_froniusStorages.values().contains(thing)){ // check if thing was not removed before reply was received
m_froniusStorages.key(thing)->updateActivityInfo(data);
}
});
} else {
Q_ASSERT_X(false, "updateThingState", QString("Unhandled thingClassId: %1").arg(thing->thingClassId().toString()).toUtf8());
}
}
void IntegrationPluginFronius::searchNewThings(FroniusLogger *logger)
{
QUrl url; QUrlQuery query;
query.addQueryItem("DeviceClass", "System");
url.setScheme("http");
url.setHost(logger->hostAddress());
url.setPath(logger->baseUrl() + "GetActiveDeviceInfo.cgi");
url.setQuery(query);
qCDebug(dcFronius()) << "Search Things at address" << url.toString();
QNetworkRequest request = QNetworkRequest(url);
request.setHeader(QNetworkRequest::KnownHeaders::ContentTypeHeader, "application/json");
QNetworkReply *reply = hardwareManager()->networkManager()->get(request);
connect(reply, &QNetworkReply::finished, reply, &QNetworkReply::deleteLater);
connect(reply, &QNetworkReply::finished, [this, logger, reply]() {
if (reply->error() != QNetworkReply::NoError) {
qCWarning(dcFronius()) << "Network request error:" << reply->error() << reply->errorString() << reply->request().url();
return;
}
Thing *loggerThing = m_froniusLoggers.value(logger);
if (!loggerThing)
return;
QByteArray data = reply->readAll();
// Convert the rawdata to a json document
QJsonParseError error;
QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error);
if (error.error != QJsonParseError::NoError) {
qCWarning(dcFronius()) << "Fronius: Failed to parse JSON data" << data << ":" << error.errorString();
return;
}
// Parse the data for thing information
QList<ThingDescriptor> thingDescriptors;
// Check reply information
QVariantMap bodyMap = jsonDoc.toVariant().toMap().value("Body").toMap();
// Parse reply for inverters at the host address
QVariantMap inverterMap = bodyMap.value("Data").toMap().value("Inverter").toMap();
foreach (QString inverterId, inverterMap.keys()) {
//check if thing already connected to logger
if(!existingThing(inverterThingIdParamTypeId,inverterId)) {
QString thingName = loggerThing->name() + " Inverter " + inverterId;
ThingDescriptor descriptor(inverterThingClassId, thingName, "Fronius Solar Inverter", loggerThing->id());
ParamList params;
params.append(Param(inverterThingHostParamTypeId, m_froniusLoggers.key(loggerThing)->hostAddress()));
params.append(Param(inverterThingBaseParamTypeId, m_froniusLoggers.key(loggerThing)->baseUrl()));
params.append(Param(inverterThingIdParamTypeId, inverterId));
params.append(Param(inverterThingUniqueIdParamTypeId, ""));
descriptor.setParams(params);
thingDescriptors.append(descriptor);
}
}
// parse reply for meter things at the host address
QVariantMap meterMap = bodyMap.value("Data").toMap().value("Meter").toMap();
foreach (QString meterId, meterMap.keys()) {
//check if thing already connected to logger
if(!existingThing(meterThingIdParamTypeId, meterId)) {
QString thingName = loggerThing->name() + " Meter " + meterId;
ThingDescriptor descriptor(meterThingClassId, thingName, "Fronius Solar Meter", loggerThing->id());
ParamList params;
params.append(Param(meterThingHostParamTypeId, m_froniusLoggers.key(loggerThing)->hostAddress()));
params.append(Param(meterThingBaseParamTypeId, m_froniusLoggers.key(loggerThing)->baseUrl()));
params.append(Param(meterThingIdParamTypeId, meterId));
params.append(Param(meterThingUniqueIdParamTypeId, meterMap.value(meterId).toMap().value("Serial").toString()));
descriptor.setParams(params);
thingDescriptors.append(descriptor);
}
}
// parse reply for storage things at the host address
QVariantMap storageMap = bodyMap.value("Data").toMap().value("Storage").toMap();
foreach (QString storageId, storageMap.keys()) {
//check if thing already connected to logger
if(!existingThing(storageThingIdParamTypeId,storageId)) {
QString thingName = loggerThing->name() + " Storage " + storageId;
ThingDescriptor descriptor(storageThingClassId, thingName, "Fronius Solar Storage", loggerThing->id());
ParamList params;
params.append(Param(storageThingManufacturerParamTypeId, ""));
params.append(Param(storageThingCapacityParamTypeId, ""));
params.append(Param(storageThingHostParamTypeId, m_froniusLoggers.key(loggerThing)->hostAddress()));
params.append(Param(storageThingBaseParamTypeId, m_froniusLoggers.key(loggerThing)->baseUrl()));
params.append(Param(storageThingIdParamTypeId, storageId));
params.append(Param(storageThingUniqueIdParamTypeId, storageMap.value(storageId).toMap().value("Serial").toString()));
descriptor.setParams(params);
thingDescriptors.append(descriptor);
}
}
if (!thingDescriptors.empty()) {
emit autoThingsAppeared(thingDescriptors);
thingDescriptors.clear();
}
});
}
bool IntegrationPluginFronius::existingThing(ParamTypeId thingParamId, QString thingId)
{
foreach(Thing *thing, myThings()) {
if(thing->paramValue(thingParamId).toString() == thingId) {
return true;
}
}
return false;
}

View File

@ -0,0 +1,74 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <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 INTEGRATIONPLUGINFRONIUS_H
#define INTEGRATIONPLUGINFRONIUS_H
#include "integrations/integrationplugin.h"
#include "froniuslogger.h"
#include <QHash>
#include <QNetworkReply>
#include <QTimer>
#include <QUuid>
class PluginTimer;
class IntegrationPluginFronius : public IntegrationPlugin
{
Q_OBJECT
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginfronius.json")
Q_INTERFACES(IntegrationPlugin)
public:
explicit IntegrationPluginFronius(QObject *parent = nullptr);
void setupThing(ThingSetupInfo *thing) override;
void postSetupThing(Thing* thing) override;
void executeAction(ThingActionInfo *info) override;
void thingRemoved(Thing* thing) override;
private:
PluginTimer *m_pluginTimer = nullptr;
QHash<FroniusLogger *, Thing *> m_froniusLoggers;
QHash<FroniusInverter *, Thing *> m_froniusInverters;
QHash<FroniusMeter *, Thing *> m_froniusMeters;
QHash<FroniusStorage *, Thing *> m_froniusStorages;
QHash<QUuid, ThingActionInfo *> m_asyncActions;
void updateThingStates(Thing *thing);
void searchNewThings(FroniusLogger *logger);
bool existingThing(ParamTypeId thingParamId, QString thingId);
};
#endif // INTEGRATIONPLUGINFRONIUS_H

View File

@ -0,0 +1,414 @@
{
"id": "02319cfc-8b55-49ba-99bc-0588bbfab063",
"name": "fronius",
"displayName": "Fronius Solar",
"vendors": [
{
"id": "2286fc38-afd9-4128-ab7e-0fba527d53ba",
"name": "Fronius",
"displayName": "Fronius",
"thingClasses": [
{
"id": "4fd79fed-42f1-4df9-be64-3df7b2e0bda2",
"name": "datalogger",
"displayName": "Fronius Solar Connection",
"createMethods": ["user"],
"interfaces": ["gateway"],
"paramTypes": [
{
"id": "52da0197-4b78-4fec-aa72-70f949e26edc",
"name": "loggerHost",
"displayName": "Host address",
"type": "QString",
"inputType": "IPv4Address",
"defaultValue": "88.117.152.99"
}
],
"stateTypes": [
{
"id": "98e4476f-e745-4a7f-b795-19269cb70c40",
"name": "connected",
"displayName": "Reachable",
"displayNameEvent": "logger reachable changed",
"type": "bool",
"defaultValue": false
},
{
"id": "b22052ef-14da-43d2-982b-f2c2d8c03206",
"name": "productid",
"displayName": "Product ID",
"displayNameEvent": "Product ID changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "65c068e6-4a0b-4672-9724-ae95216c4c9c",
"name": "platformid",
"displayName": "Platform ID",
"displayNameEvent": "Platform ID changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "3b4206e5-74c7-4708-96b8-2abfab0c41d6",
"name": "hwversion",
"displayName": "Hardware version",
"displayNameEvent": "Hardware version changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "31743ca5-4353-4f26-b2ad-5da43e5b9d86",
"name": "swversion",
"displayName": "Software version",
"displayNameEvent": "Software version changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "d034f59d-dc34-450a-a6f3-68264767a3e4",
"name": "tzoneloc",
"displayName": "Timezone location",
"displayNameEvent": "Timezone location changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "6bdfeeda-7a47-4043-a011-5eb96308a7d6",
"name": "tzone",
"displayName": "Time zone",
"displayNameEvent": "Time zone changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "18b250e2-080a-4991-b368-177c4da83eca",
"name": "defaultlang",
"displayName": "Default language",
"displayNameEvent": "Default language changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "bc18595b-17c7-4a1f-8002-b908a3d9239d",
"name": "cashfactor",
"displayName": "Cash factor",
"displayNameEvent": "Cash factor changed",
"type": "double",
"defaultValue": "-"
},
{
"id": "84da30c8-a7fb-49c6-884c-9521f9f62bbc",
"name": "cashcurrency",
"displayName": "Cash currency",
"displayNameEvent": "Cash Currency changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "8ab01225-7be5-4482-a99b-314108ae0e2b",
"name": "co2factor",
"displayName": "CO2 factor",
"displayNameEvent": "CO2 factor changed",
"type": "double",
"defaultValue": "-"
},
{
"id": "b0e655f8-27d0-4add-918b-461cadc8efcc",
"name": "co2unit",
"displayName": "CO2 unit",
"displayNameEvent": "CO2 unit changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "b217acf6-0c5e-4a3e-a50c-4c0133c871c2",
"name": "powerManagmentRelay",
"displayName": "Power management relay",
"displayNameEvent": "Power management relay status changed",
"type": "bool",
"defaultValue": false
},
{
"id": "5650ce9b-0d7d-4c52-b410-ea618889b4bb",
"name": "powerManagmentRelayReason",
"displayName": "Power management relay reason",
"displayNameEvent": "Power management relay reason changed",
"type": "QString",
"defaultValue": ""
}
],
"actionTypes": [
{
"id": "c217fdc1-de18-41dc-b5d8-8072f84e7b6c",
"name": "searchDevices",
"displayName": "Search new devices"
}
]
},
{
"id": "540aa956-8b8f-4982-9f58-343a76cea846",
"name": "inverter",
"displayName": "Fronius Solar Inverter",
"createMethods": ["auto"],
"interfaces" : ["extendedsmartmeterproducer", "connectable"],
"paramTypes": [
{
"id": "1aa82e12-ee8c-4142-8b89-a4f1e85556d0",
"name": "host",
"displayName": "Host address",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "ec1f792a-b453-49f0-8ea6-677ad3c25a5c",
"name": "base",
"displayName": "Base url",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "f2f8c2f5-dd6a-4786-b336-82fc84e5bb98",
"name": "id",
"displayName": "Device id",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "8fadc0e8-9d69-4b9d-b493-b6ac3eb59c49",
"name": "uniqueId",
"displayName": "Unique id",
"type": "QString",
"inputType": "TextLine"
}
],
"stateTypes": [
{
"id": "eda29c50-73ac-40e0-9c92-26fee352e688",
"name": "connected",
"displayName": "Reachable",
"displayNameEvent": "Reachable changed",
"type": "bool",
"defaultValue": false
},
{
"id": "e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0",
"name": "active",
"displayName": "Inverter active",
"displayNameEvent": "Inverter active changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "788accbc-b86e-471b-b37f-14c9c6411526",
"name": "currentPower",
"displayName": "Current power",
"displayNameEvent": "Current Power changed",
"type": "double",
"unit": "Watt",
"defaultValue": "0"
},
{
"id": "b6af1bf5-753d-47b6-a151-e4d801fe6ff8",
"name": "eday",
"displayName": "Energy of current day",
"displayNameEvent": "Energy of day changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": "0"
},
{
"id": "7fd2fa28-9bcc-4f01-a823-459437d185f6",
"name": "eyear",
"displayName": "Energy of current year",
"displayNameEvent": "Energy of year changed",
"type": "int",
"unit": "KiloWattHour",
"defaultValue": "0"
},
{
"id": "d6dbb879-4cbc-4db3-830e-b92ba91a13e5",
"name": "totalEnergyProduced",
"displayName": "Energy total",
"displayNameEvent": "Energy total changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": "0"
}
]
},
{
"id": "c3cb53a4-32dd-434d-9d9c-aada41f8129c",
"name": "meter",
"displayName": "Fronius Smart Meter",
"createMethods": ["auto"],
"interfaces": [ "extendedsmartmeterconsumer", "extendedsmartmeterproducer", "connectable" ],
"paramTypes": [
{
"id": "ddcb8689-b0b8-4b94-b022-4ce4cf9e0ec2",
"name": "host",
"displayName": "Address",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "2cb4acd6-a663-48c3-8366-ab538c7b4e7d",
"name": "base",
"displayName": "Base URL",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "cf3a7025-d368-475a-8f48-efc1344a8409",
"name": "id",
"displayName": "Device ID",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "285eabb2-47c8-4406-8123-6621b21558c1",
"name": "uniqueId",
"displayName": "Unique ID",
"type": "QString",
"inputType": "TextLine"
}
],
"stateTypes": [
{
"id": "b70b61a4-54cb-47ec-b62a-b498eb1f650e",
"name": "connected",
"displayName": "Reachable",
"displayNameEvent": "Reachable changed",
"type": "bool",
"defaultValue": false
},
{
"id": "e5056ea1-88a2-410b-9c5e-6322aca4cb17",
"name": "currentPower",
"displayName": "Total current power",
"displayNameEvent": "Total current power changed",
"type": "double",
"unit": "Watt",
"defaultValue": "0"
},
{
"id": "ca14cca5-d9f0-49c5-a8f7-907d4c0825f0",
"name": "totalEnergyProduced",
"displayName": "Energy Produced",
"displayNameEvent": "Energy production changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": "0"
},
{
"id": "f3451818-48d2-42a5-94fd-ad094c06967f",
"name": "totalEnergyConsumed",
"displayName": "Energy Consumed",
"displayNameEvent": "Energy consumption changed",
"type": "double",
"unit": "KiloWattHour",
"defaultValue": "0"
}
]
},
{
"id": "b00139fa-7386-48b1-8697-2fdd21a57ced",
"name": "storage",
"displayName": "Fronius Solar Storage",
"createMethods": ["auto"],
"interfaces": [ "batterylevel", "connectable" ],
"paramTypes": [
{
"id": "9665c38b-c13a-428f-b741-1470239c63dc",
"name": "manufacturer",
"displayName": "Manufacturer",
"type": "QString",
"defaultValue": "TextLine"
},
{
"id": "59a68e91-1aad-46b7-b351-03b7b2216366",
"name": "capacity",
"displayName": "Maxmimum capacity",
"type": "QString",
"defaultValue": "TextLine"
},
{
"id": "84bd8a41-2411-4bb0-87a9-ab7e01044b10",
"name": "host",
"displayName": "Address",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "d19b5d81-4e62-48be-bad6-287b0019274a",
"name": "base",
"displayName": "Base URL",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "49087f31-abf5-4bb8-946b-a3626ee80566",
"name": "id",
"displayName": "Device ID",
"type": "QString",
"inputType": "TextLine"
},
{
"id": "0d62432a-38bc-48b8-99d2-895f17fcf0b2",
"name": "uniqueId",
"displayName": "Unique ID",
"type": "QString",
"inputType": "TextLine"
}
],
"stateTypes": [
{
"id": "2f7e1267-b0be-4b78-9aa3-832b86c4efad",
"name": "connected",
"displayName": "Reachable",
"displayNameEvent": "Reachable changed",
"type": "bool",
"defaultValue": false
},
{
"id": "2de34a1f-de2e-43ad-8998-8a5460dff9ae",
"name": "charging",
"displayName": "State of charge",
"displayNameEvent": "Charge state changed",
"type": "QString",
"defaultValue": "-"
},
{
"id": "5c6da672-9662-41bc-8c8c-aa0f32481251",
"name": "batteryLevel",
"displayName": "Battery level",
"displayNameEvent": "Battery level changed",
"type": "int",
"unit": "Percentage",
"defaultValue": "0",
"minValue": 0,
"maxValue": 100
},
{
"id": "4417499c-1757-4309-868a-be5cf3455c4a",
"name": "cellTemperature",
"displayName": "Cell temperature",
"displayNameEvent": "Cell temperature changed",
"type": "double",
"unit": "DegreeCelsius",
"defaultValue": "0"
},
{
"id": "e5396312-b50e-4d6f-b628-5b51448971d3",
"name": "batteryCritical",
"displayName": "Battery level critical",
"displayNameEvent": "Battery level critical changed",
"type": "bool",
"defaultValue": false
}
]
}
]
}
]
}

13
fronius/meta.json Normal file
View File

@ -0,0 +1,13 @@
{
"title": "Fronius",
"tagline": "Connect to Fronius Solar devices.",
"icon": "fronius.png",
"stability": "community",
"offline": true,
"technologies": [
"network"
],
"categories": [
]
}

View File

@ -0,0 +1,741 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1" language="de">
<context>
<name>IntegrationPluginFronius</name>
<message>
<location filename="../integrationpluginfronius.cpp" line="80"/>
<source>Device not reachable</source>
<translation>Gerät nicht erreichbar</translation>
</message>
<message>
<location filename="../integrationpluginfronius.cpp" line="89"/>
<location filename="../integrationpluginfronius.cpp" line="183"/>
<source>Please try again</source>
<translation>Bitte versuchen Sie es erneut</translation>
</message>
</context>
<context>
<name>fronius</name>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="168"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="171"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="174"/>
<source>Address</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {830a3cc6-ae0a-4cc3-94d6-86575e410e49})
----------
The name of the ParamType (ThingClass: storage, Type: thing, ID: {84bd8a41-2411-4bb0-87a9-ab7e01044b10})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {ddcb8689-b0b8-4b94-b022-4ce4cf9e0ec2})</extracomment>
<translation>Adresse</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="177"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="180"/>
<source>Base URL</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {d19b5d81-4e62-48be-bad6-287b0019274a})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {2cb4acd6-a663-48c3-8366-ab538c7b4e7d})</extracomment>
<translation>Basis URL</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="183"/>
<source>Base url</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {ec1f792a-b453-49f0-8ea6-677ad3c25a5c})</extracomment>
<translation>Basis URL</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="186"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="189"/>
<source>Battery critical</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: batteryCritical, ID: {3171a6e0-43a7-4de8-8e20-f748e44af7ac})
----------
The name of the StateType ({3171a6e0-43a7-4de8-8e20-f748e44af7ac}) of ThingClass sunspecStorage</extracomment>
<translation>Batterie kritisch</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="192"/>
<source>Battery critical changed</source>
<extracomment>The name of the EventType ({3171a6e0-43a7-4de8-8e20-f748e44af7ac}) of ThingClass sunspecStorage</extracomment>
<translation>Batterie kritisch geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="195"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="198"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="201"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="204"/>
<source>Battery level</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: batteryLevel, ID: {0bf53f80-97f8-488b-b514-58f9fe08c183})
----------
The name of the StateType ({0bf53f80-97f8-488b-b514-58f9fe08c183}) of ThingClass sunspecStorage
----------
The name of the ParamType (ThingClass: storage, EventType: batteryLevel, ID: {5c6da672-9662-41bc-8c8c-aa0f32481251})
----------
The name of the StateType ({5c6da672-9662-41bc-8c8c-aa0f32481251}) of ThingClass storage</extracomment>
<translation>Batteriestand</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="207"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="210"/>
<source>Battery level changed</source>
<extracomment>The name of the EventType ({0bf53f80-97f8-488b-b514-58f9fe08c183}) of ThingClass sunspecStorage
----------
The name of the EventType ({5c6da672-9662-41bc-8c8c-aa0f32481251}) of ThingClass storage</extracomment>
<translation>Batteriestand geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="213"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="216"/>
<source>Battery level critical</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: batteryCritical, ID: {e5396312-b50e-4d6f-b628-5b51448971d3})
----------
The name of the StateType ({e5396312-b50e-4d6f-b628-5b51448971d3}) of ThingClass storage</extracomment>
<translation>Batteriestand kritisch</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="219"/>
<source>Battery level critical changed</source>
<extracomment>The name of the EventType ({e5396312-b50e-4d6f-b628-5b51448971d3}) of ThingClass storage</extracomment>
<translation>Batteriestand kritisch geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="222"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="225"/>
<source>CO2 factor</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: co2factor, ID: {8ab01225-7be5-4482-a99b-314108ae0e2b})
----------
The name of the StateType ({8ab01225-7be5-4482-a99b-314108ae0e2b}) of ThingClass datalogger</extracomment>
<translation>CO2 Faktor</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="228"/>
<source>CO2 factor changed</source>
<extracomment>The name of the EventType ({8ab01225-7be5-4482-a99b-314108ae0e2b}) of ThingClass datalogger</extracomment>
<translation>CO2 Faktor geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="231"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="234"/>
<source>CO2 unit</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: co2unit, ID: {b0e655f8-27d0-4add-918b-461cadc8efcc})
----------
The name of the StateType ({b0e655f8-27d0-4add-918b-461cadc8efcc}) of ThingClass datalogger</extracomment>
<translation>CO2-Einheit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="237"/>
<source>CO2 unit changed</source>
<extracomment>The name of the EventType ({b0e655f8-27d0-4add-918b-461cadc8efcc}) of ThingClass datalogger</extracomment>
<translation>CO2-Einheit geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="240"/>
<source>Cash Currency changed</source>
<extracomment>The name of the EventType ({84da30c8-a7fb-49c6-884c-9521f9f62bbc}) of ThingClass datalogger</extracomment>
<translation>Bargeldwährung geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="243"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="246"/>
<source>Cash currency</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: cashcurrency, ID: {84da30c8-a7fb-49c6-884c-9521f9f62bbc})
----------
The name of the StateType ({84da30c8-a7fb-49c6-884c-9521f9f62bbc}) of ThingClass datalogger</extracomment>
<translation>Bargeldwährung</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="249"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="252"/>
<source>Cash factor</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: cashfactor, ID: {bc18595b-17c7-4a1f-8002-b908a3d9239d})
----------
The name of the StateType ({bc18595b-17c7-4a1f-8002-b908a3d9239d}) of ThingClass datalogger</extracomment>
<translation>Cash-Faktor</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="255"/>
<source>Cash factor changed</source>
<extracomment>The name of the EventType ({bc18595b-17c7-4a1f-8002-b908a3d9239d}) of ThingClass datalogger</extracomment>
<translation>Cash-Faktor geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="258"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="261"/>
<source>Cell temperature</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: cellTemperature, ID: {4417499c-1757-4309-868a-be5cf3455c4a})
----------
The name of the StateType ({4417499c-1757-4309-868a-be5cf3455c4a}) of ThingClass storage</extracomment>
<translation>Zellentemperatur</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="264"/>
<source>Cell temperature changed</source>
<extracomment>The name of the EventType ({4417499c-1757-4309-868a-be5cf3455c4a}) of ThingClass storage</extracomment>
<translation>Zellentemperatur geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="267"/>
<source>Charge state changed</source>
<extracomment>The name of the EventType ({2de34a1f-de2e-43ad-8998-8a5460dff9ae}) of ThingClass storage</extracomment>
<translation>Ladezustand geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="270"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="273"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="276"/>
<source>Charging limit</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: enableChargingLimit, ID: {1f530f79-c0d2-466b-90e1-79149e34d92f})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: enableChargingLimit, ID: {1f530f79-c0d2-466b-90e1-79149e34d92f})
----------
The name of the StateType ({1f530f79-c0d2-466b-90e1-79149e34d92f}) of ThingClass sunspecStorage</extracomment>
<translation>Ladelimit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="282"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="285"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="288"/>
<source>Charging rate</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: chargingRate, ID: {7f469bbc-64a5-4045-8d5f-9a1a85039851})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: chargingRate, ID: {7f469bbc-64a5-4045-8d5f-9a1a85039851})
----------
The name of the StateType ({7f469bbc-64a5-4045-8d5f-9a1a85039851}) of ThingClass sunspecStorage</extracomment>
<translation>Laderate</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="291"/>
<source>Charging rate changed</source>
<extracomment>The name of the EventType ({7f469bbc-64a5-4045-8d5f-9a1a85039851}) of ThingClass sunspecStorage</extracomment>
<translation>Laderate geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="294"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="297"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: connected, ID: {50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7})
----------
The name of the StateType ({50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7}) of ThingClass sunspecStorage</extracomment>
<translation>Verbunden</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="303"/>
<source>Current Power changed</source>
<extracomment>The name of the EventType ({788accbc-b86e-471b-b37f-14c9c6411526}) of ThingClass inverter</extracomment>
<translation>Aktuelle Leistung geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="306"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="309"/>
<source>Current power</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: currentPower, ID: {788accbc-b86e-471b-b37f-14c9c6411526})
----------
The name of the StateType ({788accbc-b86e-471b-b37f-14c9c6411526}) of ThingClass inverter</extracomment>
<translation>Aktuelle Leistung</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="312"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="315"/>
<source>Default language</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: defaultlang, ID: {18b250e2-080a-4991-b368-177c4da83eca})
----------
The name of the StateType ({18b250e2-080a-4991-b368-177c4da83eca}) of ThingClass datalogger</extracomment>
<translation>Standardsprache</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="318"/>
<source>Default language changed</source>
<extracomment>The name of the EventType ({18b250e2-080a-4991-b368-177c4da83eca}) of ThingClass datalogger</extracomment>
<translation>Standardsprache geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="321"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="324"/>
<source>Device ID</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {49087f31-abf5-4bb8-946b-a3626ee80566})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {cf3a7025-d368-475a-8f48-efc1344a8409})</extracomment>
<translation>Geräte ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="327"/>
<source>Device id</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {f2f8c2f5-dd6a-4786-b336-82fc84e5bb98})</extracomment>
<translation>Geräte ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="330"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="333"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="336"/>
<source>Discharging limit</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: enableDischargingLimit, ID: {bc99a159-815a-40ab-a6e8-b46f315305f7})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: enableDischargingLimit, ID: {bc99a159-815a-40ab-a6e8-b46f315305f7})
----------
The name of the StateType ({bc99a159-815a-40ab-a6e8-b46f315305f7}) of ThingClass sunspecStorage</extracomment>
<translation>Entladelimit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="342"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="345"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="348"/>
<source>Discharging rate</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: dischargingRate, ID: {6068f030-acce-44a2-b95f-bd00dd5ca760})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: dischargingRate, ID: {6068f030-acce-44a2-b95f-bd00dd5ca760})
----------
The name of the StateType ({6068f030-acce-44a2-b95f-bd00dd5ca760}) of ThingClass sunspecStorage</extracomment>
<translation>Entladerate</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="351"/>
<source>Discharging rate changed</source>
<extracomment>The name of the EventType ({6068f030-acce-44a2-b95f-bd00dd5ca760}) of ThingClass sunspecStorage</extracomment>
<translation>Entladerate geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="354"/>
<source>Enable Charging Limit</source>
<extracomment>The name of the ActionType ({1f530f79-c0d2-466b-90e1-79149e34d92f}) of ThingClass sunspecStorage</extracomment>
<translation>Aktiviere Ladelimit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="357"/>
<source>Enable Discharging Limit</source>
<extracomment>The name of the ActionType ({bc99a159-815a-40ab-a6e8-b46f315305f7}) of ThingClass sunspecStorage</extracomment>
<translation>Aktiviere Entladelimit</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="360"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="363"/>
<source>Energy Consumed</source>
<extracomment>The name of the ParamType (ThingClass: meter, EventType: totalEnergyConsumed, ID: {f3451818-48d2-42a5-94fd-ad094c06967f})
----------
The name of the StateType ({f3451818-48d2-42a5-94fd-ad094c06967f}) of ThingClass meter</extracomment>
<translation>Energie verbraucht</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="366"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="369"/>
<source>Energy Produced</source>
<extracomment>The name of the ParamType (ThingClass: meter, EventType: totalEnergyProduced, ID: {ca14cca5-d9f0-49c5-a8f7-907d4c0825f0})
----------
The name of the StateType ({ca14cca5-d9f0-49c5-a8f7-907d4c0825f0}) of ThingClass meter</extracomment>
<translation>Energie produziert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="372"/>
<source>Energy consumption changed</source>
<extracomment>The name of the EventType ({f3451818-48d2-42a5-94fd-ad094c06967f}) of ThingClass meter</extracomment>
<translation>Energieverbrauch geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="375"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="378"/>
<source>Energy of current day</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: eday, ID: {b6af1bf5-753d-47b6-a151-e4d801fe6ff8})
----------
The name of the StateType ({b6af1bf5-753d-47b6-a151-e4d801fe6ff8}) of ThingClass inverter</extracomment>
<translation>Energie dieses Tages</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="381"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="384"/>
<source>Energy of current year</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: eyear, ID: {7fd2fa28-9bcc-4f01-a823-459437d185f6})
----------
The name of the StateType ({7fd2fa28-9bcc-4f01-a823-459437d185f6}) of ThingClass inverter</extracomment>
<translation>Energie dieses Jahres</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="387"/>
<source>Energy of day changed</source>
<extracomment>The name of the EventType ({b6af1bf5-753d-47b6-a151-e4d801fe6ff8}) of ThingClass inverter</extracomment>
<translation>Energie dieses Tages geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="390"/>
<source>Energy of year changed</source>
<extracomment>The name of the EventType ({7fd2fa28-9bcc-4f01-a823-459437d185f6}) of ThingClass inverter</extracomment>
<translation>Energie dieses Jahres geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="393"/>
<source>Energy production changed</source>
<extracomment>The name of the EventType ({ca14cca5-d9f0-49c5-a8f7-907d4c0825f0}) of ThingClass meter</extracomment>
<translation>Energieproduktion geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="396"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="399"/>
<source>Energy total</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: totalEnergyProduced, ID: {d6dbb879-4cbc-4db3-830e-b92ba91a13e5})
----------
The name of the StateType ({d6dbb879-4cbc-4db3-830e-b92ba91a13e5}) of ThingClass inverter</extracomment>
<translation>Energie gesamt</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="402"/>
<source>Energy total changed</source>
<extracomment>The name of the EventType ({d6dbb879-4cbc-4db3-830e-b92ba91a13e5}) of ThingClass inverter</extracomment>
<translation>Energie gesamt geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="405"/>
<source>Fronius</source>
<extracomment>The name of the vendor ({2286fc38-afd9-4128-ab7e-0fba527d53ba})</extracomment>
<translation>Fronius</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="408"/>
<source>Fronius Smart Meter</source>
<extracomment>The name of the ThingClass ({c3cb53a4-32dd-434d-9d9c-aada41f8129c})</extracomment>
<translation>Fronius Smart Meter</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="411"/>
<source>Fronius Solar</source>
<extracomment>The name of the plugin fronius ({02319cfc-8b55-49ba-99bc-0588bbfab063})</extracomment>
<translation>Fronius Solar</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="414"/>
<source>Fronius Solar Connection</source>
<extracomment>The name of the ThingClass ({4fd79fed-42f1-4df9-be64-3df7b2e0bda2})</extracomment>
<translation>Fronius Solar Verbindung</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="417"/>
<source>Fronius Solar Inverter</source>
<extracomment>The name of the ThingClass ({540aa956-8b8f-4982-9f58-343a76cea846})</extracomment>
<translation>Fronius Solar Inverter</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="420"/>
<source>Fronius Solar Storage</source>
<extracomment>The name of the ThingClass ({b00139fa-7386-48b1-8697-2fdd21a57ced})</extracomment>
<translation>Fronius Solar Speicher</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="423"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="426"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="429"/>
<source>Grid charging</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: gridCharging, ID: {221a2ef6-0a92-4ff0-87fe-7bd920dbec0b})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: gridCharging, ID: {221a2ef6-0a92-4ff0-87fe-7bd920dbec0b})
----------
The name of the StateType ({221a2ef6-0a92-4ff0-87fe-7bd920dbec0b}) of ThingClass sunspecStorage</extracomment>
<translation>Netzaufladung</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="432"/>
<source>Grid charging changed</source>
<extracomment>The name of the EventType ({221a2ef6-0a92-4ff0-87fe-7bd920dbec0b}) of ThingClass sunspecStorage</extracomment>
<translation>Netzaufladung geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="435"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="438"/>
<source>Hardware version</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: hwversion, ID: {3b4206e5-74c7-4708-96b8-2abfab0c41d6})
----------
The name of the StateType ({3b4206e5-74c7-4708-96b8-2abfab0c41d6}) of ThingClass datalogger</extracomment>
<translation>Hardwareversion</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="441"/>
<source>Hardware version changed</source>
<extracomment>The name of the EventType ({3b4206e5-74c7-4708-96b8-2abfab0c41d6}) of ThingClass datalogger</extracomment>
<translation>Hardwareversion geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="444"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="447"/>
<source>Host address</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {1aa82e12-ee8c-4142-8b89-a4f1e85556d0})
----------
The name of the ParamType (ThingClass: datalogger, Type: thing, ID: {52da0197-4b78-4fec-aa72-70f949e26edc})</extracomment>
<translation>Adresse</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="450"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="453"/>
<source>Inverter active</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: active, ID: {e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0})
----------
The name of the StateType ({e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0}) of ThingClass inverter</extracomment>
<translation>Inverter aktiv</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="456"/>
<source>Inverter active changed</source>
<extracomment>The name of the EventType ({e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0}) of ThingClass inverter</extracomment>
<translation>Inverter aktiv geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="459"/>
<source>Manufacturer</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {9665c38b-c13a-428f-b741-1470239c63dc})</extracomment>
<translation>Hersteller</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="462"/>
<source>Maxmimum capacity</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {59a68e91-1aad-46b7-b351-03b7b2216366})</extracomment>
<translation>Maximale Kapazität</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="543"/>
<source>Set grid charging</source>
<extracomment>The name of the ActionType ({221a2ef6-0a92-4ff0-87fe-7bd920dbec0b}) of ThingClass sunspecStorage</extracomment>
<translation>Aktiviere Netzladung</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="561"/>
<source>State changed</source>
<extracomment>The name of the EventType ({da2b19c5-0f48-49d1-93f0-abdc0051407d}) of ThingClass sunspecStorage</extracomment>
<translation>Zustand geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="600"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="603"/>
<source>Unique ID</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {0d62432a-38bc-48b8-99d2-895f17fcf0b2})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {285eabb2-47c8-4406-8123-6621b21558c1})</extracomment>
<translation>Unique ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="606"/>
<source>Unique id</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {8fadc0e8-9d69-4b9d-b493-b6ac3eb59c49})</extracomment>
<translation>Unique ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="465"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="468"/>
<source>Platform ID</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: platformid, ID: {65c068e6-4a0b-4672-9724-ae95216c4c9c})
----------
The name of the StateType ({65c068e6-4a0b-4672-9724-ae95216c4c9c}) of ThingClass datalogger</extracomment>
<translation>Plattform ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="279"/>
<source>Charging limit changed</source>
<extracomment>The name of the EventType ({1f530f79-c0d2-466b-90e1-79149e34d92f}) of ThingClass sunspecStorage</extracomment>
<translation>Ladelimit geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="300"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7}) of ThingClass sunspecStorage</extracomment>
<translation>Verbunden geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="339"/>
<source>Discharging limit changed</source>
<extracomment>The name of the EventType ({bc99a159-815a-40ab-a6e8-b46f315305f7}) of ThingClass sunspecStorage</extracomment>
<translation>Entladelimit geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="471"/>
<source>Platform ID changed</source>
<extracomment>The name of the EventType ({65c068e6-4a0b-4672-9724-ae95216c4c9c}) of ThingClass datalogger</extracomment>
<translation>Plattform-ID geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="474"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="477"/>
<source>Power management relay</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: powerManagmentRelay, ID: {b217acf6-0c5e-4a3e-a50c-4c0133c871c2})
----------
The name of the StateType ({b217acf6-0c5e-4a3e-a50c-4c0133c871c2}) of ThingClass datalogger</extracomment>
<translation>Leistungsmanagement Relais</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="480"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="483"/>
<source>Power management relay reason</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: powerManagmentRelayReason, ID: {5650ce9b-0d7d-4c52-b410-ea618889b4bb})
----------
The name of the StateType ({5650ce9b-0d7d-4c52-b410-ea618889b4bb}) of ThingClass datalogger</extracomment>
<translation>Leistungsmanagement Relais Grund</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="486"/>
<source>Power management relay reason changed</source>
<extracomment>The name of the EventType ({5650ce9b-0d7d-4c52-b410-ea618889b4bb}) of ThingClass datalogger</extracomment>
<translation>Leistungsmanagement Relais Grund geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="489"/>
<source>Power management relay status changed</source>
<extracomment>The name of the EventType ({b217acf6-0c5e-4a3e-a50c-4c0133c871c2}) of ThingClass datalogger</extracomment>
<translation>Leistungsmanagement Relais Status geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="492"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="495"/>
<source>Product ID</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: productid, ID: {b22052ef-14da-43d2-982b-f2c2d8c03206})
----------
The name of the StateType ({b22052ef-14da-43d2-982b-f2c2d8c03206}) of ThingClass datalogger</extracomment>
<translation>Produkt-ID</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="498"/>
<source>Product ID changed</source>
<extracomment>The name of the EventType ({b22052ef-14da-43d2-982b-f2c2d8c03206}) of ThingClass datalogger</extracomment>
<translation>Produkt-ID geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="501"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="504"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="507"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="510"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="513"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="516"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="519"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="522"/>
<source>Reachable</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: connected, ID: {2f7e1267-b0be-4b78-9aa3-832b86c4efad})
----------
The name of the StateType ({2f7e1267-b0be-4b78-9aa3-832b86c4efad}) of ThingClass storage
----------
The name of the ParamType (ThingClass: meter, EventType: connected, ID: {b70b61a4-54cb-47ec-b62a-b498eb1f650e})
----------
The name of the StateType ({b70b61a4-54cb-47ec-b62a-b498eb1f650e}) of ThingClass meter
----------
The name of the ParamType (ThingClass: inverter, EventType: connected, ID: {eda29c50-73ac-40e0-9c92-26fee352e688})
----------
The name of the StateType ({eda29c50-73ac-40e0-9c92-26fee352e688}) of ThingClass inverter
----------
The name of the ParamType (ThingClass: datalogger, EventType: connected, ID: {98e4476f-e745-4a7f-b795-19269cb70c40})
----------
The name of the StateType ({98e4476f-e745-4a7f-b795-19269cb70c40}) of ThingClass datalogger</extracomment>
<translation>Erreichbar</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="525"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="528"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="531"/>
<source>Reachable changed</source>
<extracomment>The name of the EventType ({2f7e1267-b0be-4b78-9aa3-832b86c4efad}) of ThingClass storage
----------
The name of the EventType ({b70b61a4-54cb-47ec-b62a-b498eb1f650e}) of ThingClass meter
----------
The name of the EventType ({eda29c50-73ac-40e0-9c92-26fee352e688}) of ThingClass inverter</extracomment>
<translation>Erreichbar geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="534"/>
<source>Search new devices</source>
<extracomment>The name of the ActionType ({c217fdc1-de18-41dc-b5d8-8072f84e7b6c}) of ThingClass datalogger</extracomment>
<translation>Suche neue Geräte</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="537"/>
<source>Set charging rate</source>
<extracomment>The name of the ActionType ({7f469bbc-64a5-4045-8d5f-9a1a85039851}) of ThingClass sunspecStorage</extracomment>
<translation>Setze Laderate</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="540"/>
<source>Set discharging rate</source>
<extracomment>The name of the ActionType ({6068f030-acce-44a2-b95f-bd00dd5ca760}) of ThingClass sunspecStorage</extracomment>
<translation>Setze Entladerate</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="546"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="549"/>
<source>Software version</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: swversion, ID: {31743ca5-4353-4f26-b2ad-5da43e5b9d86})
----------
The name of the StateType ({31743ca5-4353-4f26-b2ad-5da43e5b9d86}) of ThingClass datalogger</extracomment>
<translation>Softwareversion</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="552"/>
<source>Software version changed</source>
<extracomment>The name of the EventType ({31743ca5-4353-4f26-b2ad-5da43e5b9d86}) of ThingClass datalogger</extracomment>
<translation>Softwareversion geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="555"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="558"/>
<source>State</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: storageState, ID: {da2b19c5-0f48-49d1-93f0-abdc0051407d})
----------
The name of the StateType ({da2b19c5-0f48-49d1-93f0-abdc0051407d}) of ThingClass sunspecStorage</extracomment>
<translation>Status</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="564"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="567"/>
<source>State of charge</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: charging, ID: {2de34a1f-de2e-43ad-8998-8a5460dff9ae})
----------
The name of the StateType ({2de34a1f-de2e-43ad-8998-8a5460dff9ae}) of ThingClass storage</extracomment>
<translation>Ladezustand</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="570"/>
<source>SunSpec Storage</source>
<extracomment>The name of the ThingClass ({e14d622f-5d8f-4788-b189-0774a6382a9b})</extracomment>
<translation>SunSpec Speicher</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="573"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="576"/>
<source>Time zone</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: tzone, ID: {6bdfeeda-7a47-4043-a011-5eb96308a7d6})
----------
The name of the StateType ({6bdfeeda-7a47-4043-a011-5eb96308a7d6}) of ThingClass datalogger</extracomment>
<translation>Zeitzone</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="579"/>
<source>Time zone changed</source>
<extracomment>The name of the EventType ({6bdfeeda-7a47-4043-a011-5eb96308a7d6}) of ThingClass datalogger</extracomment>
<translation>Zeitzone geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="582"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="585"/>
<source>Timezone location</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: tzoneloc, ID: {d034f59d-dc34-450a-a6f3-68264767a3e4})
----------
The name of the StateType ({d034f59d-dc34-450a-a6f3-68264767a3e4}) of ThingClass datalogger</extracomment>
<translation>Zeitzone Ort</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="588"/>
<source>Timezone location changed</source>
<extracomment>The name of the EventType ({d034f59d-dc34-450a-a6f3-68264767a3e4}) of ThingClass datalogger</extracomment>
<translation>Zeitzone Ort geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="591"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="594"/>
<source>Total current power</source>
<extracomment>The name of the ParamType (ThingClass: meter, EventType: currentPower, ID: {e5056ea1-88a2-410b-9c5e-6322aca4cb17})
----------
The name of the StateType ({e5056ea1-88a2-410b-9c5e-6322aca4cb17}) of ThingClass meter</extracomment>
<translation>Gesamte Momentanleistung</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="597"/>
<source>Total current power changed</source>
<extracomment>The name of the EventType ({e5056ea1-88a2-410b-9c5e-6322aca4cb17}) of ThingClass meter</extracomment>
<translation>Gesamte Momentanleistung geändert</translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="609"/>
<source>logger reachable changed</source>
<extracomment>The name of the EventType ({98e4476f-e745-4a7f-b795-19269cb70c40}) of ThingClass datalogger</extracomment>
<translation>Logger erriechbar geändert</translation>
</message>
</context>
</TS>

View File

@ -0,0 +1,741 @@
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE TS>
<TS version="2.1">
<context>
<name>IntegrationPluginFronius</name>
<message>
<location filename="../integrationpluginfronius.cpp" line="80"/>
<source>Device not reachable</source>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../integrationpluginfronius.cpp" line="89"/>
<location filename="../integrationpluginfronius.cpp" line="183"/>
<source>Please try again</source>
<translation type="unfinished"></translation>
</message>
</context>
<context>
<name>fronius</name>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="168"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="171"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="174"/>
<source>Address</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {830a3cc6-ae0a-4cc3-94d6-86575e410e49})
----------
The name of the ParamType (ThingClass: storage, Type: thing, ID: {84bd8a41-2411-4bb0-87a9-ab7e01044b10})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {ddcb8689-b0b8-4b94-b022-4ce4cf9e0ec2})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="177"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="180"/>
<source>Base URL</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {d19b5d81-4e62-48be-bad6-287b0019274a})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {2cb4acd6-a663-48c3-8366-ab538c7b4e7d})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="183"/>
<source>Base url</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {ec1f792a-b453-49f0-8ea6-677ad3c25a5c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="186"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="189"/>
<source>Battery critical</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: batteryCritical, ID: {3171a6e0-43a7-4de8-8e20-f748e44af7ac})
----------
The name of the StateType ({3171a6e0-43a7-4de8-8e20-f748e44af7ac}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="192"/>
<source>Battery critical changed</source>
<extracomment>The name of the EventType ({3171a6e0-43a7-4de8-8e20-f748e44af7ac}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="195"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="198"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="201"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="204"/>
<source>Battery level</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: batteryLevel, ID: {0bf53f80-97f8-488b-b514-58f9fe08c183})
----------
The name of the StateType ({0bf53f80-97f8-488b-b514-58f9fe08c183}) of ThingClass sunspecStorage
----------
The name of the ParamType (ThingClass: storage, EventType: batteryLevel, ID: {5c6da672-9662-41bc-8c8c-aa0f32481251})
----------
The name of the StateType ({5c6da672-9662-41bc-8c8c-aa0f32481251}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="207"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="210"/>
<source>Battery level changed</source>
<extracomment>The name of the EventType ({0bf53f80-97f8-488b-b514-58f9fe08c183}) of ThingClass sunspecStorage
----------
The name of the EventType ({5c6da672-9662-41bc-8c8c-aa0f32481251}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="213"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="216"/>
<source>Battery level critical</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: batteryCritical, ID: {e5396312-b50e-4d6f-b628-5b51448971d3})
----------
The name of the StateType ({e5396312-b50e-4d6f-b628-5b51448971d3}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="219"/>
<source>Battery level critical changed</source>
<extracomment>The name of the EventType ({e5396312-b50e-4d6f-b628-5b51448971d3}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="222"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="225"/>
<source>CO2 factor</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: co2factor, ID: {8ab01225-7be5-4482-a99b-314108ae0e2b})
----------
The name of the StateType ({8ab01225-7be5-4482-a99b-314108ae0e2b}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="228"/>
<source>CO2 factor changed</source>
<extracomment>The name of the EventType ({8ab01225-7be5-4482-a99b-314108ae0e2b}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="231"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="234"/>
<source>CO2 unit</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: co2unit, ID: {b0e655f8-27d0-4add-918b-461cadc8efcc})
----------
The name of the StateType ({b0e655f8-27d0-4add-918b-461cadc8efcc}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="237"/>
<source>CO2 unit changed</source>
<extracomment>The name of the EventType ({b0e655f8-27d0-4add-918b-461cadc8efcc}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="240"/>
<source>Cash Currency changed</source>
<extracomment>The name of the EventType ({84da30c8-a7fb-49c6-884c-9521f9f62bbc}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="243"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="246"/>
<source>Cash currency</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: cashcurrency, ID: {84da30c8-a7fb-49c6-884c-9521f9f62bbc})
----------
The name of the StateType ({84da30c8-a7fb-49c6-884c-9521f9f62bbc}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="249"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="252"/>
<source>Cash factor</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: cashfactor, ID: {bc18595b-17c7-4a1f-8002-b908a3d9239d})
----------
The name of the StateType ({bc18595b-17c7-4a1f-8002-b908a3d9239d}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="255"/>
<source>Cash factor changed</source>
<extracomment>The name of the EventType ({bc18595b-17c7-4a1f-8002-b908a3d9239d}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="258"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="261"/>
<source>Cell temperature</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: cellTemperature, ID: {4417499c-1757-4309-868a-be5cf3455c4a})
----------
The name of the StateType ({4417499c-1757-4309-868a-be5cf3455c4a}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="264"/>
<source>Cell temperature changed</source>
<extracomment>The name of the EventType ({4417499c-1757-4309-868a-be5cf3455c4a}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="267"/>
<source>Charge state changed</source>
<extracomment>The name of the EventType ({2de34a1f-de2e-43ad-8998-8a5460dff9ae}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="270"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="273"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="276"/>
<source>Charging limit</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: enableChargingLimit, ID: {1f530f79-c0d2-466b-90e1-79149e34d92f})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: enableChargingLimit, ID: {1f530f79-c0d2-466b-90e1-79149e34d92f})
----------
The name of the StateType ({1f530f79-c0d2-466b-90e1-79149e34d92f}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="282"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="285"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="288"/>
<source>Charging rate</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: chargingRate, ID: {7f469bbc-64a5-4045-8d5f-9a1a85039851})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: chargingRate, ID: {7f469bbc-64a5-4045-8d5f-9a1a85039851})
----------
The name of the StateType ({7f469bbc-64a5-4045-8d5f-9a1a85039851}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="291"/>
<source>Charging rate changed</source>
<extracomment>The name of the EventType ({7f469bbc-64a5-4045-8d5f-9a1a85039851}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="294"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="297"/>
<source>Connected</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: connected, ID: {50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7})
----------
The name of the StateType ({50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="303"/>
<source>Current Power changed</source>
<extracomment>The name of the EventType ({788accbc-b86e-471b-b37f-14c9c6411526}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="306"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="309"/>
<source>Current power</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: currentPower, ID: {788accbc-b86e-471b-b37f-14c9c6411526})
----------
The name of the StateType ({788accbc-b86e-471b-b37f-14c9c6411526}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="312"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="315"/>
<source>Default language</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: defaultlang, ID: {18b250e2-080a-4991-b368-177c4da83eca})
----------
The name of the StateType ({18b250e2-080a-4991-b368-177c4da83eca}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="318"/>
<source>Default language changed</source>
<extracomment>The name of the EventType ({18b250e2-080a-4991-b368-177c4da83eca}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="321"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="324"/>
<source>Device ID</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {49087f31-abf5-4bb8-946b-a3626ee80566})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {cf3a7025-d368-475a-8f48-efc1344a8409})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="327"/>
<source>Device id</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {f2f8c2f5-dd6a-4786-b336-82fc84e5bb98})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="330"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="333"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="336"/>
<source>Discharging limit</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: enableDischargingLimit, ID: {bc99a159-815a-40ab-a6e8-b46f315305f7})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: enableDischargingLimit, ID: {bc99a159-815a-40ab-a6e8-b46f315305f7})
----------
The name of the StateType ({bc99a159-815a-40ab-a6e8-b46f315305f7}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="342"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="345"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="348"/>
<source>Discharging rate</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: dischargingRate, ID: {6068f030-acce-44a2-b95f-bd00dd5ca760})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: dischargingRate, ID: {6068f030-acce-44a2-b95f-bd00dd5ca760})
----------
The name of the StateType ({6068f030-acce-44a2-b95f-bd00dd5ca760}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="351"/>
<source>Discharging rate changed</source>
<extracomment>The name of the EventType ({6068f030-acce-44a2-b95f-bd00dd5ca760}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="354"/>
<source>Enable Charging Limit</source>
<extracomment>The name of the ActionType ({1f530f79-c0d2-466b-90e1-79149e34d92f}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="357"/>
<source>Enable Discharging Limit</source>
<extracomment>The name of the ActionType ({bc99a159-815a-40ab-a6e8-b46f315305f7}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="360"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="363"/>
<source>Energy Consumed</source>
<extracomment>The name of the ParamType (ThingClass: meter, EventType: totalEnergyConsumed, ID: {f3451818-48d2-42a5-94fd-ad094c06967f})
----------
The name of the StateType ({f3451818-48d2-42a5-94fd-ad094c06967f}) of ThingClass meter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="366"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="369"/>
<source>Energy Produced</source>
<extracomment>The name of the ParamType (ThingClass: meter, EventType: totalEnergyProduced, ID: {ca14cca5-d9f0-49c5-a8f7-907d4c0825f0})
----------
The name of the StateType ({ca14cca5-d9f0-49c5-a8f7-907d4c0825f0}) of ThingClass meter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="372"/>
<source>Energy consumption changed</source>
<extracomment>The name of the EventType ({f3451818-48d2-42a5-94fd-ad094c06967f}) of ThingClass meter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="375"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="378"/>
<source>Energy of current day</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: eday, ID: {b6af1bf5-753d-47b6-a151-e4d801fe6ff8})
----------
The name of the StateType ({b6af1bf5-753d-47b6-a151-e4d801fe6ff8}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="381"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="384"/>
<source>Energy of current year</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: eyear, ID: {7fd2fa28-9bcc-4f01-a823-459437d185f6})
----------
The name of the StateType ({7fd2fa28-9bcc-4f01-a823-459437d185f6}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="387"/>
<source>Energy of day changed</source>
<extracomment>The name of the EventType ({b6af1bf5-753d-47b6-a151-e4d801fe6ff8}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="390"/>
<source>Energy of year changed</source>
<extracomment>The name of the EventType ({7fd2fa28-9bcc-4f01-a823-459437d185f6}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="393"/>
<source>Energy production changed</source>
<extracomment>The name of the EventType ({ca14cca5-d9f0-49c5-a8f7-907d4c0825f0}) of ThingClass meter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="396"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="399"/>
<source>Energy total</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: totalEnergyProduced, ID: {d6dbb879-4cbc-4db3-830e-b92ba91a13e5})
----------
The name of the StateType ({d6dbb879-4cbc-4db3-830e-b92ba91a13e5}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="402"/>
<source>Energy total changed</source>
<extracomment>The name of the EventType ({d6dbb879-4cbc-4db3-830e-b92ba91a13e5}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="405"/>
<source>Fronius</source>
<extracomment>The name of the vendor ({2286fc38-afd9-4128-ab7e-0fba527d53ba})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="408"/>
<source>Fronius Smart Meter</source>
<extracomment>The name of the ThingClass ({c3cb53a4-32dd-434d-9d9c-aada41f8129c})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="411"/>
<source>Fronius Solar</source>
<extracomment>The name of the plugin fronius ({02319cfc-8b55-49ba-99bc-0588bbfab063})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="414"/>
<source>Fronius Solar Connection</source>
<extracomment>The name of the ThingClass ({4fd79fed-42f1-4df9-be64-3df7b2e0bda2})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="417"/>
<source>Fronius Solar Inverter</source>
<extracomment>The name of the ThingClass ({540aa956-8b8f-4982-9f58-343a76cea846})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="420"/>
<source>Fronius Solar Storage</source>
<extracomment>The name of the ThingClass ({b00139fa-7386-48b1-8697-2fdd21a57ced})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="423"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="426"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="429"/>
<source>Grid charging</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: gridCharging, ID: {221a2ef6-0a92-4ff0-87fe-7bd920dbec0b})
----------
The name of the ParamType (ThingClass: sunspecStorage, EventType: gridCharging, ID: {221a2ef6-0a92-4ff0-87fe-7bd920dbec0b})
----------
The name of the StateType ({221a2ef6-0a92-4ff0-87fe-7bd920dbec0b}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="432"/>
<source>Grid charging changed</source>
<extracomment>The name of the EventType ({221a2ef6-0a92-4ff0-87fe-7bd920dbec0b}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="435"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="438"/>
<source>Hardware version</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: hwversion, ID: {3b4206e5-74c7-4708-96b8-2abfab0c41d6})
----------
The name of the StateType ({3b4206e5-74c7-4708-96b8-2abfab0c41d6}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="441"/>
<source>Hardware version changed</source>
<extracomment>The name of the EventType ({3b4206e5-74c7-4708-96b8-2abfab0c41d6}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="444"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="447"/>
<source>Host address</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {1aa82e12-ee8c-4142-8b89-a4f1e85556d0})
----------
The name of the ParamType (ThingClass: datalogger, Type: thing, ID: {52da0197-4b78-4fec-aa72-70f949e26edc})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="450"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="453"/>
<source>Inverter active</source>
<extracomment>The name of the ParamType (ThingClass: inverter, EventType: active, ID: {e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0})
----------
The name of the StateType ({e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="456"/>
<source>Inverter active changed</source>
<extracomment>The name of the EventType ({e763baa7-5eaf-438c-83f0-4fa6c0f7eeb0}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="459"/>
<source>Manufacturer</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {9665c38b-c13a-428f-b741-1470239c63dc})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="462"/>
<source>Maxmimum capacity</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {59a68e91-1aad-46b7-b351-03b7b2216366})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="543"/>
<source>Set grid charging</source>
<extracomment>The name of the ActionType ({221a2ef6-0a92-4ff0-87fe-7bd920dbec0b}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="561"/>
<source>State changed</source>
<extracomment>The name of the EventType ({da2b19c5-0f48-49d1-93f0-abdc0051407d}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="600"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="603"/>
<source>Unique ID</source>
<extracomment>The name of the ParamType (ThingClass: storage, Type: thing, ID: {0d62432a-38bc-48b8-99d2-895f17fcf0b2})
----------
The name of the ParamType (ThingClass: meter, Type: thing, ID: {285eabb2-47c8-4406-8123-6621b21558c1})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="606"/>
<source>Unique id</source>
<extracomment>The name of the ParamType (ThingClass: inverter, Type: thing, ID: {8fadc0e8-9d69-4b9d-b493-b6ac3eb59c49})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="465"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="468"/>
<source>Platform ID</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: platformid, ID: {65c068e6-4a0b-4672-9724-ae95216c4c9c})
----------
The name of the StateType ({65c068e6-4a0b-4672-9724-ae95216c4c9c}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="279"/>
<source>Charging limit changed</source>
<extracomment>The name of the EventType ({1f530f79-c0d2-466b-90e1-79149e34d92f}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="300"/>
<source>Connected changed</source>
<extracomment>The name of the EventType ({50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="339"/>
<source>Discharging limit changed</source>
<extracomment>The name of the EventType ({bc99a159-815a-40ab-a6e8-b46f315305f7}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="471"/>
<source>Platform ID changed</source>
<extracomment>The name of the EventType ({65c068e6-4a0b-4672-9724-ae95216c4c9c}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="474"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="477"/>
<source>Power management relay</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: powerManagmentRelay, ID: {b217acf6-0c5e-4a3e-a50c-4c0133c871c2})
----------
The name of the StateType ({b217acf6-0c5e-4a3e-a50c-4c0133c871c2}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="480"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="483"/>
<source>Power management relay reason</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: powerManagmentRelayReason, ID: {5650ce9b-0d7d-4c52-b410-ea618889b4bb})
----------
The name of the StateType ({5650ce9b-0d7d-4c52-b410-ea618889b4bb}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="486"/>
<source>Power management relay reason changed</source>
<extracomment>The name of the EventType ({5650ce9b-0d7d-4c52-b410-ea618889b4bb}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="489"/>
<source>Power management relay status changed</source>
<extracomment>The name of the EventType ({b217acf6-0c5e-4a3e-a50c-4c0133c871c2}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="492"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="495"/>
<source>Product ID</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: productid, ID: {b22052ef-14da-43d2-982b-f2c2d8c03206})
----------
The name of the StateType ({b22052ef-14da-43d2-982b-f2c2d8c03206}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="498"/>
<source>Product ID changed</source>
<extracomment>The name of the EventType ({b22052ef-14da-43d2-982b-f2c2d8c03206}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="501"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="504"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="507"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="510"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="513"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="516"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="519"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="522"/>
<source>Reachable</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: connected, ID: {2f7e1267-b0be-4b78-9aa3-832b86c4efad})
----------
The name of the StateType ({2f7e1267-b0be-4b78-9aa3-832b86c4efad}) of ThingClass storage
----------
The name of the ParamType (ThingClass: meter, EventType: connected, ID: {b70b61a4-54cb-47ec-b62a-b498eb1f650e})
----------
The name of the StateType ({b70b61a4-54cb-47ec-b62a-b498eb1f650e}) of ThingClass meter
----------
The name of the ParamType (ThingClass: inverter, EventType: connected, ID: {eda29c50-73ac-40e0-9c92-26fee352e688})
----------
The name of the StateType ({eda29c50-73ac-40e0-9c92-26fee352e688}) of ThingClass inverter
----------
The name of the ParamType (ThingClass: datalogger, EventType: connected, ID: {98e4476f-e745-4a7f-b795-19269cb70c40})
----------
The name of the StateType ({98e4476f-e745-4a7f-b795-19269cb70c40}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="525"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="528"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="531"/>
<source>Reachable changed</source>
<extracomment>The name of the EventType ({2f7e1267-b0be-4b78-9aa3-832b86c4efad}) of ThingClass storage
----------
The name of the EventType ({b70b61a4-54cb-47ec-b62a-b498eb1f650e}) of ThingClass meter
----------
The name of the EventType ({eda29c50-73ac-40e0-9c92-26fee352e688}) of ThingClass inverter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="534"/>
<source>Search new devices</source>
<extracomment>The name of the ActionType ({c217fdc1-de18-41dc-b5d8-8072f84e7b6c}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="537"/>
<source>Set charging rate</source>
<extracomment>The name of the ActionType ({7f469bbc-64a5-4045-8d5f-9a1a85039851}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="540"/>
<source>Set discharging rate</source>
<extracomment>The name of the ActionType ({6068f030-acce-44a2-b95f-bd00dd5ca760}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="546"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="549"/>
<source>Software version</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: swversion, ID: {31743ca5-4353-4f26-b2ad-5da43e5b9d86})
----------
The name of the StateType ({31743ca5-4353-4f26-b2ad-5da43e5b9d86}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="552"/>
<source>Software version changed</source>
<extracomment>The name of the EventType ({31743ca5-4353-4f26-b2ad-5da43e5b9d86}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="555"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="558"/>
<source>State</source>
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, EventType: storageState, ID: {da2b19c5-0f48-49d1-93f0-abdc0051407d})
----------
The name of the StateType ({da2b19c5-0f48-49d1-93f0-abdc0051407d}) of ThingClass sunspecStorage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="564"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="567"/>
<source>State of charge</source>
<extracomment>The name of the ParamType (ThingClass: storage, EventType: charging, ID: {2de34a1f-de2e-43ad-8998-8a5460dff9ae})
----------
The name of the StateType ({2de34a1f-de2e-43ad-8998-8a5460dff9ae}) of ThingClass storage</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="570"/>
<source>SunSpec Storage</source>
<extracomment>The name of the ThingClass ({e14d622f-5d8f-4788-b189-0774a6382a9b})</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="573"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="576"/>
<source>Time zone</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: tzone, ID: {6bdfeeda-7a47-4043-a011-5eb96308a7d6})
----------
The name of the StateType ({6bdfeeda-7a47-4043-a011-5eb96308a7d6}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="579"/>
<source>Time zone changed</source>
<extracomment>The name of the EventType ({6bdfeeda-7a47-4043-a011-5eb96308a7d6}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="582"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="585"/>
<source>Timezone location</source>
<extracomment>The name of the ParamType (ThingClass: datalogger, EventType: tzoneloc, ID: {d034f59d-dc34-450a-a6f3-68264767a3e4})
----------
The name of the StateType ({d034f59d-dc34-450a-a6f3-68264767a3e4}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="588"/>
<source>Timezone location changed</source>
<extracomment>The name of the EventType ({d034f59d-dc34-450a-a6f3-68264767a3e4}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="591"/>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="594"/>
<source>Total current power</source>
<extracomment>The name of the ParamType (ThingClass: meter, EventType: currentPower, ID: {e5056ea1-88a2-410b-9c5e-6322aca4cb17})
----------
The name of the StateType ({e5056ea1-88a2-410b-9c5e-6322aca4cb17}) of ThingClass meter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="597"/>
<source>Total current power changed</source>
<extracomment>The name of the EventType ({e5056ea1-88a2-410b-9c5e-6322aca4cb17}) of ThingClass meter</extracomment>
<translation type="unfinished"></translation>
</message>
<message>
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/fronius/plugininfo.h" line="609"/>
<source>logger reachable changed</source>
<extracomment>The name of the EventType ({98e4476f-e745-4a7f-b795-19269cb70c40}) of ThingClass datalogger</extracomment>
<translation type="unfinished"></translation>
</message>
</context>
</TS>

View File

@ -19,6 +19,7 @@ PLUGIN_DIRS = \
elgato \
eq-3 \
flowercare \
fronius \
genericelements \
genericthings \
gpio \