removed fronius plug-in

This commit is contained in:
bernhard.trinnes 2020-09-08 08:57:02 +02:00
parent 4c5879f378
commit 0bb1782f0b
24 changed files with 0 additions and 4151 deletions

16
debian/control vendored
View File

@ -31,22 +31,6 @@ Description: nymea.io plugin for Drexel & Weiss heat pumps
This package will install the nymea.io plugin for Drexel & Weiss heat pumps
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-modbuscommander
Architecture: any
Multi-Arch: same

View File

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

View File

@ -1,18 +0,0 @@
# 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

Binary file not shown.

Before

Width:  |  Height:  |  Size: 24 KiB

View File

@ -1,25 +0,0 @@
include(../plugins.pri)
QT += \
serialbus \
network \
SOURCES += \
integrationpluginfronius.cpp \
froniusthing.cpp \
froniuslogger.cpp \
froniusinverter.cpp \
froniusstorage.cpp \
froniusmeter.cpp \
sunspecthing.cpp \
../modbus/modbustcpmaster.cpp \
HEADERS += \
integrationpluginfronius.h \
froniusthing.h \
froniuslogger.h \
froniusinverter.h \
froniusstorage.h \
froniusmeter.h \
sunspecthing.h \
../modbus/modbustcpmaster.h \

View File

@ -1,135 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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");
}
}

View File

@ -1,56 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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

View File

@ -1,145 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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);
}

View File

@ -1,53 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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

View File

@ -1,127 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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");
//}
}

View File

@ -1,55 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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

View File

@ -1,138 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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");
}
}

View File

@ -1,60 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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

View File

@ -1,102 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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;
}

View File

@ -1,82 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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

@ -1,582 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 "integrationpluginfronius.h"
#include "plugintimer.h"
#include "network/networkaccessmanager.h"
#include <QUrl>
#include <QUrlQuery>
#include <QJsonDocument>
#include <QPointer>
#include "plugininfo.h"
#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 if (thing->thingClassId() == sunspecStorageThingClassId) {
SunspecThing *sunspecThings = new SunspecThing(thing, this);
m_sunspecThings.insert(sunspecThings, thing);
info->finish(Thing::ThingErrorNoError);
} 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);
foreach (SunspecThing *sunspecThing, m_sunspecThings.keys())
sunspecThing->update();
});
}
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 if (thing->thingClassId() == sunspecStorageThingClassId) {
SunspecThing *sunspecThing = m_sunspecThings.key(thing);
sunspecThing->update();
} 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 if (thing->thingClassId() == sunspecStorageThingClassId) {
qCDebug(dcFronius()) << "Remove sunspec thing";
SunspecThing *sunspecThing = m_sunspecThings.key(thing);
m_sunspecThings.remove(sunspecThing);
delete sunspecThing;
qCDebug(dcFronius()) << "Sunspec thing deleted";
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 if (thing->thingClassId() == sunspecStorageThingClassId) {
SunspecThing *sunspecThing = m_sunspecThings.key(thing);
if (!sunspecThing) {
qWarning(dcFronius()) << "Could not find sunspec instance for thing";
info->finish(Thing::ThingErrorHardwareNotAvailable);
return;
}
if (action.actionTypeId() == sunspecStorageGridChargingActionTypeId) {
QUuid requestId = sunspecThing->setGridCharging(action.param(sunspecStorageGridChargingActionGridChargingParamTypeId).value().toBool());
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
} else {
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this] {m_asyncActions.remove(requestId);});
}
} else if (action.actionTypeId() == sunspecStorageEnableChargingLimitActionTypeId) {
int value = (action.param(sunspecStorageEnableChargingLimitActionEnableChargingLimitParamTypeId).value().toBool() << 1) | thing->stateValue(sunspecStorageEnableDischargingLimitStateTypeId).toBool();
QUuid requestId = sunspecThing->setStorageControlMode(value);
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
} else {
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this] {m_asyncActions.remove(requestId);});
}
} else if (action.actionTypeId() == sunspecStorageChargingRateActionTypeId) {
QUuid requestId = sunspecThing->setChargingRate(action.param(sunspecStorageChargingRateActionChargingRateParamTypeId).value().toInt());
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
} else {
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this] {m_asyncActions.remove(requestId);});
}
} else if (action.actionTypeId() == sunspecStorageEnableDischargingLimitActionTypeId) {
int value = (action.param(sunspecStorageEnableDischargingLimitActionEnableDischargingLimitParamTypeId).value().toBool() << 1) | thing->stateValue(sunspecStorageEnableChargingLimitStateTypeId).toBool();
QUuid requestId = sunspecThing->setStorageControlMode(value);
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
} else {
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this] {m_asyncActions.remove(requestId);});
}
} else if (action.actionTypeId() == sunspecStorageDischargingRateActionTypeId) {
QUuid requestId = sunspecThing->setDischargingRate(action.param(sunspecStorageDischargingRateActionDischargingRateParamTypeId).value().toInt());
if (requestId.isNull()) {
info->finish(Thing::ThingErrorHardwareFailure);
} else {
m_asyncActions.insert(requestId, info);
connect(info, &ThingActionInfo::aborted, this, [requestId, this] {m_asyncActions.remove(requestId);});
}
} 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

