sunspec: vendor plugin sources from nymea-plugins-modbus 1.15.2
Vendor the sunspec plugin into this repo so the Fronius work and the upstream storage fixes can live here. Sources only: build artefacts and generated plugininfo headers are excluded. libnymea-sunspec is deliberately NOT vendored - the plugin must stay rebasable on upstream nymea, so it links against libnymea-sunspec-dev. sunspec.pri resolves it via pkg-config, with a NYMEA_SUNSPEC_PATH override for a local sysroot, mirroring modbus.pri. See sunspec/VENDORED.md.
This commit is contained in:
parent
cbfb5df23e
commit
bb842eea55
13
.gitignore
vendored
13
.gitignore
vendored
@ -5,3 +5,16 @@ moc_*
|
||||
*plugininfo.h
|
||||
*.so
|
||||
build/
|
||||
builddir/
|
||||
build-*/
|
||||
|
||||
# Sysroot local pour libnymea-sunspec-dev (extraction du .deb hors installation
|
||||
# systeme). Artefact de build, jamais versionne.
|
||||
.sunspec-sysroot/
|
||||
|
||||
# Documents de conception du chantier Fronius : ils vivent dans hems-system et
|
||||
# sont copies ici pour travailler. Leur diffusion publique n'est pas tranchee
|
||||
# (cf. section 5 du contrat), donc ils ne sont pas versionnes dans ce depot.
|
||||
sunspec/CONTRAT-fronius-sunspec.md
|
||||
sunspec/brief-agent-plugin.md
|
||||
sunspec/CLAUDE-nymea-plugin-sunspec.md
|
||||
|
||||
@ -7,6 +7,7 @@ PLUGIN_DIRS = \
|
||||
eastron \
|
||||
abbb2x \
|
||||
abbterra \
|
||||
sunspec \
|
||||
v2c
|
||||
|
||||
|
||||
|
||||
30
sunspec.pri
30
sunspec.pri
@ -1,7 +1,29 @@
|
||||
QT *= network serialbus
|
||||
|
||||
top_srcdir=$$PWD
|
||||
top_builddir=$$shadowed($$PWD)
|
||||
# libnymea-sunspec n'est PAS vendoree : on lie contre le paquet
|
||||
# libnymea-sunspec-dev. Deux resolutions possibles, meme convention que
|
||||
# modbus.pri / NYMEA_MODBUS_PATH :
|
||||
#
|
||||
# 1) paquet installe systeme -> pkg-config nymea-sunspec (defaut)
|
||||
# 2) sysroot local -> qmake6 NYMEA_SUNSPEC_PATH=/chemin/vers/sysroot
|
||||
# ou <sysroot> contient usr/include/nymea-sunspec et usr/lib/<triplet>.
|
||||
#
|
||||
# Le paquet 1.15.2 installe les en-tetes des modeles sous
|
||||
# <includedir>/home/jenkins/nymea-plugins-modbus/libnymea-sunspec/models/
|
||||
# (le chemin de build Jenkins a fuite dans le .deb). Le plugin fait
|
||||
# #include <models/sunspecmodelfactory.h>
|
||||
# qui ne resout donc pas avec le seul -I<includedir>. On ajoute le prefixe
|
||||
# manquant quand il existe, sans casser une installation correcte.
|
||||
|
||||
INCLUDEPATH += $$top_srcdir/libnymea-sunspec
|
||||
LIBS += -L$$top_builddir/libnymea-sunspec/ -lnymea-sunspec1
|
||||
isEmpty(NYMEA_SUNSPEC_PATH) {
|
||||
CONFIG += link_pkgconfig
|
||||
PKGCONFIG += nymea-sunspec
|
||||
SUNSPEC_INCLUDEDIR = $$[QT_INSTALL_PREFIX]/include/nymea-sunspec
|
||||
} else {
|
||||
SUNSPEC_INCLUDEDIR = $$NYMEA_SUNSPEC_PATH/usr/include/nymea-sunspec
|
||||
INCLUDEPATH += $$SUNSPEC_INCLUDEDIR
|
||||
LIBS += -L$$NYMEA_SUNSPEC_PATH/usr/lib/$$QMAKE_HOST.arch-linux-gnu -lnymea-sunspec1
|
||||
}
|
||||
|
||||
SUNSPEC_MODELS_WORKAROUND = $$SUNSPEC_INCLUDEDIR/home/jenkins/nymea-plugins-modbus/libnymea-sunspec
|
||||
exists($$SUNSPEC_MODELS_WORKAROUND/models): INCLUDEPATH += $$SUNSPEC_MODELS_WORKAROUND
|
||||
|
||||
29
sunspec/README.md
Normal file
29
sunspec/README.md
Normal file
@ -0,0 +1,29 @@
|
||||
# SunSpec
|
||||
|
||||
Connect nymea to SunSpec devices over Modbus TCP
|
||||
|
||||
## Supported Things
|
||||
|
||||
* SunSpec Inverter
|
||||
* Model ID 101 & 111 Single phase inverter
|
||||
* Model ID 102 & 112 Split phase inverter
|
||||
* Model ID 103 & 113 Three phase inverter
|
||||
* SunSpec Meter
|
||||
* Model ID 201 & 211 Single phase meter
|
||||
* Model ID 202 & 212 Split phase meter
|
||||
* Model ID 203 & 213 Three phase meter
|
||||
* SunSpec Storage
|
||||
* Model ID 124
|
||||
|
||||
|
||||
## Tested connections
|
||||
|
||||
* SolarEdge (with custom battery)
|
||||
|
||||
## Requirements
|
||||
|
||||
* The package 'nymea-plugin-sunspec' must be installed.
|
||||
* The SunSpec device must support SunSpec over modbus TCP
|
||||
|
||||
## More
|
||||
https://sunspec.org
|
||||
45
sunspec/VENDORED.md
Normal file
45
sunspec/VENDORED.md
Normal file
@ -0,0 +1,45 @@
|
||||
# Vendoring — sunspec
|
||||
|
||||
Copié depuis : ETM/nymea-plugins-modbus (fork de nymea/nymea-plugins-modbus)
|
||||
Commit source (HEAD au moment de la copie) : 2b18e84
|
||||
Dernier commit touchant les sources copiées : bf53a74
|
||||
("Update license text and add SPDX identifier", 2025-11-18)
|
||||
Base upstream : nymea-plugins-modbus 1.15.2
|
||||
Date copie : 2026-07-31
|
||||
Nom paquet cible : powersync-plugin-sunspec
|
||||
|
||||
Raison : le chantier Fronius (voir `specs/fronius-sunspec.md`) ajoute un vendor
|
||||
`fronius` et corrige des anomalies du vendor `sunspec` générique. Ces
|
||||
changements vivent dans ce dépôt ETM, pas dans le mirror nymea.
|
||||
|
||||
## Ce qui a été copié
|
||||
|
||||
Sources uniquement. Exclus de la copie : `*.o`, `moc_*`, `*.so`, `Makefile`,
|
||||
`plugininfo.h`, `extern-plugininfo.h`, `moc_predefs.h`, `*.qm` — tous des
|
||||
artefacts de build régénérés par `qmake6` / `nymea-plugininfocompiler`.
|
||||
|
||||
## Dépendance de build
|
||||
|
||||
`libnymea-sunspec-dev` (paquet `repos.nymea.io`, 1.15.2). `sunspec.pri` le
|
||||
résout par `pkg-config nymea-sunspec`.
|
||||
|
||||
## Règle absolue
|
||||
|
||||
**`libnymea-sunspec` n'est PAS vendorée et ne doit pas l'être.** Le plugin doit
|
||||
rester rebasable sur l'upstream nymea : toute modification vit dans `sunspec/`.
|
||||
Si un changement de la bibliothèque paraît inévitable, s'arrêter et remonter la
|
||||
question plutôt que de la modifier.
|
||||
|
||||
## Hygiène de commits
|
||||
|
||||
Deux natures de changements, à ne jamais mélanger dans un même commit :
|
||||
|
||||
- **correctifs upstream** (bugs présents dans nymea 1.15.2 — AC-1 à AC-4 de la
|
||||
spec) : message en anglais, aucune référence à ETM / Fronius / PowerSync, pour
|
||||
rester proposables en amont ;
|
||||
- **spécifique ETM** (vendor `fronius`, réglages produit) : commits séparés.
|
||||
|
||||
## SORTIE
|
||||
|
||||
Si nymea intègre en amont les correctifs AC-1..AC-4 et un vendor Fronius
|
||||
équivalent : rebaser sur la version amont et réduire ce dossier au delta ETM.
|
||||
1759
sunspec/integrationpluginsunspec.cpp
Normal file
1759
sunspec/integrationpluginsunspec.cpp
Normal file
File diff suppressed because it is too large
Load Diff
125
sunspec/integrationpluginsunspec.h
Normal file
125
sunspec/integrationpluginsunspec.h
Normal file
@ -0,0 +1,125 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef INTEGRATIONPLUGINSUNSPEC_H
|
||||
#define INTEGRATIONPLUGINSUNSPEC_H
|
||||
|
||||
#include <integrations/integrationplugin.h>
|
||||
#include <network/networkdevicemonitor.h>
|
||||
#include <plugintimer.h>
|
||||
|
||||
#include <sunspecconnection.h>
|
||||
#include <models/sunspecmodelfactory.h>
|
||||
|
||||
#include "sunspecthing.h"
|
||||
#include "extern-plugininfo.h"
|
||||
|
||||
#include <QUuid>
|
||||
|
||||
class IntegrationPluginSunSpec: public IntegrationPlugin
|
||||
{
|
||||
Q_OBJECT
|
||||
|
||||
Q_PLUGIN_METADATA(IID "io.nymea.IntegrationPlugin" FILE "integrationpluginsunspec.json")
|
||||
Q_INTERFACES(IntegrationPlugin)
|
||||
|
||||
public:
|
||||
explicit IntegrationPluginSunSpec();
|
||||
|
||||
void init() override;
|
||||
void discoverThings(ThingDiscoveryInfo *info) override;
|
||||
void setupThing(ThingSetupInfo *info) override;
|
||||
void postSetupThing(Thing *thing) override;
|
||||
void thingRemoved(Thing *thing) override;
|
||||
void executeAction(ThingActionInfo *info) override;
|
||||
|
||||
private:
|
||||
// SunSpec Connection params map
|
||||
QHash<ThingClassId, ParamTypeId> m_connectionDiscoverySlaveIdParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_connectionMacAddressParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_connectionAddressParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_connectionHostNameParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_connectionPortParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_connectionSlaveIdParamTypeIds;
|
||||
|
||||
// SunSpec thing params map
|
||||
QHash<ThingClassId, ParamTypeId> m_modelIdParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_modbusAddressParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_manufacturerParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_deviceModelParamTypeIds;
|
||||
QHash<ThingClassId, ParamTypeId> m_serialNumberParamTypeIds;
|
||||
|
||||
PluginTimer *m_refreshTimer = nullptr;
|
||||
|
||||
QHash<Thing *, NetworkDeviceMonitor *> m_monitors;
|
||||
|
||||
QHash<ThingId, SunSpecConnection *> m_sunSpecConnections;
|
||||
QHash<Thing *, SunSpecThing *> m_sunSpecThings;
|
||||
|
||||
QHash<Thing *, SunSpecModel *> m_sunSpecInverters;
|
||||
QHash<Thing *, SunSpecModel *> m_sunSpecMeters;
|
||||
QHash<Thing *, SunSpecModel *> m_sunSpecStorages;
|
||||
|
||||
|
||||
Thing *getThingForSunSpecModel(uint modelId, uint modbusAddress, const ThingId &parentId);
|
||||
bool sunspecThingAlreadyAdded(uint modelId, uint modbusAddress, const ThingId &parentId);
|
||||
void processDiscoveryResult(Thing *thing, SunSpecConnection *connection);
|
||||
|
||||
// SunSpec things
|
||||
SunSpecConnection *createConnection(Thing *thing);
|
||||
|
||||
// Custom types
|
||||
void setupSolarEdgeBattery(ThingSetupInfo *info);
|
||||
|
||||
// Discover SolarEdge batteries
|
||||
void searchSolarEdgeBatteries(SunSpecConnection *connection);
|
||||
void searchSolarEdgeBattery(SunSpecConnection *connection, const ThingId &parentThingId, quint16 startRegister);
|
||||
|
||||
// SolarEdge
|
||||
double calculateSolarEdgePvProduction(Thing *thing, double acPower, double dcPower);
|
||||
|
||||
void autocreateSunSpecModelThing(const ThingClassId &thingClassId, const QString &thingName, const ThingId &parentId, SunSpecModel *model);
|
||||
|
||||
QString getInverterStateString(quint16 state);
|
||||
QString getInverterErrorString(quint32 flag);
|
||||
|
||||
double fixValueSign(double targetValue, double powerValue);
|
||||
bool hasManufacturer(const QStringList &manufacturers, const QString &manufacturer);
|
||||
void markThingStatesDisconnected(Thing *thing);
|
||||
|
||||
private slots:
|
||||
void onRefreshTimer();
|
||||
void onPluginConfigurationChanged(const ParamTypeId ¶mTypeId, const QVariant &value);
|
||||
|
||||
void onInverterBlockUpdated();
|
||||
void onMeterBlockUpdated();
|
||||
void onStorageBlockUpdated();
|
||||
void onSolarEdgeBatteryBlockUpdated();
|
||||
|
||||
void evaluateEnergyProducedValue(Thing *inverterThing, float energyProduced);
|
||||
|
||||
|
||||
};
|
||||
#endif // INTEGRATIONPLUGINSUNSPEC_H
|
||||
|
||||
1728
sunspec/integrationpluginsunspec.json
Normal file
1728
sunspec/integrationpluginsunspec.json
Normal file
File diff suppressed because it is too large
Load Diff
14
sunspec/meta.json
Normal file
14
sunspec/meta.json
Normal file
@ -0,0 +1,14 @@
|
||||
{
|
||||
"title": "SunSpec",
|
||||
"tagline": "Connect to SunSpec devices.",
|
||||
"icon": "sunspec.png",
|
||||
"stability": "consumer",
|
||||
"offline": true,
|
||||
"technologies": [
|
||||
"network",
|
||||
"modbus"
|
||||
],
|
||||
"categories": [
|
||||
"energy"
|
||||
]
|
||||
}
|
||||
253
sunspec/solaredgebattery.cpp
Normal file
253
sunspec/solaredgebattery.cpp
Normal file
@ -0,0 +1,253 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "solaredgebattery.h"
|
||||
#include "extern-plugininfo.h"
|
||||
|
||||
#include <sunspecdatapoint.h>
|
||||
#include <sunspecconnection.h>
|
||||
|
||||
SolarEdgeBattery::SolarEdgeBattery(Thing *thing, SunSpecConnection *connection, int modbusStartRegister, QObject *parent) :
|
||||
SunSpecThing(thing, nullptr, parent),
|
||||
m_connection(connection),
|
||||
m_modbusStartRegister(modbusStartRegister)
|
||||
{
|
||||
m_timer.setSingleShot(true);
|
||||
m_timer.setInterval(10000);
|
||||
connect(&m_timer, &QTimer::timeout, this, [this](){
|
||||
if (!m_initFinishedSuccess) {
|
||||
emit initFinished(false);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
SunSpecConnection *SolarEdgeBattery::connection() const
|
||||
{
|
||||
return m_connection;
|
||||
}
|
||||
|
||||
quint16 SolarEdgeBattery::modbusStartRegister() const
|
||||
{
|
||||
return m_modbusStartRegister;
|
||||
}
|
||||
|
||||
SolarEdgeBattery::BatteryData SolarEdgeBattery::batteryData() const
|
||||
{
|
||||
return m_batteryData;
|
||||
}
|
||||
|
||||
void SolarEdgeBattery::init()
|
||||
{
|
||||
qCDebug(dcSunSpec()) << "Initializing battery on" << m_modbusStartRegister;
|
||||
m_initFinishedSuccess = false;
|
||||
readBlockData();
|
||||
m_timer.start();
|
||||
}
|
||||
|
||||
void SolarEdgeBattery::readBlockData()
|
||||
{
|
||||
// Read the data in 2 block requests
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery: Read block 1 from modbus address" << m_modbusStartRegister << "length" << 107<< ", Slave ID" << m_connection->slaveId();
|
||||
|
||||
// Total possible block size is 0xE19A - 0xE100 = 0x9A = 153 registers
|
||||
|
||||
// First block request 0x00 - 0x4C
|
||||
QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, m_modbusStartRegister, 0x4C);
|
||||
if (QModbusReply *reply = m_connection->modbusTcpClient()->sendReadRequest(request, m_connection->slaveId())) {
|
||||
if (!reply->isFinished()) {
|
||||
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);
|
||||
connect(reply, &QModbusReply::finished, this, [=]() {
|
||||
if (reply->error() != QModbusDevice::NoError) {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Read response error:" << reply->error();
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
emit initFinished(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// Example data:
|
||||
// "(0x3438, 0x565f, 0x4c47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c47, 0x4320, 0x5245, 0x5355, 0x2031, 0x3000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x00ff, 0x0000, 0xffff, 0xff7f, 0xffff, 0xff7f, 0xffff, 0xff7f, 0xffff, 0xff7f, 0xffff, 0xff7f)"
|
||||
// 255 "48V_LG" "LGC RESU 10" "" ""
|
||||
// "(0x3438, 0x565f, 0x4c47, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x4c47, 0x4320, 0x5245, 0x5355, 0x2031, 0x3000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x3438, 0x5620, 0x4443, 0x4443, 0x2032, 0x2e32, 0x2e39, 0x3120, 0x424d, 0x5320, 0x302e, 0x302e, 0x3000, 0x0000, 0x0000, 0x0000, 0x3745, 0x3034, 0x3432, 0x4543, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0000, 0x0070, 0x0000, 0x2000, 0x4619, 0x4000, 0x459c, 0x4000, 0x459c, 0x4000, 0x44ce, 0x4000, 0x459c)"
|
||||
// 112 "48V_LG" "LGC RESU 10" "48V DCDC 2.2.91 BMS 0.0.0" "7E0442EC"
|
||||
|
||||
|
||||
const QModbusDataUnit unit = reply->result();
|
||||
QVector<quint16> values = unit.values();
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery: Received first block data" << m_modbusStartRegister << values.length();
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery:" << SunSpecDataPoint::registersToString(values);
|
||||
|
||||
m_batteryData.manufacturerName = SunSpecDataPoint::convertToString(values.mid(ManufacturerName, 16));
|
||||
m_batteryData.model = SunSpecDataPoint::convertToString(values.mid(Model, 16));
|
||||
m_batteryData.firmwareVersion = SunSpecDataPoint::convertToString(values.mid(FirmwareVersion, 16));
|
||||
m_batteryData.serialNumber = SunSpecDataPoint::convertToString(values.mid(SerialNumber, 16));
|
||||
m_batteryData.batteryDeviceId = values[BatteryDeviceId];
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery:" << m_batteryData.batteryDeviceId << m_batteryData.manufacturerName << m_batteryData.model << m_batteryData.firmwareVersion << m_batteryData.serialNumber;
|
||||
|
||||
// Check if there is a battery connected, if so, one of the string must contain vaild data...
|
||||
if (m_batteryData.manufacturerName.isEmpty() && m_batteryData.model.isEmpty() && m_batteryData.serialNumber.isEmpty() && m_batteryData.firmwareVersion.isEmpty()) {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: No valid information detected about the battery. Probably no battery connected at register" << m_modbusStartRegister;
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
emit initFinished(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
// For some reason, there might be even data in there but no battery connected, let's check if there are invalid registers
|
||||
|
||||
// Check if there is a battery connected, if so, one of the string must contain vaild data...
|
||||
const QVector<quint16> invalidRegisters = { 0xffff, 0xff7f };
|
||||
if (values.mid(RatedEnergy, 2) == invalidRegisters && values.mid(MaxChargeContinuesPower, 2) == invalidRegisters &&
|
||||
values.mid(MaxDischargeContinuesPower, 2) == invalidRegisters && values.mid(MaxChargePeakPower, 2) == invalidRegisters &&
|
||||
values.mid(MaxDischargePeakPower, 2) == invalidRegisters) {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: No valid information detected about the battery. Probably no battery connected at register" << m_modbusStartRegister;
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
emit initFinished(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
m_batteryData.ratedEnergy = SunSpecDataPoint::convertToFloat32(values.mid(RatedEnergy, 2));
|
||||
m_batteryData.maxChargeContinuesPower = SunSpecDataPoint::convertToFloat32(values.mid(MaxChargeContinuesPower, 2));
|
||||
m_batteryData.maxDischargeContinuesPower = SunSpecDataPoint::convertToFloat32(values.mid(MaxDischargeContinuesPower, 2));
|
||||
m_batteryData.maxChargePeakPower = SunSpecDataPoint::convertToFloat32(values.mid(MaxChargePeakPower, 2));
|
||||
m_batteryData.maxDischargePeakPower = SunSpecDataPoint::convertToFloat32(values.mid(MaxDischargePeakPower, 2));
|
||||
|
||||
// First block looks good, continue with second block
|
||||
|
||||
// 8192 17945 536888857 536888857 1.08652e-19
|
||||
// 0x2000 0x4619
|
||||
|
||||
// Read from 0x6c to 0x86
|
||||
int offset = 0x6c;
|
||||
QModbusDataUnit request = QModbusDataUnit(QModbusDataUnit::RegisterType::HoldingRegisters, m_modbusStartRegister + offset, 28);
|
||||
if (QModbusReply *reply = m_connection->modbusTcpClient()->sendReadRequest(request, m_connection->slaveId())) {
|
||||
if (!reply->isFinished()) {
|
||||
connect(reply, &QModbusReply::finished, reply, &QModbusReply::deleteLater);
|
||||
connect(reply, &QModbusReply::finished, this, [=]() {
|
||||
if (reply->error() != QModbusDevice::NoError) {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Read response error:" << reply->error();
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
emit initFinished(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
|
||||
const QModbusDataUnit unit = reply->result();
|
||||
QVector<quint16> values = unit.values();
|
||||
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery: Received second block data" << m_modbusStartRegister + offset << values.length();
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery:" << SunSpecDataPoint::registersToString(values);
|
||||
QVector<quint16> valueRegisters;
|
||||
|
||||
valueRegisters = values.mid(BatteryAverageTemperature - offset, 2);
|
||||
m_batteryData.averageTemperature = SunSpecDataPoint::convertToFloat32(valueRegisters);
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery: Average temperature:" << SunSpecDataPoint::registersToString(valueRegisters) << m_batteryData.averageTemperature;
|
||||
|
||||
m_batteryData.maxTemperature = SunSpecDataPoint::convertToFloat32(values.mid(BatteryMaxTemperature - offset, 2));
|
||||
m_batteryData.instantaneousVoltage = SunSpecDataPoint::convertToFloat32(values.mid(InstantaneousVoltage - offset, 2));
|
||||
m_batteryData.instantaneousCurrent = SunSpecDataPoint::convertToFloat32(values.mid(InstantaneousCurrent - offset, 2));
|
||||
m_batteryData.instantaneousPower = SunSpecDataPoint::convertToFloat32(values.mid(InstantaneousPower - offset, 2));
|
||||
m_batteryData.maxEnergy = SunSpecDataPoint::convertToFloat32(values.mid(MaxEnergy - offset, 2));
|
||||
|
||||
valueRegisters = values.mid(AvailableEnergy - offset, 2);
|
||||
m_batteryData.availableEnergy = SunSpecDataPoint::convertToFloat32(valueRegisters);
|
||||
qCDebug(dcSunSpec()) << "SolarEdgeBattery: Available energy:" << (AvailableEnergy - offset) << SunSpecDataPoint::registersToString(valueRegisters) << m_batteryData.availableEnergy;
|
||||
|
||||
m_batteryData.stateOfHealth = SunSpecDataPoint::convertToFloat32(values.mid(StateOfHealth - offset, 2));
|
||||
m_batteryData.stateOfEnergy = SunSpecDataPoint::convertToFloat32(values.mid(StateOfEnergy - offset, 2));
|
||||
m_batteryData.batteryStatus = static_cast<BatteryStatus>(SunSpecDataPoint::convertToUInt32(values.mid(Status - offset, 2)));
|
||||
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
m_initFinishedSuccess = true;
|
||||
emit initFinished(true);
|
||||
}
|
||||
|
||||
emit blockDataUpdated();
|
||||
});
|
||||
|
||||
connect(reply, &QModbusReply::errorOccurred, this, [] (QModbusDevice::Error error) {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Modbus reply error:" << error;
|
||||
});
|
||||
} else {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Read error: " << m_connection->modbusTcpClient()->errorString();
|
||||
reply->deleteLater(); // broadcast replies return immediately
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
emit initFinished(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Read error: " << m_connection->modbusTcpClient()->errorString();
|
||||
return;
|
||||
}
|
||||
});
|
||||
|
||||
connect(reply, &QModbusReply::errorOccurred, this, [] (QModbusDevice::Error error) {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Modbus reply error:" << error;
|
||||
});
|
||||
} else {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Read error: " << m_connection->modbusTcpClient()->errorString();
|
||||
reply->deleteLater(); // broadcast replies return immediately
|
||||
if (!m_initFinishedSuccess) {
|
||||
m_timer.stop();
|
||||
emit initFinished(false);
|
||||
}
|
||||
return;
|
||||
}
|
||||
} else {
|
||||
qCWarning(dcSunSpec()) << "SolarEdgeBattery: Read error: " << m_connection->modbusTcpClient()->errorString();
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
QDebug operator<<(QDebug debug, const SolarEdgeBattery::BatteryData &batteryData)
|
||||
{
|
||||
debug << "SolarEdgeBatteryData(" << batteryData.manufacturerName << "-" << batteryData.model << ")" << "\n";
|
||||
debug << " - Battery Device ID" << batteryData.batteryDeviceId << "\n";
|
||||
debug << " - Firmware version" << batteryData.firmwareVersion << "\n";
|
||||
debug << " - Serial number" << batteryData.serialNumber << "\n";
|
||||
debug << " - Rated Energy" << batteryData.ratedEnergy << "W * H" << "\n";
|
||||
debug << " - Max charging continues power" << batteryData.maxChargeContinuesPower << "W" << "\n";
|
||||
debug << " - Max discharging continues power" << batteryData.maxDischargeContinuesPower << "W" << "\n";
|
||||
debug << " - Max charging peak power" << batteryData.maxChargePeakPower << "W" << "\n";
|
||||
debug << " - Max discharging peak power" << batteryData.maxDischargePeakPower << "W" << "\n";
|
||||
debug << " - Average temperature" << batteryData.averageTemperature << "°C" << "\n";
|
||||
debug << " - Max temperature" << batteryData.maxTemperature << "°C" << "\n";
|
||||
debug << " - Instantuouse Voltage" << batteryData.instantaneousVoltage << "V" << "\n";
|
||||
debug << " - Instantuouse Current" << batteryData.instantaneousCurrent << "A" << "\n";
|
||||
debug << " - Instantuouse Power" << batteryData.instantaneousPower << "W" << "\n";
|
||||
debug << " - Max energy" << batteryData.maxEnergy << "W * H" << "\n";
|
||||
debug << " - Available energy" << batteryData.availableEnergy << "W * H" << "\n";
|
||||
debug << " - State of health" << batteryData.stateOfHealth << "%" << "\n";
|
||||
debug << " - State of energy" << batteryData.stateOfEnergy << "%" << "\n";
|
||||
debug << " - Battery status" << batteryData.batteryStatus << "\n";
|
||||
return debug;
|
||||
}
|
||||
131
sunspec/solaredgebattery.h
Normal file
131
sunspec/solaredgebattery.h
Normal file
@ -0,0 +1,131 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef SOLAREDGEBATTERY_H
|
||||
#define SOLAREDGEBATTERY_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QDebug>
|
||||
#include <QTimer>
|
||||
|
||||
#include "sunspecthing.h"
|
||||
|
||||
/* Note: this is actually not a sunspec thing, since SolarEdge provide battery information using a non SunSpec modbus register section.
|
||||
* For keeping the code as simple as possible we make it a SunSpec thing */
|
||||
|
||||
class SolarEdgeBattery : public SunSpecThing
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
enum BatteryRegister {
|
||||
ManufacturerName = 0x00,
|
||||
Model = 0x10,
|
||||
FirmwareVersion = 0x20,
|
||||
SerialNumber = 0x30,
|
||||
BatteryDeviceId = 0x40,
|
||||
RatedEnergy = 0x42, // W * H
|
||||
MaxChargeContinuesPower = 0x44, // W
|
||||
MaxDischargeContinuesPower = 0x46, // W
|
||||
MaxChargePeakPower = 0x48, // W
|
||||
MaxDischargePeakPower = 0x4A, // W
|
||||
// 32 byte reserved
|
||||
BatteryAverageTemperature = 0x6c, // °C
|
||||
BatteryMaxTemperature = 0x6E,
|
||||
InstantaneousVoltage = 0x70, // V
|
||||
InstantaneousCurrent = 0x72, // A
|
||||
InstantaneousPower = 0x74, // W
|
||||
LifetimeExportEnergyCounter = 0x76, // W * H
|
||||
LifetimeImportEnergyCounter = 0x7A, // W * H
|
||||
MaxEnergy = 0x7E, // W * H
|
||||
AvailableEnergy = 0x80, // W * H
|
||||
StateOfHealth = 0x82,
|
||||
StateOfEnergy = 0x84,
|
||||
Status = 0x86
|
||||
};
|
||||
Q_ENUM(BatteryRegister)
|
||||
|
||||
enum BatteryStatus {
|
||||
Off = 0,
|
||||
Standby = 1,
|
||||
Init = 2,
|
||||
Charge = 3,
|
||||
Discharge = 4,
|
||||
Fault = 5,
|
||||
Holding = 6,
|
||||
Idle = 7
|
||||
};
|
||||
Q_ENUM(BatteryStatus)
|
||||
|
||||
struct BatteryData {
|
||||
QString manufacturerName;
|
||||
QString model;
|
||||
QString firmwareVersion;
|
||||
QString serialNumber;
|
||||
quint16 batteryDeviceId;
|
||||
float ratedEnergy;
|
||||
float maxChargeContinuesPower;
|
||||
float maxDischargeContinuesPower;
|
||||
float maxChargePeakPower;
|
||||
float maxDischargePeakPower;
|
||||
float averageTemperature;
|
||||
float maxTemperature;
|
||||
float instantaneousVoltage;
|
||||
float instantaneousCurrent;
|
||||
float instantaneousPower;
|
||||
quint64 lifetimeExportEnergyCounter;
|
||||
quint64 lifetimeImportEnergyCounter;
|
||||
float maxEnergy;
|
||||
float availableEnergy;
|
||||
float stateOfHealth;
|
||||
float stateOfEnergy;
|
||||
BatteryStatus batteryStatus;
|
||||
};
|
||||
|
||||
explicit SolarEdgeBattery(Thing *thing, SunSpecConnection *connection, int modbusStartRegister, QObject *parent = nullptr);
|
||||
|
||||
SunSpecConnection *connection() const override;
|
||||
|
||||
quint16 modbusStartRegister() const override;
|
||||
|
||||
BatteryData batteryData() const;
|
||||
|
||||
void init();
|
||||
void readBlockData() override;
|
||||
|
||||
signals:
|
||||
void initFinished(bool success);
|
||||
void blockDataUpdated();
|
||||
|
||||
private:
|
||||
QTimer m_timer;
|
||||
SunSpecConnection *m_connection = nullptr;
|
||||
int m_modbusStartRegister;
|
||||
bool m_initFinishedSuccess = false;
|
||||
BatteryData m_batteryData;
|
||||
|
||||
};
|
||||
|
||||
QDebug operator<<(QDebug debug, const SolarEdgeBattery::BatteryData &batteryData);
|
||||
|
||||
#endif // SOLAREDGEBATTERY_H
|
||||
BIN
sunspec/sunspec.png
Normal file
BIN
sunspec/sunspec.png
Normal file
Binary file not shown.
|
After Width: | Height: | Size: 8.6 KiB |
14
sunspec/sunspec.pro
Normal file
14
sunspec/sunspec.pro
Normal file
@ -0,0 +1,14 @@
|
||||
include(../plugins.pri)
|
||||
include(../sunspec.pri)
|
||||
|
||||
SOURCES += \
|
||||
integrationpluginsunspec.cpp \
|
||||
solaredgebattery.cpp \
|
||||
sunspecdiscovery.cpp \
|
||||
sunspecthing.cpp
|
||||
|
||||
HEADERS += \
|
||||
integrationpluginsunspec.h \
|
||||
solaredgebattery.h \
|
||||
sunspecdiscovery.h \
|
||||
sunspecthing.h
|
||||
235
sunspec/sunspecdiscovery.cpp
Normal file
235
sunspec/sunspecdiscovery.cpp
Normal file
@ -0,0 +1,235 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "sunspecdiscovery.h"
|
||||
|
||||
#include <sunspecmodel.h>
|
||||
#include <models/sunspecmodelfactory.h>
|
||||
#include <models/sunspeccommonmodel.h>
|
||||
|
||||
SunSpecDiscovery::SunSpecDiscovery(NetworkDeviceDiscovery *networkDeviceDiscovery, quint16 slaveId, SunSpecDataPoint::ByteOrder byteOrder, QObject *parent)
|
||||
: QObject{parent},
|
||||
m_networkDeviceDiscovery{networkDeviceDiscovery},
|
||||
m_slaveId{slaveId},
|
||||
m_byteOrder{byteOrder}
|
||||
{
|
||||
m_scanPorts.append(502);
|
||||
m_scanPorts.append(1502);
|
||||
}
|
||||
|
||||
QList<SunSpecDiscovery::Result> SunSpecDiscovery::results() const
|
||||
{
|
||||
return m_results;
|
||||
}
|
||||
|
||||
void SunSpecDiscovery::addCustomDiscoveryPort(quint16 port)
|
||||
{
|
||||
if (m_scanPorts.contains(port))
|
||||
return;
|
||||
|
||||
m_scanPorts.append(port);
|
||||
}
|
||||
|
||||
void SunSpecDiscovery::startDiscovery()
|
||||
{
|
||||
qCInfo(dcSunSpec()) << "Discovery: Start searching for SunSpec devices in the network...";
|
||||
NetworkDeviceDiscoveryReply *discoveryReply = m_networkDeviceDiscovery->discover();
|
||||
|
||||
m_startDateTime = QDateTime::currentDateTime();
|
||||
|
||||
// Imedialty check any new device gets discovered
|
||||
connect(discoveryReply, &NetworkDeviceDiscoveryReply::hostAddressDiscovered, this, &SunSpecDiscovery::checkNetworkDevice);
|
||||
|
||||
// Check what might be left on finished
|
||||
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, discoveryReply, &NetworkDeviceDiscoveryReply::deleteLater);
|
||||
connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [this, discoveryReply](){
|
||||
qCDebug(dcSunSpec()) << "Discovery: Network discovery finished. Give some time for pending discovery checks to finish...";
|
||||
m_networkDeviceInfos = discoveryReply->networkDeviceInfos();
|
||||
|
||||
// Give the last connections added right before the network discovery finished a chance to check the device...
|
||||
QTimer::singleShot(3000, this, [this](){
|
||||
finishDiscovery();
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
void SunSpecDiscovery::testNextConnection(const QHostAddress &address)
|
||||
{
|
||||
if (!m_pendingConnectionAttempts.contains(address))
|
||||
return;
|
||||
|
||||
SunSpecConnection *connection = m_pendingConnectionAttempts[address].dequeue();
|
||||
if (m_pendingConnectionAttempts.value(address).isEmpty())
|
||||
m_pendingConnectionAttempts.remove(address);
|
||||
|
||||
qCDebug(dcSunSpec()) << "Discovery: Start searching on" << QString("%1:%2").arg(address.toString()).arg(connection->port()) << "slave ID:" << connection->slaveId();
|
||||
// Try to connect, maybe it works, maybe not...
|
||||
if (!connection->connectDevice()) {
|
||||
qCDebug(dcSunSpec()) << "Discovery: Failed to connect to" << QString("%1:%2").arg(address.toString()).arg(connection->port()) << "slave ID:" << connection->slaveId() << "Continue...";;
|
||||
cleanupConnection(connection);
|
||||
return;
|
||||
}
|
||||
|
||||
/* Some connection will block the connection process and the connection will pending in the
|
||||
* connecting state for over a minute before failing.
|
||||
* This behavior blocks further connection tests for during the disdovery process and the discovery failes to detect the device.
|
||||
* This timer will make sure the connection can be established within 5 seconds, otherwise we continue with the next connection.
|
||||
*/
|
||||
|
||||
QTimer *connectionTimer = new QTimer(connection);
|
||||
connectionTimer->setInterval(5000);
|
||||
connectionTimer->setSingleShot(true);
|
||||
|
||||
m_connectionTimers.insert(connection, connectionTimer);
|
||||
|
||||
connect(connectionTimer, &QTimer::timeout, connection, [this, connection, connectionTimer](){
|
||||
qCDebug(dcSunSpec()) << "Discovery: Could not establish a connection within" << connectionTimer->interval() << "ms. Continue...";
|
||||
m_connectionTimers.remove(connection);
|
||||
connection->disconnectDevice();
|
||||
// Note: since the connection is the parent of the timer, it will be deleted with the connection
|
||||
cleanupConnection(connection);
|
||||
});
|
||||
|
||||
// Once connected, the timer will be stopped.
|
||||
connectionTimer->start();
|
||||
}
|
||||
|
||||
void SunSpecDiscovery::checkNetworkDevice(const QHostAddress &address)
|
||||
{
|
||||
// Create a connection queue for this network device
|
||||
|
||||
QQueue<SunSpecConnection *> connectionQueue;
|
||||
|
||||
// Check all ports for this host
|
||||
foreach (quint16 port, m_scanPorts) {
|
||||
|
||||
|
||||
SunSpecConnection *connection = new SunSpecConnection(address, port, m_slaveId, m_byteOrder, this);
|
||||
connection->setNumberOfRetries(1);
|
||||
connection->setTimeout(500);
|
||||
m_connections.append(connection);
|
||||
connectionQueue.enqueue(connection);
|
||||
|
||||
connect(connection, &SunSpecConnection::connectedChanged, this, [this, connection, connectionQueue, address](bool connected){
|
||||
if (!connected) {
|
||||
// Disconnected ... done with this connection
|
||||
cleanupConnection(connection);
|
||||
return;
|
||||
}
|
||||
|
||||
// Successfully connected, we can stop the connection timer which takes care about blocking connection attempts
|
||||
if (m_connectionTimers.contains(connection)) {
|
||||
QTimer *connectionTimer = m_connectionTimers.take(connection);
|
||||
connectionTimer->stop();
|
||||
connectionTimer->deleteLater();
|
||||
}
|
||||
|
||||
// Modbus TCP connected, try to discovery sunspec models...
|
||||
connect(connection, &SunSpecConnection::discoveryFinished, this, [=](bool success){
|
||||
if (!success) {
|
||||
qCDebug(dcSunSpec()) << "Discovery: SunSpec discovery failed on"
|
||||
<< QString("%1:%2").arg(address.toString()).arg(connection->port())
|
||||
<< "slave ID:" << connection->slaveId() << "Continue...";
|
||||
cleanupConnection(connection);
|
||||
return;
|
||||
}
|
||||
|
||||
// Success, we found some sunspec models here, let's read some infomation from the models
|
||||
|
||||
Result result;
|
||||
result.address = address;
|
||||
result.port = connection->port();
|
||||
result.slaveId = connection->slaveId();
|
||||
|
||||
qCDebug(dcSunSpec()) << "Discovery: --> Found SunSpec devices on" << result.networkDeviceInfo << "port" << result.port << "slave ID:" << result.slaveId;
|
||||
foreach (SunSpecModel *model, connection->models()) {
|
||||
if (model->modelId() == SunSpecModelFactory::ModelIdCommon) {
|
||||
SunSpecCommonModel *commonModel = qobject_cast<SunSpecCommonModel *>(model);
|
||||
QString manufacturer = commonModel->manufacturer();
|
||||
if (!manufacturer.isEmpty() && !result.modelManufacturers.contains(manufacturer)) {
|
||||
result.modelManufacturers.append(manufacturer);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
m_results.append(result);
|
||||
|
||||
// Done with this connection
|
||||
cleanupConnection(connection);
|
||||
});
|
||||
|
||||
// Run SunSpec discovery on connection...
|
||||
if (!connection->startDiscovery()) {
|
||||
qCDebug(dcSunSpec()) << "Discovery: Unable to discover SunSpec data on connection"
|
||||
<< QString("%1:%2").arg(address.toString()).arg(connection->port())
|
||||
<< "slave ID:" << connection->slaveId() << "Continue...";
|
||||
cleanupConnection(connection);
|
||||
}
|
||||
});
|
||||
|
||||
// If we get any error...skip this host...
|
||||
connect(connection->modbusTcpClient(), &QModbusTcpClient::errorOccurred, this, [=](QModbusDevice::Error error){
|
||||
if (error != QModbusDevice::NoError) {
|
||||
qCDebug(dcSunSpec()) << "Discovery: Connection error on"
|
||||
<< QString("%1:%2").arg(address.toString()).arg(connection->port())
|
||||
<< "slave ID:" << connection->slaveId() << "Continue...";
|
||||
cleanupConnection(connection);
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
m_pendingConnectionAttempts[address] = connectionQueue;
|
||||
testNextConnection(address);
|
||||
}
|
||||
|
||||
void SunSpecDiscovery::cleanupConnection(SunSpecConnection *connection)
|
||||
{
|
||||
m_connections.removeAll(connection);
|
||||
connection->disconnectDevice();
|
||||
connection->deleteLater();
|
||||
|
||||
if (m_connectionTimers.contains(connection)) {
|
||||
QTimer *connectionTimer = m_connectionTimers.take(connection);
|
||||
connectionTimer->stop();
|
||||
}
|
||||
|
||||
testNextConnection(connection->hostAddress());
|
||||
}
|
||||
|
||||
void SunSpecDiscovery::finishDiscovery()
|
||||
{
|
||||
qint64 durationMilliSeconds = QDateTime::currentMSecsSinceEpoch() - m_startDateTime.toMSecsSinceEpoch();
|
||||
|
||||
// Fill in all network device infos we have
|
||||
for (int i = 0; i < m_results.length(); i++)
|
||||
m_results[i].networkDeviceInfo = m_networkDeviceInfos.get(m_results.at(i).address);
|
||||
|
||||
// Cleanup any leftovers...we don't care any more
|
||||
foreach (SunSpecConnection *connection, m_connections)
|
||||
cleanupConnection(connection);
|
||||
|
||||
qCInfo(dcSunSpec()) << "Discovery: Finished the discovery process. Found" << m_results.length()
|
||||
<< "SunSpec devices in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz");
|
||||
emit discoveryFinished();
|
||||
}
|
||||
77
sunspec/sunspecdiscovery.h
Normal file
77
sunspec/sunspecdiscovery.h
Normal file
@ -0,0 +1,77 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef SUNSPECDISCOVERY_H
|
||||
#define SUNSPECDISCOVERY_H
|
||||
|
||||
#include <QQueue>
|
||||
#include <QObject>
|
||||
#include <QDateTime>
|
||||
|
||||
#include <sunspecconnection.h>
|
||||
#include <network/networkdevicediscovery.h>
|
||||
|
||||
class SunSpecDiscovery : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SunSpecDiscovery(NetworkDeviceDiscovery *networkDeviceDiscovery, quint16 slaveId, SunSpecDataPoint::ByteOrder byteOrder = SunSpecDataPoint::ByteOrderLittleEndian, QObject *parent = nullptr);
|
||||
typedef struct Result {
|
||||
QHostAddress address;
|
||||
NetworkDeviceInfo networkDeviceInfo;
|
||||
quint16 port;
|
||||
quint16 slaveId;
|
||||
QStringList modelManufacturers;
|
||||
} Result;
|
||||
|
||||
QList<Result> results() const;
|
||||
|
||||
void addCustomDiscoveryPort(quint16 port);
|
||||
void startDiscovery();
|
||||
|
||||
signals:
|
||||
void discoveryFinished();
|
||||
|
||||
private:
|
||||
NetworkDeviceDiscovery *m_networkDeviceDiscovery = nullptr;
|
||||
QList<quint16> m_scanPorts;
|
||||
quint16 m_slaveId = 1;
|
||||
SunSpecDataPoint::ByteOrder m_byteOrder;
|
||||
|
||||
QDateTime m_startDateTime;
|
||||
QHash<QHostAddress, QQueue<SunSpecConnection *>> m_pendingConnectionAttempts;
|
||||
QHash<SunSpecConnection *, QTimer *> m_connectionTimers;
|
||||
QList<SunSpecConnection *> m_connections;
|
||||
NetworkDeviceInfos m_networkDeviceInfos;
|
||||
QList<Result> m_results;
|
||||
|
||||
void testNextConnection(const QHostAddress &address);
|
||||
|
||||
void checkNetworkDevice(const QHostAddress &address);
|
||||
void cleanupConnection(SunSpecConnection *connection);
|
||||
|
||||
void finishDiscovery();
|
||||
};
|
||||
|
||||
#endif // SUNSPECDISCOVERY_H
|
||||
70
sunspec/sunspecthing.cpp
Normal file
70
sunspec/sunspecthing.cpp
Normal file
@ -0,0 +1,70 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#include "sunspecthing.h"
|
||||
|
||||
SunSpecThing::SunSpecThing(Thing *thing, SunSpecModel *model, QObject *parent) :
|
||||
QObject(parent),
|
||||
m_thing(thing),
|
||||
m_model(model)
|
||||
{
|
||||
|
||||
}
|
||||
|
||||
SunSpecConnection *SunSpecThing::connection() const
|
||||
{
|
||||
if (!m_model)
|
||||
return nullptr;
|
||||
|
||||
return m_model->connection();
|
||||
}
|
||||
|
||||
SunSpecModel *SunSpecThing::model() const
|
||||
{
|
||||
return m_model;
|
||||
}
|
||||
|
||||
Thing *SunSpecThing::thing() const
|
||||
{
|
||||
return m_thing;
|
||||
}
|
||||
|
||||
quint16 SunSpecThing::modbusStartRegister() const
|
||||
{
|
||||
if (!m_model)
|
||||
return 0xFFFF;
|
||||
|
||||
return m_model->modbusStartRegister();
|
||||
}
|
||||
|
||||
void SunSpecThing::executeAction(ThingActionInfo *info)
|
||||
{
|
||||
Q_ASSERT_X(false, "executeAction", QString("Unhandled action: %1").arg(info->action().actionTypeId().toString()).toUtf8());
|
||||
info->finish(Thing::ThingErrorActionTypeNotFound);
|
||||
}
|
||||
|
||||
void SunSpecThing::onBlockDataUpdated()
|
||||
{
|
||||
// Reimplement if required
|
||||
}
|
||||
63
sunspec/sunspecthing.h
Normal file
63
sunspec/sunspecthing.h
Normal file
@ -0,0 +1,63 @@
|
||||
// SPDX-License-Identifier: GPL-3.0-or-later
|
||||
|
||||
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
|
||||
*
|
||||
* Copyright (C) 2013 - 2024, nymea GmbH
|
||||
* Copyright (C) 2024 - 2025, chargebyte austria GmbH
|
||||
*
|
||||
* This file is part of nymea-plugins-modbus.
|
||||
*
|
||||
* nymea-plugins-modbus is free software: you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License as published by
|
||||
* the Free Software Foundation, either version 3 of the License, or
|
||||
* (at your option) any later version.
|
||||
*
|
||||
* nymea-plugins-modbus 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 General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with nymea-plugins-modbus. If not, see <https://www.gnu.org/licenses/>.
|
||||
*
|
||||
* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
|
||||
|
||||
#ifndef SUNSPECTHING_H
|
||||
#define SUNSPECTHING_H
|
||||
|
||||
#include <QObject>
|
||||
|
||||
#include "extern-plugininfo.h"
|
||||
|
||||
#include <integrations/integrationplugin.h>
|
||||
|
||||
#include <sunspecmodel.h>
|
||||
#include <sunspecconnection.h>
|
||||
|
||||
class SunSpecThing : public QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
public:
|
||||
explicit SunSpecThing(Thing *thing, SunSpecModel *model, QObject *parent = nullptr);
|
||||
virtual ~SunSpecThing() = default;
|
||||
|
||||
virtual SunSpecConnection *connection() const;
|
||||
SunSpecModel *model() const;
|
||||
Thing *thing() const;
|
||||
|
||||
virtual quint16 modbusStartRegister() const;
|
||||
|
||||
virtual void readBlockData() = 0;
|
||||
|
||||
virtual void executeAction(ThingActionInfo *info);
|
||||
|
||||
protected:
|
||||
Thing *m_thing = nullptr;
|
||||
SunSpecModel *m_model = nullptr;
|
||||
|
||||
private slots:
|
||||
virtual void onBlockDataUpdated();
|
||||
|
||||
};
|
||||
|
||||
#endif // SUNSPECTHING_H
|
||||
19
sunspec/test/sunspec_server.sh
Executable file
19
sunspec/test/sunspec_server.sh
Executable file
@ -0,0 +1,19 @@
|
||||
#!/bin/bash
|
||||
|
||||
if ! command -v suns &> /dev/null
|
||||
then
|
||||
echo "suns could not be found"
|
||||
echo "... installing"
|
||||
sudo apt update
|
||||
sudo apt install libmodbus-dev flex bison git
|
||||
|
||||
if [ ! -d "sunspec"]; then
|
||||
git clone https://github.com/Boernsman/sunspec.git
|
||||
fi
|
||||
cd ./sunspec/src
|
||||
make
|
||||
sudo make install
|
||||
fi
|
||||
|
||||
echo "Startin sunspec test server"
|
||||
sudo suns -s -vvvv -m models/test/composite_superdevice.model
|
||||
@ -0,0 +1,976 @@
|
||||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<!DOCTYPE TS>
|
||||
<TS version="2.1">
|
||||
<context>
|
||||
<name>IntegrationPluginSunSpec</name>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="147"/>
|
||||
<source>The discovery is not available.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="354"/>
|
||||
<source>The SunSpec connection is not connected.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="471"/>
|
||||
<source>Single Phase Inverter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="475"/>
|
||||
<source>Split Phase Inverter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="479"/>
|
||||
<source>Three Phase Inverter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="483"/>
|
||||
<source>Single Phase Meter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="487"/>
|
||||
<source>Split Phase Meter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="493"/>
|
||||
<source>Three Phase Meter</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="496"/>
|
||||
<source>Storage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="556"/>
|
||||
<source>The SunSpec discovery finished with errors. Please make sure this is a SunSpec device.</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="890"/>
|
||||
<source>Ground fault</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="894"/>
|
||||
<source>DC over voltage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="898"/>
|
||||
<source>AC disconnect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="902"/>
|
||||
<source>DC disconnect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="906"/>
|
||||
<source>Grid disconnect</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="910"/>
|
||||
<source>Cabinet open</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="914"/>
|
||||
<source>Manual shutdown</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="918"/>
|
||||
<source>Over temperature</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="922"/>
|
||||
<source>Over frequency</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="926"/>
|
||||
<source>Under frequency</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="930"/>
|
||||
<source>AC over voltage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="934"/>
|
||||
<source>AC under voltage</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="938"/>
|
||||
<source>Blown string fuse</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="942"/>
|
||||
<source>Under temperature</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="946"/>
|
||||
<source>Memory loss</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="950"/>
|
||||
<source>Hardware test failure</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../integrationpluginsunspec.cpp" line="954"/>
|
||||
<source>No error</source>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
<context>
|
||||
<name>SunSpec</name>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="219"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="222"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="225"/>
|
||||
<source>AC energy</source>
|
||||
<extracomment>The name of the StateType ({d493880d-eb58-4530-8010-8ea4f6d63387}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({fe3f8a65-121a-4ae1-b22a-ae325dc3e7e6}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({4c0407b3-5cd5-438d-bfa8-9a8d6695b458}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="228"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="231"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="234"/>
|
||||
<source>AC power</source>
|
||||
<extracomment>The name of the StateType ({14036f44-25fd-4e93-8e8c-c677b06a2c34}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({9235eb4b-906c-4557-8e18-bca268a367cc}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({f49591d6-d759-4be3-bafc-b6a7a72cf023}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="237"/>
|
||||
<source>Available energy</source>
|
||||
<extracomment>The name of the StateType ({7ac7ccd1-b5d1-488b-a99b-98ef000b7d03}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="240"/>
|
||||
<source>Average temperature</source>
|
||||
<extracomment>The name of the StateType ({f46298e5-d06c-4ebe-869a-d9feff1a4689}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="243"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="246"/>
|
||||
<source>Battery critical</source>
|
||||
<extracomment>The name of the StateType ({897616db-e815-4cda-b890-13b37a94ad17}) of ThingClass solarEdgeBattery
|
||||
----------
|
||||
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/sunspec/plugininfo.h" line="249"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="252"/>
|
||||
<source>Battery level</source>
|
||||
<extracomment>The name of the StateType ({a4b0c8c9-44f0-43e2-ab25-63fdc9772fb8}) of ThingClass solarEdgeBattery
|
||||
----------
|
||||
The name of the StateType ({0bf53f80-97f8-488b-b514-58f9fe08c183}) of ThingClass sunspecStorage</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="255"/>
|
||||
<source>Battery status</source>
|
||||
<extracomment>The name of the StateType ({9c24b27a-3ea1-4db1-8868-6c999aad0a18}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="258"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="261"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="264"/>
|
||||
<source>Cabinet temperature</source>
|
||||
<extracomment>The name of the StateType ({44b0320f-89a7-4248-bad4-288ef898a5cc}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({6d314d50-b990-4a58-a37f-4a3da42c4407}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({51461bde-1a6b-4aa1-94cc-59829ea0a7c8}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="267"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="270"/>
|
||||
<source>Charging</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: enableCharging, 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/sunspec/plugininfo.h" line="273"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="276"/>
|
||||
<source>Charging rate</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: 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/sunspec/plugininfo.h" line="279"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="282"/>
|
||||
<source>Charging state</source>
|
||||
<extracomment>The name of the StateType ({815b0826-c392-4249-a271-19e92ebe46e0}) of ThingClass solarEdgeBattery
|
||||
----------
|
||||
The name of the StateType ({f6178427-8e04-45c7-abec-27d04dd5ff04}) of ThingClass sunspecStorage</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="285"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="288"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="291"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="294"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="297"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="300"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="303"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="306"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="309"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="312"/>
|
||||
<source>Connected</source>
|
||||
<extracomment>The name of the StateType ({8addf8aa-f879-4afa-935d-4d2ffa38d05e}) of ThingClass solarEdgeBattery
|
||||
----------
|
||||
The name of the StateType ({f51d4e5a-24ea-41f9-a453-d2bdd68d804c}) of ThingClass solarEdgeConnection
|
||||
----------
|
||||
The name of the StateType ({25a1fb10-a6b9-4037-b7cf-ad481a65beb4}) of ThingClass sunspecStorage
|
||||
----------
|
||||
The name of the StateType ({36f861c7-afc1-4725-b41f-67113200d78f}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({34e34ec9-dab0-438c-9493-a3068bc401de}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({d960e7b1-d4aa-4cab-8f54-6bcfdbb8be36}) of ThingClass sunspecSinglePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({4401468c-0385-40a9-b436-daf7ed6a50d5}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({27b49640-f58b-466e-a225-a4663cf3ed96}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({48bf31c4-fda7-41e5-a3ef-3011bf96e104}) of ThingClass sunspecSinglePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({3e767ad0-b4b3-4398-94c1-00579ea09ca8}) of ThingClass sunspecConnection</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="315"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="318"/>
|
||||
<source>Current power phase A</source>
|
||||
<extracomment>The name of the StateType ({0e3e8870-3d59-4ee8-b7aa-33bda68b6ae3}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({57c0f5ba-a104-424b-b8d4-8bab90acf009}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="321"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="324"/>
|
||||
<source>Current power phase B</source>
|
||||
<extracomment>The name of the StateType ({453d046c-3a66-4590-882c-1283882918fc}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({456f7cdf-9756-49b8-9084-f212199d4014}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="327"/>
|
||||
<source>Current power phase C</source>
|
||||
<extracomment>The name of the StateType ({ba4e94de-9136-48a7-aad8-3d5cd0e7d968}) of ThingClass sunspecThreePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="330"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="333"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="336"/>
|
||||
<source>DC current</source>
|
||||
<extracomment>The name of the StateType ({81a989aa-4104-438e-bfc5-4f44ce5ceeaf}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({68e7239f-d7b2-4ab2-9cf3-e769fb5ddfc0}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({79bd1748-b540-467d-b6fa-b0cc56d9775a}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="339"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="342"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="345"/>
|
||||
<source>DC power</source>
|
||||
<extracomment>The name of the StateType ({1397d935-1206-4ceb-883d-1fcf41ba6214}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({560b5ec8-1b2c-47d3-b55e-40f4d0aebfe0}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({852a8c28-b14d-492e-b2b3-f22219f4ed36}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="348"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="351"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="354"/>
|
||||
<source>DC voltage</source>
|
||||
<extracomment>The name of the StateType ({8c1c71c4-28fd-472a-83a6-3e96ab03d677}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({d36bcaba-1e77-431e-89dc-af8ac6172d7d}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({157376b8-19ae-415f-b693-cb0a9ba88863}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="357"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="360"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="363"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="366"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="369"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="372"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="375"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="378"/>
|
||||
<source>Device model</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeBattery, Type: thing, ID: {e90a3833-1eb6-43ed-a72a-0cf7cb8015ca})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {2abf786d-18be-46cb-b4a3-7e0934a4c3fd})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseMeter, Type: thing, ID: {00d308dc-e9a3-40e4-acad-3cad2ca3590f})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseMeter, Type: thing, ID: {6bc978cb-a779-4f5f-87a4-3cbbe2a55ca8})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseMeter, Type: thing, ID: {e31333c8-746d-4955-af0a-ae18d7100de7})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseInverter, Type: thing, ID: {938b6555-e0af-4222-b85b-90bc1bc78c8f})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseInverter, Type: thing, ID: {d40b1b9d-994d-422c-8a41-b98cf03c1678})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseInverter, Type: thing, ID: {12f1b02c-033d-423f-a217-955ddb995dd5})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="381"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="384"/>
|
||||
<source>Discharging</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: enableDischarging, 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/sunspec/plugininfo.h" line="387"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="390"/>
|
||||
<source>Discharging rate</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: 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/sunspec/plugininfo.h" line="393"/>
|
||||
<source>Enable charging</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/sunspec/plugininfo.h" line="396"/>
|
||||
<source>Enable discharging</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/sunspec/plugininfo.h" line="399"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="402"/>
|
||||
<source>Energy consumed phase A</source>
|
||||
<extracomment>The name of the StateType ({cc0fd197-22ed-4461-8bba-47460396798a}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({481b9895-1c3e-4e74-9418-ee51dae80a63}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="405"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="408"/>
|
||||
<source>Energy consumed phase B</source>
|
||||
<extracomment>The name of the StateType ({e928fde3-b35b-4884-9810-1cd083725e1c}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({10245c6c-4b0d-44b4-be10-72026b842c86}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="411"/>
|
||||
<source>Energy consumed phase C</source>
|
||||
<extracomment>The name of the StateType ({2a12a991-d6c8-4665-bcc8-ea2685f7f0d4}) of ThingClass sunspecThreePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="414"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="417"/>
|
||||
<source>Energy produced phase A</source>
|
||||
<extracomment>The name of the StateType ({fe7caa7e-cf37-4550-833e-7f9d35001fdd}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({2dc76576-561c-4bce-8799-fadc55e84aee}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="420"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="423"/>
|
||||
<source>Energy produced phase B</source>
|
||||
<extracomment>The name of the StateType ({edbe64a5-121e-4c96-9dc8-bbc2a33dfdb7}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({b1489efd-ece0-419e-ab1c-d3d25ab6b958}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="426"/>
|
||||
<source>Energy produced phase C</source>
|
||||
<extracomment>The name of the StateType ({a26790c0-7378-471c-80ba-67021352415d}) of ThingClass sunspecThreePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="429"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="432"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="435"/>
|
||||
<source>Error</source>
|
||||
<extracomment>The name of the StateType ({4479af96-c499-4f15-abd6-4afdb18a9e09}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({5cbfccc9-6afb-404c-a85e-e0323659a25f}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({49240259-d82a-4fe6-b3f5-1cd6a67c87a7}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="438"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="441"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="444"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="447"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="450"/>
|
||||
<source>Frequency</source>
|
||||
<extracomment>The name of the StateType ({66734fc7-b3e4-48d4-8cb7-f0a9f7cef88a}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({db977c04-a3e1-436f-a0cd-9ce5b7bc6b89}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({3a2ce51d-7fa0-4188-bbd6-00d25de90e15}) of ThingClass sunspecSinglePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({faa45cae-ed28-4150-9036-fceddf9d6776}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({611df2ce-2b9c-49f3-9fa7-5706776e812c}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="453"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="456"/>
|
||||
<source>Grid charging</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, ActionType: 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/sunspec/plugininfo.h" line="459"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="462"/>
|
||||
<source>IP address</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeConnection, Type: thing, ID: {94f6ba3c-6b8b-47a9-a5cb-73a091ae4cf7})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecConnection, Type: thing, ID: {6be6abc4-e2b2-4687-9343-0e5164ed0ab2})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="465"/>
|
||||
<source>Instantaneous current</source>
|
||||
<extracomment>The name of the StateType ({89f58155-ca0c-48a8-aa7f-6e4d1b1bad36}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="468"/>
|
||||
<source>Instantaneous power</source>
|
||||
<extracomment>The name of the StateType ({caccf9fd-0f83-4dd5-ae48-a497f13d2a2e}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="471"/>
|
||||
<source>Instantaneous voltage</source>
|
||||
<extracomment>The name of the StateType ({9d17defb-fc6e-4c10-af53-14b796222a14}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="474"/>
|
||||
<source>Line frequency</source>
|
||||
<extracomment>The name of the StateType ({874f5e4a-a009-4c28-b211-2af90a24b2ac}) of ThingClass sunspecSplitPhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="477"/>
|
||||
<source>Line to Neutral AC Voltage</source>
|
||||
<extracomment>The name of the StateType ({0ac79508-07c3-4d01-97a3-6edf121bdf32}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="480"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="483"/>
|
||||
<source>MAC address</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeConnection, Type: thing, ID: {bb395c12-54d6-4139-b0a6-e31b28bc4d2e})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecConnection, Type: thing, ID: {f65d6c36-1672-44cb-b52a-62d71837ae67})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="486"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="489"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="492"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="495"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="498"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="501"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="504"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="507"/>
|
||||
<source>Manufacturer</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeBattery, Type: thing, ID: {8a4b19a9-ee14-42aa-9146-fa84e15970ee})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {7ee31b97-caec-4cdb-80c9-71e232c5fb22})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseMeter, Type: thing, ID: {462552de-af84-4893-9132-81c1adce67ad})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseMeter, Type: thing, ID: {ecbdee01-8be7-42bf-9e1a-a0f700669b09})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseMeter, Type: thing, ID: {811de380-848a-448c-8446-daa0e0fd8e50})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseInverter, Type: thing, ID: {640b71ba-2ccd-40d6-bf45-8271a9046f81})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseInverter, Type: thing, ID: {c2c35b68-1c0f-47cc-b09f-49d9cf67c0ff})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseInverter, Type: thing, ID: {5fbb0b62-e0f9-4aee-aba7-fd00ae8b0a5d})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="510"/>
|
||||
<source>Maximum energy</source>
|
||||
<extracomment>The name of the StateType ({d8cc799d-9709-4342-8766-52ff5f12aecc}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="513"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="516"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="519"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="522"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="525"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="528"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="531"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="534"/>
|
||||
<source>Modbus address</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeBattery, Type: thing, ID: {7413cce6-48c1-4924-89bc-915beed67b57})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {3f107844-00c5-4f39-86e5-485b3d1f5c1a})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseMeter, Type: thing, ID: {6d5dbd35-1bf6-46db-bee9-90c679421b89})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseMeter, Type: thing, ID: {a56f198d-ed86-429f-b839-8e11a32da8c1})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseMeter, Type: thing, ID: {30b90ec0-429b-4e6c-88e9-155aa4bcad47})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseInverter, Type: thing, ID: {e5465ede-9d3d-4558-b614-40dda743ddae})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseInverter, Type: thing, ID: {37582a96-f2f2-4845-abef-973c7dd0ad57})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseInverter, Type: thing, ID: {26ae9050-7090-453a-85a3-307bfebe6fed})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="537"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="540"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="543"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="546"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="549"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="552"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="555"/>
|
||||
<source>Model</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {219beb96-b9fe-4dd2-a386-ecfbbab8786d})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseMeter, Type: thing, ID: {a1960821-155c-4176-86fa-974429039182})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseMeter, Type: thing, ID: {89aeec6d-abeb-48b5-9594-214ad5db2d03})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseMeter, Type: thing, ID: {7d6fcafb-c62e-4a21-aae2-f4041c487149})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseInverter, Type: thing, ID: {8d5b2b58-ce46-406d-844e-f53136afcf09})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseInverter, Type: thing, ID: {c42fb50e-210f-4b53-88eb-fa216e15f88f})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseInverter, Type: thing, ID: {41715d00-a947-4f43-a475-cea05790e01d})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="558"/>
|
||||
<source>Number of retries</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunSpec, Type: plugin, ID: {9a4bfe01-315f-4ee7-98a9-f16b08ba12ad})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="561"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="564"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="567"/>
|
||||
<source>Operating state</source>
|
||||
<extracomment>The name of the StateType ({cebdce98-42d1-4a28-8834-8960efc0e83f}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({6c1e2929-bc9a-4ce9-a405-6df2633a5131}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({47543a7f-425f-406b-a458-b79c36b65f6c}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="570"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="573"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="576"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="579"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="582"/>
|
||||
<source>Phase A current</source>
|
||||
<extracomment>The name of the StateType ({46ae5c40-f389-4f7e-a59f-8947d7dc9f3f}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({e8c0f4bf-a704-46f2-80a0-cf490bd7871b}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({4a058e36-0b45-4388-9a26-0615f7aafa0d}) of ThingClass sunspecSinglePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({3140ccd3-40cf-46c8-8bb2-8c3ea4582f84}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({be7b86b4-aeeb-49ba-9b6b-9792dceed6b5}) of ThingClass sunspecSplitPhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="585"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="588"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="591"/>
|
||||
<source>Phase A voltage</source>
|
||||
<extracomment>The name of the StateType ({4ff342de-f0b7-475a-99e4-3a926326d1b7}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({1bd7e53e-abf8-4d62-b87c-2c84c283567b}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({5e7a65a5-b740-4395-87fa-ffbe8fe1c823}) of ThingClass sunspecSinglePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="594"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="597"/>
|
||||
<source>Phase AN voltage</source>
|
||||
<extracomment>The name of the StateType ({f08521aa-9c38-4c31-95e1-acb616f6e9c6}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({17c24cfc-cb41-4873-82b4-19a20d6be146}) of ThingClass sunspecSplitPhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="600"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="603"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="606"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="609"/>
|
||||
<source>Phase B current</source>
|
||||
<extracomment>The name of the StateType ({efc75436-ac51-4fee-81f1-65a726416980}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({4281f6fc-d5a0-4a22-ac61-6bec88efbc80}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({7ea1a53a-6fd9-4914-8283-b57aa1aaaebf}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({fc5df18d-cf2f-4944-97b7-e57dabef8778}) of ThingClass sunspecSplitPhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="612"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="615"/>
|
||||
<source>Phase B voltage</source>
|
||||
<extracomment>The name of the StateType ({cc8434f1-02fe-41ad-bc8a-94e57293f8fc}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({377b5279-ddb6-451d-8377-a9389c749393}) of ThingClass sunspecSplitPhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="618"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="621"/>
|
||||
<source>Phase BN voltage</source>
|
||||
<extracomment>The name of the StateType ({739b8805-d522-4406-bede-d1e4200a3aa9}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({f8645ee2-a1e6-4d09-8c20-f6fd02a9e896}) of ThingClass sunspecSplitPhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="624"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="627"/>
|
||||
<source>Phase C current</source>
|
||||
<extracomment>The name of the StateType ({618cbcc5-2efe-49d2-9c5c-53fb3eaa3a9d}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({aa4b4cf5-43d0-4be5-9505-403918b5371d}) of ThingClass sunspecThreePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="630"/>
|
||||
<source>Phase C voltage</source>
|
||||
<extracomment>The name of the StateType ({fbd673cf-8891-4aef-b112-2829f5fcfe06}) of ThingClass sunspecThreePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="633"/>
|
||||
<source>Phase CN voltage</source>
|
||||
<extracomment>The name of the StateType ({949b797d-5566-4667-8982-e430d23548e2}) of ThingClass sunspecThreePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="636"/>
|
||||
<source>Phase voltage</source>
|
||||
<extracomment>The name of the StateType ({4ca086e9-82b9-461c-b168-1d61b542b884}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="639"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="642"/>
|
||||
<source>Port</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeConnection, Type: thing, ID: {1bcede48-d167-4ced-8f1b-bea6302dd43f})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecConnection, Type: thing, ID: {1fa4fc9c-f6be-47c7-928a-bcefc1142eec})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="645"/>
|
||||
<source>Rated energy</source>
|
||||
<extracomment>The name of the StateType ({f6c6f548-8a12-4a62-a641-08bb003c55fa}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="648"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="651"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="654"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="657"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="660"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="663"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="666"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="669"/>
|
||||
<source>Serial number</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeBattery, Type: thing, ID: {efd99fe4-3a48-4208-829d-14e062015ee7})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecStorage, Type: thing, ID: {5cf43b80-3e65-4f69-8bf5-91810da0ead4})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseMeter, Type: thing, ID: {97bbcc98-f4ec-4060-bac2-31b40720862c})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseMeter, Type: thing, ID: {fb7cc04b-91cb-4f3d-a444-201cca57934a})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseMeter, Type: thing, ID: {581fa623-0005-448f-a5b1-8db1043795a3})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecThreePhaseInverter, Type: thing, ID: {ee169df5-475c-4dfb-870a-0785899b7dc1})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSplitPhaseInverter, Type: thing, ID: {8afdd256-0393-4610-9477-7c4541c92ffe})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecSinglePhaseInverter, Type: thing, ID: {59b85218-f144-4ce8-95f7-19a1dc2e2a8d})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="672"/>
|
||||
<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/sunspec/plugininfo.h" line="675"/>
|
||||
<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/sunspec/plugininfo.h" line="678"/>
|
||||
<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/sunspec/plugininfo.h" line="681"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="684"/>
|
||||
<source>Slave ID</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: solarEdgeConnection, Type: thing, ID: {b9cc58cf-ad15-447a-a94d-17b9204313bc})
|
||||
----------
|
||||
The name of the ParamType (ThingClass: sunspecConnection, Type: thing, ID: {953064e0-4675-4538-a9a2-fa22ce2f347c})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="687"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="690"/>
|
||||
<source>SolarEdge</source>
|
||||
<extracomment>The name of the ThingClass ({7a92bf65-b443-4491-a012-2bec35eb5bf0})
|
||||
----------
|
||||
The name of the vendor ({addd7dd8-13e1-405b-ba61-b2d82eaf0426})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="693"/>
|
||||
<source>SolarEdge battery</source>
|
||||
<extracomment>The name of the ThingClass ({7900471a-da3f-4f03-98be-3e3d9c841546})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="696"/>
|
||||
<source>State of health (SOH)</source>
|
||||
<extracomment>The name of the StateType ({24b501db-f301-422d-ad58-f16ca025f6ee}) of ThingClass solarEdgeBattery</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="699"/>
|
||||
<source>Status</source>
|
||||
<extracomment>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/sunspec/plugininfo.h" line="702"/>
|
||||
<source>SunSpec</source>
|
||||
<extracomment>The name of the vendor ({c143a7b4-a16c-4fff-86a3-9ffab3d6841d})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="705"/>
|
||||
<source>SunSpec Generic</source>
|
||||
<extracomment>The name of the ThingClass ({f51853f3-8815-4cf3-b337-45cda1f3e6d5})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="708"/>
|
||||
<source>SunSpec Storage</source>
|
||||
<extracomment>The name of the ThingClass ({9a643ba8-346c-4127-a2f8-956a7133d75e})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="711"/>
|
||||
<source>SunSpec single phase inverter</source>
|
||||
<extracomment>The name of the ThingClass ({c5d5204e-3375-4b92-8128-fab77a671fed})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="714"/>
|
||||
<source>SunSpec single phase meter</source>
|
||||
<extracomment>The name of the ThingClass ({7ffa43b8-b56f-4435-8509-980e9d81dfa8})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="717"/>
|
||||
<source>SunSpec split phase inverter</source>
|
||||
<extracomment>The name of the ThingClass ({61b38f93-d331-42bf-b1ef-d3fb16ad1230})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="720"/>
|
||||
<source>SunSpec split phase meter</source>
|
||||
<extracomment>The name of the ThingClass ({b8a18e45-5ff5-4f43-915f-04ee216c809d})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="723"/>
|
||||
<source>SunSpec three phase inverter</source>
|
||||
<extracomment>The name of the ThingClass ({2e4122ea-96a5-415c-b5e2-7d6012265a83})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="726"/>
|
||||
<source>SunSpec three phase meter</source>
|
||||
<extracomment>The name of the ThingClass ({68f822f9-ff30-4275-b229-39a3674fead7})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="729"/>
|
||||
<source>Timout</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunSpec, Type: plugin, ID: {1a8895a0-c746-48af-9307-3a4636f24cc2})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="732"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="735"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="738"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="741"/>
|
||||
<source>Total AC current</source>
|
||||
<extracomment>The name of the StateType ({e85024af-5376-4ff1-813e-5a56990c11cc}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({26560dd8-6de4-445e-ba55-391d7241c370}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({9dbd8da7-dc22-4c3a-b941-47520fde705f}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({f02d1c99-9b43-45a6-8a06-2ed4d6e5d497}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="744"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="747"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="750"/>
|
||||
<source>Total real energy exported</source>
|
||||
<extracomment>The name of the StateType ({01a69b2c-cc96-4925-9b1c-a2f204ef0837}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({8a63bd73-0546-4636-8da2-23238cc06fb2}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({ba275bdf-f418-4ef0-afbe-ac425c6f6783}) of ThingClass sunspecSinglePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="753"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="756"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="759"/>
|
||||
<source>Total real energy imported</source>
|
||||
<extracomment>The name of the StateType ({0a98b229-7625-4811-8bf8-ed22be2db3fb}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({51ffb2ae-3920-40df-8290-bbf5b6e1a68f}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({c51dc6cb-5c05-4078-b11a-26afb2f85541}) of ThingClass sunspecSinglePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="762"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="765"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="768"/>
|
||||
<source>Total real power</source>
|
||||
<extracomment>The name of the StateType ({47780b0a-68b7-46c3-bb98-79ec9a57fd69}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({ef4bc0f8-f516-49b7-aba8-d5f987485aca}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({93cf8c6a-2620-42ed-9070-e0726d7b1dbc}) of ThingClass sunspecSinglePhaseMeter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="771"/>
|
||||
<source>Update interval</source>
|
||||
<extracomment>The name of the ParamType (ThingClass: sunSpec, Type: plugin, ID: {52da5222-9a94-47a2-9adc-004541d2f5ed})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="774"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="777"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="780"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="783"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="786"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="789"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="792"/>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="795"/>
|
||||
<source>Version</source>
|
||||
<extracomment>The name of the StateType ({db2e0304-4f0e-461f-8bab-c63fcb5deb1b}) of ThingClass solarEdgeBattery
|
||||
----------
|
||||
The name of the StateType ({fca0c151-d8fa-4d6e-a5d7-b3bc965abc09}) of ThingClass sunspecStorage
|
||||
----------
|
||||
The name of the StateType ({3d908dd2-4a93-4b62-8cbb-2fa9ef4d28fa}) of ThingClass sunspecThreePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({85c5087c-77b4-4ac8-bdff-020f6242bd57}) of ThingClass sunspecSplitPhaseMeter
|
||||
----------
|
||||
The name of the StateType ({94adff6f-f672-4e4e-a72c-cd6cd7e8721a}) of ThingClass sunspecSinglePhaseMeter
|
||||
----------
|
||||
The name of the StateType ({3b543b60-d8f6-4bc0-a79f-cb9cb20e4bb8}) of ThingClass sunspecThreePhaseInverter
|
||||
----------
|
||||
The name of the StateType ({2986cac4-f4ac-4299-ac9e-48339e2a54ef}) of ThingClass sunspecSplitPhaseInverter
|
||||
----------
|
||||
The name of the StateType ({f4439de3-a461-42d6-b4c9-aa35f696a420}) of ThingClass sunspecSinglePhaseInverter</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
<message>
|
||||
<location filename="../../../build-nymea-plugins-modbus-Desktop-Debug/sunspec/plugininfo.h" line="798"/>
|
||||
<source>sunspec</source>
|
||||
<extracomment>The name of the plugin SunSpec ({cb4bdec6-cf2c-4a0f-9709-42d951ca2d8b})</extracomment>
|
||||
<translation type="unfinished"></translation>
|
||||
</message>
|
||||
</context>
|
||||
</TS>
|
||||
Loading…
x
Reference in New Issue
Block a user