From 90bfb09eca9bb18f1e30cc65b5bf5e5a0ab7fd5e Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Simon=20St=C3=BCrz?= Date: Tue, 10 Dec 2024 16:43:42 +0100 Subject: [PATCH] Fronius: Update to networkdevice interface and translations --- fronius/froniusdiscovery.cpp | 34 ++-- fronius/froniusdiscovery.h | 4 +- fronius/integrationpluginfronius.cpp | 80 ++++----- fronius/integrationpluginfronius.json | 11 +- ...02319cfc-8b55-49ba-99bc-0588bbfab063-de.ts | 167 ++++++++++-------- ...19cfc-8b55-49ba-99bc-0588bbfab063-en_US.ts | 121 ++++++++----- 6 files changed, 239 insertions(+), 178 deletions(-) diff --git a/fronius/froniusdiscovery.cpp b/fronius/froniusdiscovery.cpp index 997ce59b0..614ea47e4 100644 --- a/fronius/froniusdiscovery.cpp +++ b/fronius/froniusdiscovery.cpp @@ -46,7 +46,6 @@ FroniusDiscovery::FroniusDiscovery(NetworkAccessManager *networkManager, Network qCDebug(dcFronius()) << "Discovery: Grace period timer triggered."; finishDiscovery(); }); - } void FroniusDiscovery::startDiscovery() @@ -55,10 +54,14 @@ void FroniusDiscovery::startDiscovery() m_startDateTime = QDateTime::currentDateTime(); NetworkDeviceDiscoveryReply *discoveryReply = m_networkDeviceDiscovery->discover(); - connect(discoveryReply, &NetworkDeviceDiscoveryReply::networkDeviceInfoAdded, this, &FroniusDiscovery::checkNetworkDevice); - connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [=](){ + connect(discoveryReply, &NetworkDeviceDiscoveryReply::hostAddressDiscovered, this, &FroniusDiscovery::checkHostAddress); + connect(discoveryReply, &NetworkDeviceDiscoveryReply::finished, this, [this, discoveryReply](){ + + m_networkDeviceInfos = discoveryReply->networkDeviceInfos(); + qCDebug(dcFronius()) << "Discovery: Network discovery finished. Found" << discoveryReply->networkDeviceInfos().count() << "network devices"; m_gracePeriodTimer.start(); + discoveryReply->deleteLater(); }); } @@ -68,11 +71,11 @@ QList FroniusDiscovery::discoveryResults() const return m_discoveryResults; } -void FroniusDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDeviceInfo) +void FroniusDiscovery::checkHostAddress(const QHostAddress &address) { - qCDebug(dcFronius()) << "Discovery: Checking network device:" << networkDeviceInfo; + qCDebug(dcFronius()) << "Discovery: Checking host address" << address.toString(); - FroniusSolarConnection *connection = new FroniusSolarConnection(m_networkManager, networkDeviceInfo.address(), this); + FroniusSolarConnection *connection = new FroniusSolarConnection(m_networkManager, address, this); m_connections.append(connection); FroniusNetworkReply *reply = connection->getVersion(); @@ -80,9 +83,9 @@ void FroniusDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDevice QByteArray data = reply->networkReply()->readAll(); if (reply->networkReply()->error() != QNetworkReply::NoError) { if (reply->networkReply()->error() == QNetworkReply::ContentNotFoundError) { - qCInfo(dcFronius()) << "Discovery: The device on" << networkDeviceInfo.address().toString() << "does not reply to our requests. Please verify that the Fronius Solar API is enabled on the device."; + qCInfo(dcFronius()) << "Discovery: The device on" << address.toString() << "does not reply to our requests. Please verify that the Fronius Solar API is enabled on the device."; } else { - qCDebug(dcFronius()) << "Discovery: Reply finished with error on" << networkDeviceInfo.address().toString() << reply->networkReply()->errorString(); + qCDebug(dcFronius()) << "Discovery: Reply finished with error on" << address.toString() << reply->networkReply()->errorString(); } cleanupConnection(connection); return; @@ -91,14 +94,14 @@ void FroniusDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDevice QJsonParseError error; QJsonDocument jsonDoc = QJsonDocument::fromJson(data, &error); if (error.error != QJsonParseError::NoError) { - qCDebug(dcFronius()) << "Discovery: Failed to parse JSON data from" << networkDeviceInfo.address().toString() << ":" << error.errorString() << data; + qCDebug(dcFronius()) << "Discovery: Failed to parse JSON data from" << address.toString() << ":" << error.errorString() << data; cleanupConnection(connection); return; } QVariantMap versionResponseMap = jsonDoc.toVariant().toMap(); if (!versionResponseMap.contains("CompatibilityRange")) { - qCDebug(dcFronius()) << "Discovery: Unexpected JSON reply from" << networkDeviceInfo.address().toString() << "Probably not a Fronius device."; + qCDebug(dcFronius()) << "Discovery: Unexpected JSON reply from" << address.toString() << "Probably not a Fronius device."; cleanupConnection(connection); return; } @@ -109,7 +112,7 @@ void FroniusDiscovery::checkNetworkDevice(const NetworkDeviceInfo &networkDevice qCWarning(dcFronius()) << "Discovery: The Fronius data logger has a version which is known to have a broken JSON API firmware."; } - m_discoveryResults.append(networkDeviceInfo); + m_discoveredAddresses.append(address); cleanupConnection(connection); }); } @@ -124,14 +127,15 @@ void FroniusDiscovery::finishDiscovery() { qint64 durationMilliSeconds = QDateTime::currentMSecsSinceEpoch() - m_startDateTime.toMSecsSinceEpoch(); - foreach (FroniusSolarConnection *connection, m_connections) { + foreach (FroniusSolarConnection *connection, m_connections) cleanupConnection(connection); - } + + foreach (const QHostAddress &address, m_discoveredAddresses) + m_discoveryResults.append(m_networkDeviceInfos.get(address)); qCDebug(dcFronius()) << "Discovery: Finished the discovery process. Found" << m_discoveryResults.count() - << "Fronius devices in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz"); + << "Fronius devices in" << QTime::fromMSecsSinceStartOfDay(durationMilliSeconds).toString("mm:ss.zzz"); m_gracePeriodTimer.stop(); emit discoveryFinished(); - } diff --git a/fronius/froniusdiscovery.h b/fronius/froniusdiscovery.h index 6b7b3249a..856ddda90 100644 --- a/fronius/froniusdiscovery.h +++ b/fronius/froniusdiscovery.h @@ -59,9 +59,11 @@ class FroniusDiscovery : public QObject QList m_connections; + NetworkDeviceInfos m_networkDeviceInfos; + QList m_discoveredAddresses; QList m_discoveryResults; - void checkNetworkDevice(const NetworkDeviceInfo &networkDeviceInfo); + void checkHostAddress(const QHostAddress &address); void cleanupConnection(FroniusSolarConnection *connection); void finishDiscovery(); diff --git a/fronius/integrationpluginfronius.cpp b/fronius/integrationpluginfronius.cpp index 425e70370..9e5ab8361 100644 --- a/fronius/integrationpluginfronius.cpp +++ b/fronius/integrationpluginfronius.cpp @@ -62,8 +62,6 @@ void IntegrationPluginFronius::discoverThings(ThingDiscoveryInfo *info) qCInfo(dcFronius()) << "Discovery finished. Found" << discovery->discoveryResults().count() << "devices"; foreach (const NetworkDeviceInfo &networkDeviceInfo, discovery->discoveryResults()) { qCInfo(dcFronius()) << "Discovered Fronius on" << networkDeviceInfo; - if (networkDeviceInfo.macAddress().isNull()) - continue; QString title; if (networkDeviceInfo.hostName().isEmpty()) { @@ -73,24 +71,29 @@ void IntegrationPluginFronius::discoverThings(ThingDiscoveryInfo *info) } QString description; - if (networkDeviceInfo.macAddressManufacturer().isEmpty()) { - description = networkDeviceInfo.macAddress(); - } else { - description = networkDeviceInfo.macAddress() + " (" + networkDeviceInfo.macAddressManufacturer() + ")"; + if (networkDeviceInfo.macAddressInfos().count() == 1) { + MacAddressInfo macInfo = networkDeviceInfo.macAddressInfos().constFirst(); + if (macInfo.vendorName().isEmpty()) { + description = macInfo.macAddress().toString(); + } else { + description = macInfo.macAddress().toString() + " (" + macInfo.vendorName() + ")"; + } } ThingDescriptor descriptor(connectionThingClassId, title, description); + ParamList params; + params.append(Param(connectionThingMacAddressParamTypeId, networkDeviceInfo.thingParamValueMacAddress())); + params.append(Param(connectionThingHostNameParamTypeId, networkDeviceInfo.thingParamValueHostName())); + params.append(Param(connectionThingAddressParamTypeId, networkDeviceInfo.thingParamValueAddress())); + descriptor.setParams(params); // Check if we already have set up this device - Things existingThings = myThings().filterByParam(connectionThingMacParamTypeId, networkDeviceInfo.macAddress()); - if (existingThings.count() == 1) { - qCDebug(dcFronius()) << "This thing already exists in the system." << existingThings.first() << networkDeviceInfo; - descriptor.setThingId(existingThings.first()->id()); + Thing *existingThing = myThings().findByParams(params); + if (existingThing) { + qCDebug(dcFronius()) << "This thing already exists in the system." << existingThing; + descriptor.setThingId(existingThing->id()); } - ParamList params; - params << Param(connectionThingMacParamTypeId, networkDeviceInfo.macAddress()); - descriptor.setParams(params); info->addThingDescriptor(descriptor); } info->finish(Thing::ThingErrorNoError); @@ -113,42 +116,30 @@ void IntegrationPluginFronius::setupThing(ThingSetupInfo *info) connection->deleteLater(); } - if (m_monitors.contains(thing)) { + if (m_monitors.contains(thing)) hardwareManager()->networkDeviceDiscovery()->unregisterMonitor(m_monitors.take(thing)); - } - - // Set up depending on the available params, mac can only be filled in by discovery (ro param), - // the ip could be used as static manual config for VPN networks or WAN IP's - QHostAddress address(thing->paramValue(connectionThingAddressParamTypeId).toString()); - MacAddress mac(thing->paramValue(connectionThingMacParamTypeId).toString()); - - // Create the connection - FroniusSolarConnection *connection = nullptr; - - if (mac.isValid() && !mac.isNull()) { - qCInfo(dcFronius()) << "Setting up network device monitor for Fronius connection using MAC address" << mac.toString(); - NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(mac); - m_monitors.insert(thing, monitor); - connection = new FroniusSolarConnection(hardwareManager()->networkManager(), monitor->networkDeviceInfo().address(), thing); - connect(monitor, &NetworkDeviceMonitor::networkDeviceInfoChanged, this, [=](const NetworkDeviceInfo &networkDeviceInfo){ - qCDebug(dcFronius()) << "Network device info changed for" << thing << networkDeviceInfo; - if (networkDeviceInfo.isValid()) { - connection->setAddress(networkDeviceInfo.address()); - refreshConnection(connection); - } else { - connection->setAddress(QHostAddress()); - } - }); - } else if (!address.isNull()) { - qCInfo(dcFronius()) << "Setting up Fronius connection based on IP address" << address.toString() << "without monitoring. Any IP changed will not be recognized and the device will be disconnected."; - connection = new FroniusSolarConnection(hardwareManager()->networkManager(), address, thing); - } else { - qCWarning(dcFronius()) << "Unable to set up thing" << thing << ", neither IP nor MAC is valid." << thing->params(); - info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("Please reconfigure the device.")); + NetworkDeviceMonitor *monitor = hardwareManager()->networkDeviceDiscovery()->registerMonitor(thing); + if (!monitor) { + qCWarning(dcFronius()) << "Unable to register monitor with the given params" << thing->params(); + info->finish(Thing::ThingErrorInvalidParameter, QT_TR_NOOP("Unable to set up the connection with this configuration, please reconfigure the connection.")); return; } + qCInfo(dcFronius()) << "Set up Fronius connection " << monitor; + m_monitors.insert(thing, monitor); + + FroniusSolarConnection *connection = new FroniusSolarConnection(hardwareManager()->networkManager(), monitor->networkDeviceInfo().address(), thing); + connect(monitor, &NetworkDeviceMonitor::networkDeviceInfoChanged, this, [=](const NetworkDeviceInfo &networkDeviceInfo){ + qCDebug(dcFronius()) << "Network device info changed for" << thing << networkDeviceInfo; + if (networkDeviceInfo.isValid()) { + connection->setAddress(networkDeviceInfo.address()); + refreshConnection(connection); + } else { + connection->setAddress(QHostAddress()); + } + }); + connect(connection, &FroniusSolarConnection::availableChanged, this, [=](bool available){ qCDebug(dcFronius()) << thing << "Available changed" << available; thing->setStateValue("connected", available); @@ -168,7 +159,6 @@ void IntegrationPluginFronius::setupThing(ThingSetupInfo *info) } }); - if (info->isInitialSetup()) { // Verify the version FroniusNetworkReply *reply = connection->getVersion(); diff --git a/fronius/integrationpluginfronius.json b/fronius/integrationpluginfronius.json index ed0e59354..c8f93aadd 100644 --- a/fronius/integrationpluginfronius.json +++ b/fronius/integrationpluginfronius.json @@ -13,7 +13,7 @@ "name": "connection", "displayName": "Fronius Solar", "createMethods": ["discovery", "user"], - "interfaces": ["gateway"], + "interfaces": ["gateway", "networkdevice"], "providedInterfaces": ["energymeter", "solarinverter", "energystorage"], "paramTypes": [ { @@ -24,9 +24,16 @@ "inputType": "IPv4Address", "defaultValue": "" }, + { + "id": "05d05a5f-7da1-4198-b281-5199dc660acc", + "name": "hostName", + "displayName": "Host name", + "type": "QString", + "defaultValue": "" + }, { "id": "2237972e-385b-4458-b5d3-1d1fb4ae8756", - "name": "mac", + "name": "macAddress", "displayName": "Mac address", "type": "QString", "readOnly": true, diff --git a/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-de.ts b/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-de.ts index bb5c7fb5a..0e6efa18d 100644 --- a/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-de.ts +++ b/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-de.ts @@ -9,22 +9,27 @@ Das Netzwerk kann nicht durchsucht werden. - + + Unable to set up the connection with this configuration, please reconfigure the connection. + Es konnte keine Verbindung mit diesen Einstellungen hergstellt werden, bitte richte das Gerät neu ein. + + + The device does not reply to our requests. Please verify that the Fronius Solar API is enabled on the device. Das Gerät antwortet nicht auf Anfragen. Bitte überprüfe ob die Fronius Solar API am Gerät aktiviert ist. - + The device is not reachable. Das Gerät ist nicht erreichbar. - + The data received from the device could not be processed because the format is unknown. Die erhaltene Antwort des Gerätes konnte nicht verarbeitet werden da das Format unbekannt ist. - + The firmware version 1.6-2 of this Fronius data logger contains errors preventing proper operation. Please update your Fronius device and try again. Die Firmware Version 1.6-2 dieses Fronius Geräts enthält Fehler welche eine ordnungsgemäße Funktion verhindern. Bitte update die Firmware des Fronius Geräts und versuche es erneut. @@ -32,92 +37,110 @@ fronius - + Battery level The name of the StateType ({5c6da672-9662-41bc-8c8c-aa0f32481251}) of ThingClass storage Batteriestand - + Battery level critical The name of the StateType ({e5396312-b50e-4d6f-b628-5b51448971d3}) of ThingClass storage Batteriestand kritisch - + Capacity The name of the StateType ({3b163deb-67a2-41d1-8441-b2d53ad846ef}) of ThingClass storage - + Kapazität - + Cell temperature The name of the StateType ({4417499c-1757-4309-868a-be5cf3455c4a}) of ThingClass storage Zellentemperatur - + Current phase A The name of the StateType ({a9673688-d84a-4848-8583-a70739130252}) of ThingClass meter - + Strom Phase A - + Current phase B The name of the StateType ({15632e49-95f9-496d-830c-53a31ca6d98e}) of ThingClass meter - + Strom Phase B - + Current phase C The name of the StateType ({10a24ba9-a57a-48a9-98f3-52671c09e855}) of ThingClass meter - + Strom Phase C - + Current power phase A The name of the StateType ({6dbbb062-447b-47d6-b2e4-dceac9aff795}) of ThingClass meter - + Leistung Phase A - + Current power phase B The name of the StateType ({f230e78e-15b0-47a4-b494-bae65be00755}) of ThingClass meter - + Leistung Phase B - + Current power phase C The name of the StateType ({56b5d550-d902-4c33-9288-8ee972735a75}) of ThingClass meter - + Leistung Phase C - + Frequency The name of the StateType ({9ff64b29-e023-4395-abd4-b6c366acfd9e}) of ThingClass meter - + Frequenz - + Fronius smart meter The name of the ThingClass ({c3cb53a4-32dd-434d-9d9c-aada41f8129c}) - + Fronius Zähler - + Fronius solar inverter The name of the ThingClass ({540aa956-8b8f-4982-9f58-343a76cea846}) - + Fronius Inverter - + Fronius solar storage The name of the ThingClass ({b00139fa-7386-48b1-8697-2fdd21a57ced}) - + Fronius Energiespeicher + + + + charging + The name of a possible value of StateType {7a045257-d829-4e58-a769-047b3aeec7c5} of ThingClass storage + laden + + + + discharging + The name of a possible value of StateType {7a045257-d829-4e58-a769-047b3aeec7c5} of ThingClass storage + entladen - - + + idle + The name of a possible value of StateType {7a045257-d829-4e58-a769-047b3aeec7c5} of ThingClass storage + Leerlauf + + + + Current power The name of the StateType ({5a89cd3f-3abf-4f51-ab2b-4039f1d211d9}) of ThingClass storage ---------- @@ -125,9 +148,9 @@ The name of the StateType ({788accbc-b86e-471b-b37f-14c9c6411526}) of ThingClass Aktuelle Leistung - - - + + + Device ID The name of the ParamType (ThingClass: storage, Type: thing, ID: {49087f31-abf5-4bb8-946b-a3626ee80566}) ---------- @@ -137,50 +160,50 @@ The name of the ParamType (ThingClass: inverter, Type: thing, ID: {f2f8c2f5-dd6a Geräte ID - + Energy Consumed The name of the StateType ({f3451818-48d2-42a5-94fd-ad094c06967f}) of ThingClass meter Energie verbraucht - + Energy produced The name of the StateType ({ca14cca5-d9f0-49c5-a8f7-907d4c0825f0}) of ThingClass meter - + Erzeugte Energie - + Current power usage The name of the StateType ({e5056ea1-88a2-410b-9c5e-6322aca4cb17}) of ThingClass meter - + Aktuelle Leistung - + Charging state The name of the StateType ({7a045257-d829-4e58-a769-047b3aeec7c5}) of ThingClass storage - + Ladezustand - + Energy produced today The name of the StateType ({b6af1bf5-753d-47b6-a151-e4d801fe6ff8}) of ThingClass inverter - + Erzeute Energie heute - + Energy produced year The name of the StateType ({7fd2fa28-9bcc-4f01-a823-459437d185f6}) of ThingClass inverter - + Erzeugte Energie Jahr - + Fronius The name of the vendor ({2286fc38-afd9-4128-ab7e-0fba527d53ba}) Fronius - - + + Fronius Solar The name of the ThingClass ({4fd79fed-42f1-4df9-be64-3df7b2e0bda2}) ---------- @@ -188,28 +211,34 @@ The name of the plugin fronius ({02319cfc-8b55-49ba-99bc-0588bbfab063})Fronius Solar - + + Host name + The name of the ParamType (ThingClass: connection, Type: thing, ID: {05d05a5f-7da1-4198-b281-5199dc660acc}) + Hostname + + + Mac address The name of the ParamType (ThingClass: connection, Type: thing, ID: {2237972e-385b-4458-b5d3-1d1fb4ae8756}) - + MAC-Adresse - + Version The name of the StateType ({8fd0c0ed-af89-4887-bf0f-040b13c25268}) of ThingClass connection - + Version - + Host address The name of the ParamType (ThingClass: connection, Type: thing, ID: {52da0197-4b78-4fec-aa72-70f949e26edc}) Adresse - - - - + + + + Reachable The name of the StateType ({2f7e1267-b0be-4b78-9aa3-832b86c4efad}) of ThingClass storage ---------- @@ -221,40 +250,40 @@ The name of the StateType ({98e4476f-e745-4a7f-b795-19269cb70c40}) of ThingClass Erreichbar - - - + + + Serial number The name of the ParamType (ThingClass: storage, Type: thing, ID: {8b6c7053-5ba5-4808-8ff4-9024c624d77d}) ---------- The name of the ParamType (ThingClass: meter, Type: thing, ID: {dfc2eeef-38b2-4089-9953-48186aaee060}) ---------- The name of the ParamType (ThingClass: inverter, Type: thing, ID: {5e073a9d-f2de-4ff4-95f1-065a0ef4d51b}) - + Seriennummer - + Total produced energy The name of the StateType ({d6dbb879-4cbc-4db3-830e-b92ba91a13e5}) of ThingClass inverter - + Produzierte Energie - + Voltage phase A The name of the StateType ({267bc59f-1113-4aff-a502-4618a591aa16}) of ThingClass meter - + Spannung Phase A - + Voltage phase B The name of the StateType ({bbcedb80-30f1-493e-81f0-5f77f2847353}) of ThingClass meter - + Spannung Phase B - + Voltage phase C The name of the StateType ({8037557b-40dc-411b-8937-bcd1695f898a}) of ThingClass meter - + Spannung Phase C diff --git a/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-en_US.ts b/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-en_US.ts index 9491e8b9b..24b6bfa69 100644 --- a/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-en_US.ts +++ b/fronius/translations/02319cfc-8b55-49ba-99bc-0588bbfab063-en_US.ts @@ -9,22 +9,27 @@ - + + Unable to set up the connection with this configuration, please reconfigure the connection. + + + + The device does not reply to our requests. Please verify that the Fronius Solar API is enabled on the device. - + The device is not reachable. - + The data received from the device could not be processed because the format is unknown. - + The firmware version 1.6-2 of this Fronius data logger contains errors preventing proper operation. Please update your Fronius device and try again. @@ -32,92 +37,110 @@ fronius - + Battery level The name of the StateType ({5c6da672-9662-41bc-8c8c-aa0f32481251}) of ThingClass storage - + Battery level critical The name of the StateType ({e5396312-b50e-4d6f-b628-5b51448971d3}) of ThingClass storage - + Capacity The name of the StateType ({3b163deb-67a2-41d1-8441-b2d53ad846ef}) of ThingClass storage - + Cell temperature The name of the StateType ({4417499c-1757-4309-868a-be5cf3455c4a}) of ThingClass storage - + Current phase A The name of the StateType ({a9673688-d84a-4848-8583-a70739130252}) of ThingClass meter - + Current phase B The name of the StateType ({15632e49-95f9-496d-830c-53a31ca6d98e}) of ThingClass meter - + Current phase C The name of the StateType ({10a24ba9-a57a-48a9-98f3-52671c09e855}) of ThingClass meter - + Current power phase A The name of the StateType ({6dbbb062-447b-47d6-b2e4-dceac9aff795}) of ThingClass meter - + Current power phase B The name of the StateType ({f230e78e-15b0-47a4-b494-bae65be00755}) of ThingClass meter - + Current power phase C The name of the StateType ({56b5d550-d902-4c33-9288-8ee972735a75}) of ThingClass meter - + Frequency The name of the StateType ({9ff64b29-e023-4395-abd4-b6c366acfd9e}) of ThingClass meter - + Fronius smart meter The name of the ThingClass ({c3cb53a4-32dd-434d-9d9c-aada41f8129c}) - + Fronius solar inverter The name of the ThingClass ({540aa956-8b8f-4982-9f58-343a76cea846}) - + Fronius solar storage The name of the ThingClass ({b00139fa-7386-48b1-8697-2fdd21a57ced}) - - + + charging + The name of a possible value of StateType {7a045257-d829-4e58-a769-047b3aeec7c5} of ThingClass storage + + + + + discharging + The name of a possible value of StateType {7a045257-d829-4e58-a769-047b3aeec7c5} of ThingClass storage + + + + + idle + The name of a possible value of StateType {7a045257-d829-4e58-a769-047b3aeec7c5} of ThingClass storage + + + + + Current power The name of the StateType ({5a89cd3f-3abf-4f51-ab2b-4039f1d211d9}) of ThingClass storage ---------- @@ -125,9 +148,9 @@ The name of the StateType ({788accbc-b86e-471b-b37f-14c9c6411526}) of ThingClass - - - + + + Device ID The name of the ParamType (ThingClass: storage, Type: thing, ID: {49087f31-abf5-4bb8-946b-a3626ee80566}) ---------- @@ -137,50 +160,50 @@ The name of the ParamType (ThingClass: inverter, Type: thing, ID: {f2f8c2f5-dd6a - + Energy Consumed The name of the StateType ({f3451818-48d2-42a5-94fd-ad094c06967f}) of ThingClass meter - + Energy produced The name of the StateType ({ca14cca5-d9f0-49c5-a8f7-907d4c0825f0}) of ThingClass meter - + Current power usage The name of the StateType ({e5056ea1-88a2-410b-9c5e-6322aca4cb17}) of ThingClass meter - + Charging state The name of the StateType ({7a045257-d829-4e58-a769-047b3aeec7c5}) of ThingClass storage - + Energy produced today The name of the StateType ({b6af1bf5-753d-47b6-a151-e4d801fe6ff8}) of ThingClass inverter - + Energy produced year The name of the StateType ({7fd2fa28-9bcc-4f01-a823-459437d185f6}) of ThingClass inverter - + Fronius The name of the vendor ({2286fc38-afd9-4128-ab7e-0fba527d53ba}) - - + + Fronius Solar The name of the ThingClass ({4fd79fed-42f1-4df9-be64-3df7b2e0bda2}) ---------- @@ -188,28 +211,34 @@ The name of the plugin fronius ({02319cfc-8b55-49ba-99bc-0588bbfab063}) - + + Host name + The name of the ParamType (ThingClass: connection, Type: thing, ID: {05d05a5f-7da1-4198-b281-5199dc660acc}) + + + + Mac address The name of the ParamType (ThingClass: connection, Type: thing, ID: {2237972e-385b-4458-b5d3-1d1fb4ae8756}) - + Version The name of the StateType ({8fd0c0ed-af89-4887-bf0f-040b13c25268}) of ThingClass connection - + Host address The name of the ParamType (ThingClass: connection, Type: thing, ID: {52da0197-4b78-4fec-aa72-70f949e26edc}) - - - - + + + + Reachable The name of the StateType ({2f7e1267-b0be-4b78-9aa3-832b86c4efad}) of ThingClass storage ---------- @@ -221,9 +250,9 @@ The name of the StateType ({98e4476f-e745-4a7f-b795-19269cb70c40}) of ThingClass - - - + + + Serial number The name of the ParamType (ThingClass: storage, Type: thing, ID: {8b6c7053-5ba5-4808-8ff4-9024c624d77d}) ---------- @@ -233,25 +262,25 @@ The name of the ParamType (ThingClass: inverter, Type: thing, ID: {5e073a9d-f2de - + Total produced energy The name of the StateType ({d6dbb879-4cbc-4db3-830e-b92ba91a13e5}) of ThingClass inverter - + Voltage phase A The name of the StateType ({267bc59f-1113-4aff-a502-4618a591aa16}) of ThingClass meter - + Voltage phase B The name of the StateType ({bbcedb80-30f1-493e-81f0-5f77f2847353}) of ThingClass meter - + Voltage phase C The name of the StateType ({8037557b-40dc-411b-8937-bcd1695f898a}) of ThingClass meter