@ -1,76 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 "sunspecthing.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<SunspecThing *, Thing *> m_sunspecThings;
QHash<QUuid, ThingActionInfo *> m_asyncActions;
void updateThingStates(Thing *thing);
void searchNewThings(FroniusLogger *logger);
bool existingThing(ParamTypeId thingParamId, QString thingId);
};
#endif // INTEGRATIONPLUGINFRONIUS_H

View File

@ -1,533 +0,0 @@
{
"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
}
]
},
{
"id": "e14d622f-5d8f-4788-b189-0774a6382a9b",
"name": "sunspecStorage",
"displayName": "SunSpec Storage",
"createMethods": ["user"],
"interfaces": ["batterylevel", "connectable" ],
"paramTypes": [
{
"id": "830a3cc6-ae0a-4cc3-94d6-86575e410e49",
"name": "modbusHost",
"displayName": "Address",
"type": "QString",
"inputType": "IPv4Address",
"defaultValue": "88.117.152.99"
}
],
"stateTypes": [
{
"id": "50ed3a6f-6ad3-445f-950b-eb6d1b7e7ef7",
"name": "connected",
"displayName": "Connected",
"displayNameEvent": "Connected changed",
"type": "bool",
"defaultValue": false
},
{
"id": "3171a6e0-43a7-4de8-8e20-f748e44af7ac",
"name": "batteryCritical",
"displayName": "Battery critical",
"displayNameEvent": "Battery critical changed",
"type": "bool",
"defaultValue": false
},
{
"id": "0bf53f80-97f8-488b-b514-58f9fe08c183",
"name": "batteryLevel",
"displayName": "Battery level",
"displayNameEvent": "Battery level changed",
"type": "int",
"unit": "Percentage",
"minValue": 0,
"maxValue": 100,
"defaultValue": 0
},
{
"id": "da2b19c5-0f48-49d1-93f0-abdc0051407d",
"name": "storageState",
"displayName": "State",
"displayNameEvent": "State changed",
"type": "QString",
"possibleValues": [
"Off",
"Empty",
"Discharging",
"Charging",
"Full",
"Holding",
"Testing"
],
"defaultValue": "Off"
},
{
"id": "221a2ef6-0a92-4ff0-87fe-7bd920dbec0b",
"name": "gridCharging",
"displayName": "Grid charging",
"displayNameEvent": "Grid charging changed",
"type": "bool",
"defaultValue": false,
"writable": true,
"displayNameAction": "Set grid charging"
},
{
"id": "1f530f79-c0d2-466b-90e1-79149e34d92f",
"name": "enableChargingLimit",
"displayName": "Charging limit",
"displayNameEvent": "Charging limit changed",
"type": "bool",
"defaultValue": false,
"writable": true,
"displayNameAction": "Enable Charging Limit"
},
{
"id": "7f469bbc-64a5-4045-8d5f-9a1a85039851",
"name": "chargingRate",
"displayName": "Charging rate",
"displayNameEvent": "Charging rate changed",
"type": "int",
"minValue": -100,
"maxValue": 100,
"unit": "Percentage",
"defaultValue": false,
"writable": true,
"displayNameAction": "Set charging rate"
},
{
"id": "bc99a159-815a-40ab-a6e8-b46f315305f7",
"name": "enableDischargingLimit",
"displayName": "Discharging limit",
"displayNameEvent": "Discharging limit changed",
"displayNameAction": "Enable Discharging Limit",
"type": "bool",
"defaultValue": false,
"writable": true
},
{
"id": "6068f030-acce-44a2-b95f-bd00dd5ca760",
"name": "dischargingRate",
"displayName": "Discharging rate",
"displayNameEvent": "Discharging rate changed",
"type": "int",
"minValue": -100,
"maxValue": 100,
"unit": "Percentage",
"defaultValue": false,
"writable": true,
"displayNameAction": "Set discharging rate"
}
]
}
]
}
]
}

View File

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

View File

@ -1,353 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 <QMetaObject>
#include <QMetaEnum>
#include "sunspecthing.h"
#include "extern-plugininfo.h"
SunspecThing::SunspecThing(Thing *thing, QObject *parent) :
QObject(parent),
m_thing(thing)
{
}
SunspecThing::~SunspecThing()
{
}
void SunspecThing::readCommonBlock()
{
if (!m_modbusTcpMaster)
return;
int address = 40001 - 1;
// Read common block
m_modbusTcpMaster->readHoldingRegister(m_slaveId, address, 70);
}
void SunspecThing::readStorageBlock()
{
if (!m_modbusTcpMaster)
return;
int address;
if (m_floatingPointRepresentation) {
address = 40313;
} else {
address = 40303;
}
/* Startadresse:
- bei Einstellung float: 40313
- bei Einstellung int+SF: 40303
*/
m_modbusTcpMaster->readHoldingRegister(m_slaveId, address, 26);
}
QByteArray SunspecThing::convertModbusRegister(const uint16_t &modbusData)
{
uint8_t data[2];
data[0] = modbusData >> 8;
data[1] = modbusData & 0xFF;
//qCDebug(dcFronius()) << (char)data[0] << (char)data[1];
return QByteArray().append((char)data[0]).append((char)data[1]);
}
QBitArray SunspecThing::convertModbusRegisterBits(const uint16_t &modbusData)
{
QByteArray data = convertModbusRegister(modbusData);
QBitArray bits(data.count() * 8);
// Convert from QByteArray to QBitArray
for(int i = 0; i < data.count(); ++i) {
for(int b = 0; b < 8; b++) {
bits.setBit(i * 8 + b, data.at(i) & (1 << ( 7 - b)));
}
}
return bits;
}
QByteArray SunspecThing::convertModbusRegisters(const QVector<quint16> &modbusData, int offset, int size)
{
QByteArray bytes;
for (int i = offset; i < offset + size; i++)
bytes.append(convertModbusRegister(modbusData[i]));
return bytes;
}
QString SunspecThing::storageStateToString(const SunspecThing::StorageState &state)
{
QMetaObject metaObject ;
metaObject= SunspecThing::staticMetaObject;
QMetaEnum metaEnum = metaObject.enumerator(metaObject.indexOfEnumerator("StorageState" ) );
return QString(metaEnum.valueToKey(state));
}
bool SunspecThing::connectModbus()
{
if (m_thing->paramValue(sunspecStorageThingModbusHostParamTypeId).toString().isEmpty()) {
qCWarning(dcFronius()) << "Empty ip address";
return false;
}
m_modbusTcpMaster = new ModbusTCPMaster(QHostAddress(m_thing->paramValue(sunspecStorageThingModbusHostParamTypeId).toString()), 502, this);
connect(m_modbusTcpMaster, &ModbusTCPMaster::connectionStateChanged, this, &SunspecThing::connectionStateChanged);
connect(m_modbusTcpMaster, &ModbusTCPMaster::writeRequestExecuted, this, &SunspecThing::requestExecuted);
connect(m_modbusTcpMaster, &ModbusTCPMaster::receivedHoldingRegister, this, &SunspecThing::onReceivedHoldingRegister);
m_modbusTcpMaster->setTimeout(3 * 1000); // 3 seconds
m_modbusTcpMaster->setNumberOfRetries(3);
qCDebug(dcFronius()) << "Connected successfully" << m_thing->paramValue(sunspecStorageThingModbusHostParamTypeId).toString();
readCommonBlock();
return true;
}
QUuid SunspecThing::setGridCharging(const bool &charging)
{
if (!m_modbusTcpMaster) {
return "";
}
/* Start address:
- for float setting: 40313
- for int+SF setting: 40303 */
// 40313 + Offset 18 - 1
// Name ChaGriSet
/* Setpoint to enable/dis-
able charging from grid
PV (charging from grid 0 disabled)
GRID (charging from 1 grid enabled*/
int registerAddress;
if (m_floatingPointRepresentation) {
registerAddress = 40313 + 18 - 1;
} else {
registerAddress = 40303 + 18 - 1;
}
quint16 value = charging;
return m_modbusTcpMaster->writeHoldingRegister(m_slaveId, registerAddress, value);
}
QUuid SunspecThing::setChargingRate(const int &charging)
{
// 40313 + Offset 14 - 1
//Register Name InWRte
/* Defines the maximum charge rate (charge limit). Default is 100% */
if (!m_modbusTcpMaster) {
return "";
}
int registerAddress;
if (m_floatingPointRepresentation) {
registerAddress = 40313 + 14 - 1;
} else {
registerAddress = 40303 + 14 - 1;
}
int16_t value = charging * 100;
return m_modbusTcpMaster->writeHoldingRegister(m_slaveId, registerAddress, value);
}
QUuid SunspecThing::setStorageControlMode(const int &charging)
{
// 40313 + Offset 6 - 1
// Set charge bit to enable charge limit, set discharge bit to enable discharge limit, set both bits to enable both limits
if (!m_modbusTcpMaster) {
return "";
}
int registerAddress;
if (m_floatingPointRepresentation) {
registerAddress = 40313 + 6 - 1;
} else {
registerAddress = 40303 + 6 - 1;
}
uint16_t value = charging;
return m_modbusTcpMaster->writeHoldingRegister(m_slaveId, registerAddress, value);
}
QUuid SunspecThing::setDischargingRate(const int &charging)
{
// 40313 + Offset 13 - 1
//Register Name OutWRte
/*Defines the maximum discharge rate (discharge limit). Default is 100% */
if (!m_modbusTcpMaster) {
return "";
}
int registerAddress;
if (m_floatingPointRepresentation) {
registerAddress = 40313 + 13 - 1;
} else {
registerAddress = 40303 + 13 - 1;
}
int16_t value = charging * 100;
return m_modbusTcpMaster->writeHoldingRegister(m_slaveId, registerAddress, value);
}
void SunspecThing::update()
{
if (!m_modbusTcpMaster) {
return;
}
readCommonBlock();
readStorageBlock();
}
void SunspecThing::onReceivedHoldingRegister(quint32 slaveAddress, quint32 modbusRegister, const QVector<quint16> &data)
{
if (!m_thing)
return;
switch (modbusRegister) {
case 40000: {// Common block, 70 registers long
qCDebug(dcFronius()) << "Sunspec Identification:" << convertModbusRegisters(data, 0, 2);
if (convertModbusRegisters(data, 0, 2) != "SunS") {
qCWarning(dcFronius()) << "Could not find SunS value at" << modbusRegister << "on" << slaveAddress;
return;
}
// ID: 40003
qCDebug(dcFronius()) << "Id:" << data[2];
// Manufacturer: 40005 | 16
qCDebug(dcFronius()) << "Manufacturer:" << QString::fromLatin1(convertModbusRegisters(data, 4, 16));
// Thing model: 40021 | 16
qCDebug(dcFronius()) << "Thing model:" << QString::fromLatin1(convertModbusRegisters(data, 20, 16));
// Data manager version: 40037 | 8
qCDebug(dcFronius()) << "Data manager version:" << QString::fromLatin1(convertModbusRegisters(data, 36, 8));
// Inverter Version: 40045 | 8
qCDebug(dcFronius()) << "Inverter version:" << QString::fromLatin1(convertModbusRegisters(data, 44, 8));
// Serial Number: 40053 | 16
qCDebug(dcFronius()) << "Serial number:" << QString::fromLatin1(convertModbusRegisters(data, 52, 16));
// Modbus thing address : 40069 | 1
qCDebug(dcFronius()) << "Thing modbus address:" << data[67];
/*Sunspec Model Type
zum Auswählen des Datentyps von Datenmodellen für Wechselrichter
(3d) float
Darstellung als Gleitkommazahlen
SunSpec Inverter Model I111, I112 oder I113
(3e) int+SF
Darstellung als ganze Zahlen mit Skalierungsfaktoren
SunSpec Inverter Model I101, I102 oder I103
WICHTIG! Da die verschiedenen Modelle über unterschiedliche Anzahlen an Re-
gistern verfügen, ändern sich durch den Wechsel des Datentyps auch die Regis-
teradressen aller nachfolgenden Modelle.*/
qCDebug(dcFronius()) << "SunSpec Inverter Modbus Map:" << data[69];
if (data[69] > 110){
m_floatingPointRepresentation = true;
} else {
m_floatingPointRepresentation = false;
}
} break;
case 40303:
case 40313: { //Storage Block
// ID
qCDebug(dcFronius()) << "Id:" << data[0];
if (data[0] != 124) {
qCWarning(dcFronius()) << "Invalid id in register address" << modbusRegister << ":" << data[0];
}
// L
qCDebug(dcFronius()) << "Register count:" << data[1];
// WchaMax
qCDebug(dcFronius()) << "Setpoint of maximum charge:" << data[2] << "W";
// WchaGra
qCDebug(dcFronius()) << "Setpoint for maximum charge:" << data[3] << "[s]";
// WdisChaGra
qCDebug(dcFronius()) << "Setpoint for maximum discharge rate:" << data[4] << "[s]";
// StorCtl_Mod: Activate hold/discharge/charge storage control mode. Bit0: charge, Bit 1: discharge
QBitArray storageControlBits = convertModbusRegisterBits(data[5]);
qCDebug(dcFronius()) << "Charging control mode:" << (storageControlBits.testBit(0) ? "On" : "Off");
m_thing->setStateValue(sunspecStorageEnableChargingLimitStateTypeId, storageControlBits.testBit(0));
qCDebug(dcFronius()) << "Discharging control mode:" << (storageControlBits.testBit(1) ? "On" : "Off");
m_thing->setStateValue(sunspecStorageEnableDischargingLimitStateTypeId, storageControlBits.testBit(1));
// MinRsvPct
qCDebug(dcFronius()) << "Setpoint for minimum reserve:" << data[7] << "[%]";
// ChaState
qCDebug(dcFronius()) << "Current energy:" << ((double)data[8] / 100.0) << "[%]";
int percentage = data[8] / 100.00;
m_thing->setStateValue(sunspecStorageBatteryLevelEventTypeId, percentage);
m_thing->setStateValue(sunspecStorageBatteryCriticalStateTypeId, (percentage < 10));
// ChaSt
//Charge status of storage thing. Enumerated
qCDebug(dcFronius()) << "Charge state" << storageStateToString(static_cast<StorageState>(data[11]));
m_thing->setStateValue(sunspecStorageStorageStateStateTypeId, storageStateToString(static_cast<StorageState>(data[11])));
// OutWRte
m_thing->setStateValue(sunspecStorageDischargingRateStateTypeId, (int16_t)data[12] / 100);
qCDebug(dcFronius()) << "Percent of max. discharge rate:" << ((int16_t)data[12] / 100) << "[%]";
// InWRte
m_thing->setStateValue(sunspecStorageChargingRateStateTypeId, (int16_t)data[13] / 100);
qCDebug(dcFronius()) << "Percent of max. charge rate:" << ((int16_t)data[13] / 100) << "[%]";
// ChaGriSet
m_thing->setStateValue(sunspecStorageGridChargingStateTypeId, data[18]);
qCDebug(dcFronius()) << "Charging from grid:" << (data[18] == 0 ? "disabled" : "enabled");
} break;
default:
break;
};
}

View File

@ -1,98 +0,0 @@
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
*
* 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 SUNSPECTHING_H
#define SUNSPECTHING_H
#include "integrations/thing.h"
#include <QObject>
#include <QHostAddress>
#include <QByteArray>
#include <QBitArray>
#include <QUuid>
#include "../modbus/modbustcpmaster.h"
class SunspecThing : public QObject
{
Q_OBJECT
public:
enum StorageState {
Off = 1,
Empty = 2,
Discharging = 3,
Charging = 4,
Full = 5,
Holding = 6,
Testing = 7
};
Q_ENUM(StorageState)
explicit SunspecThing(Thing *thing, QObject *parent = nullptr);
~SunspecThing();
private:
Thing *m_thing;
ModbusTCPMaster *m_modbusTcpMaster = nullptr;
int m_slaveId = 1;
bool m_floatingPointRepresentation = false;
void readCommonBlock();
void readStorageBlock();
QByteArray convertModbusRegister(const uint16_t &modbusData);
QBitArray convertModbusRegisterBits(const uint16_t &modbusData);
QByteArray convertModbusRegisters(const QVector<quint16> &modbusData, int offset, int size);
QString storageStateToString(const StorageState &state);
public slots:
bool connectModbus();
QUuid setGridCharging(const bool &charging);
QUuid setDischargingRate(const int &charging);
QUuid setChargingRate(const int &charging);
QUuid setStorageControlMode(const int &charging);
void update();
signals:
void connectionStateChanged(bool status);
void requestExecuted(QUuid requetId, bool success);
private slots:
void onConnectionStateChanged(bool status);
void onRequestExecuted(QUuid requestId, bool success);
void onRequestError(QUuid requestId, const QString &error);
void onReceivedHoldingRegister(quint32 slaveAddress, quint32 modbusRegister, const QVector<quint16> &values);
};
#endif // SUNSPECTHING_H

View File

@ -1,741 +0,0 @@
<?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

@ -1,741 +0,0 @@
<?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

@ -2,7 +2,6 @@ TEMPLATE = subdirs
PLUGIN_DIRS = \
drexelundweiss \
fronius \
modbuscommander \
mypv \
wallbe \