From 270a7f4933873d7354b605607e04affde6cb0305 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 24 Apr 2023 22:25:15 +0200 Subject: [PATCH 1/5] Rename UNIT_VA to UNIT_VAR --- lib/Hoymiles/src/inverters/HMS_1CH.cpp | 2 +- lib/Hoymiles/src/inverters/HMS_2CH.cpp | 2 +- lib/Hoymiles/src/inverters/HMS_4CH.cpp | 2 +- lib/Hoymiles/src/inverters/HMT_6CH.cpp | 2 +- lib/Hoymiles/src/inverters/HM_1CH.cpp | 2 +- lib/Hoymiles/src/inverters/HM_2CH.cpp | 2 +- lib/Hoymiles/src/inverters/HM_4CH.cpp | 2 +- lib/Hoymiles/src/parser/StatisticsParser.h | 2 +- 8 files changed, 8 insertions(+), 8 deletions(-) diff --git a/lib/Hoymiles/src/inverters/HMS_1CH.cpp b/lib/Hoymiles/src/inverters/HMS_1CH.cpp index 3ce8002a..5351131c 100644 --- a/lib/Hoymiles/src/inverters/HMS_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_1CH.cpp @@ -15,7 +15,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 14, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 22, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 18, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 20, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 20, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 16, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 24, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HMS_2CH.cpp b/lib/Hoymiles/src/inverters/HMS_2CH.cpp index ffd5311f..9c875981 100644 --- a/lib/Hoymiles/src/inverters/HMS_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_2CH.cpp @@ -22,7 +22,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 26, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 34, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 30, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 32, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 32, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 28, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 36, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HMS_4CH.cpp b/lib/Hoymiles/src/inverters/HMS_4CH.cpp index c4f22ee5..a2f9f9c6 100644 --- a/lib/Hoymiles/src/inverters/HMS_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_4CH.cpp @@ -36,7 +36,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 50, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 58, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 54, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 56, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 56, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 52, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 60, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HMT_6CH.cpp b/lib/Hoymiles/src/inverters/HMT_6CH.cpp index b8721831..384f58e9 100644 --- a/lib/Hoymiles/src/inverters/HMT_6CH.cpp +++ b/lib/Hoymiles/src/inverters/HMT_6CH.cpp @@ -56,7 +56,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC_31, UNIT_V, 78, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 80, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 82, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 84, 2, 10, true, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 84, 2, 10, true, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 86, 2, 100, false, 2 }, // dummy { TYPE_AC, CH0, FLD_IAC_1, UNIT_A, 86, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_IAC_2, UNIT_A, 88, 2, 100, false, 2 }, diff --git a/lib/Hoymiles/src/inverters/HM_1CH.cpp b/lib/Hoymiles/src/inverters/HM_1CH.cpp index 5513aead..f8f20886 100644 --- a/lib/Hoymiles/src/inverters/HM_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_1CH.cpp @@ -15,7 +15,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 14, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 22, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 18, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 20, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 20, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 16, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 24, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HM_2CH.cpp b/lib/Hoymiles/src/inverters/HM_2CH.cpp index e0ba644d..e029dce5 100644 --- a/lib/Hoymiles/src/inverters/HM_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_2CH.cpp @@ -23,7 +23,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 26, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 34, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 30, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 32, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 32, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 28, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 36, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HM_4CH.cpp b/lib/Hoymiles/src/inverters/HM_4CH.cpp index a8195545..23a2d9c1 100644 --- a/lib/Hoymiles/src/inverters/HM_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_4CH.cpp @@ -36,7 +36,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 46, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 54, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 50, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VA, 52, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 52, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 48, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 56, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/parser/StatisticsParser.h b/lib/Hoymiles/src/parser/StatisticsParser.h index f4e51b6a..fb6b2ba6 100644 --- a/lib/Hoymiles/src/parser/StatisticsParser.h +++ b/lib/Hoymiles/src/parser/StatisticsParser.h @@ -17,7 +17,7 @@ enum UnitId_t { UNIT_HZ, UNIT_C, UNIT_PCT, - UNIT_VA, + UNIT_VAR, UNIT_NONE }; const char* const units[] = { "V", "A", "W", "Wh", "kWh", "Hz", "°C", "%", "var", "" }; From 98da2b64e2979af77a655680b8ddef41762b152e Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 24 Apr 2023 22:29:59 +0200 Subject: [PATCH 2/5] Rename FLD_PRA to FLD_Q --- include/MqttHandleHass.h | 2 +- include/MqttHandleInverter.h | 2 +- include/WebApi_prometheus.h | 2 +- lib/Hoymiles/src/inverters/HMS_1CH.cpp | 2 +- lib/Hoymiles/src/inverters/HMS_2CH.cpp | 2 +- lib/Hoymiles/src/inverters/HMS_4CH.cpp | 2 +- lib/Hoymiles/src/inverters/HMT_6CH.cpp | 2 +- lib/Hoymiles/src/inverters/HM_1CH.cpp | 2 +- lib/Hoymiles/src/inverters/HM_2CH.cpp | 2 +- lib/Hoymiles/src/inverters/HM_4CH.cpp | 2 +- lib/Hoymiles/src/parser/StatisticsParser.h | 2 +- src/WebApi_prometheus.cpp | 2 +- src/WebApi_ws_live.cpp | 2 +- 13 files changed, 13 insertions(+), 13 deletions(-) diff --git a/include/MqttHandleHass.h b/include/MqttHandleHass.h index 45d11cfb..5bf7e71e 100644 --- a/include/MqttHandleHass.h +++ b/include/MqttHandleHass.h @@ -44,7 +44,7 @@ const byteAssign_fieldDeviceClass_t deviceFieldAssignment[] = { { FLD_PF, DEVICE_CLS_POWER_FACTOR, STATE_CLS_MEASUREMENT }, { FLD_EFF, DEVICE_CLS_NONE, STATE_CLS_NONE }, { FLD_IRR, DEVICE_CLS_NONE, STATE_CLS_NONE }, - { FLD_PRA, DEVICE_CLS_REACTIVE_POWER, STATE_CLS_MEASUREMENT } + { FLD_Q, DEVICE_CLS_REACTIVE_POWER, STATE_CLS_MEASUREMENT } }; #define DEVICE_CLS_ASSIGN_LIST_LEN (sizeof(deviceFieldAssignment) / sizeof(byteAssign_fieldDeviceClass_t)) diff --git a/include/MqttHandleInverter.h b/include/MqttHandleInverter.h index 9df43cb7..ee427503 100644 --- a/include/MqttHandleInverter.h +++ b/include/MqttHandleInverter.h @@ -33,7 +33,7 @@ private: FLD_PF, FLD_EFF, FLD_IRR, - FLD_PRA + FLD_Q }; }; diff --git a/include/WebApi_prometheus.h b/include/WebApi_prometheus.h index f2b5b66a..4a77acdd 100644 --- a/include/WebApi_prometheus.h +++ b/include/WebApi_prometheus.h @@ -40,6 +40,6 @@ private: { FLD_PF, METRIC_TYPE_GAUGE }, { FLD_EFF, METRIC_TYPE_GAUGE }, { FLD_IRR, METRIC_TYPE_GAUGE }, - { FLD_PRA, METRIC_TYPE_GAUGE } + { FLD_Q, METRIC_TYPE_GAUGE } }; }; \ No newline at end of file diff --git a/lib/Hoymiles/src/inverters/HMS_1CH.cpp b/lib/Hoymiles/src/inverters/HMS_1CH.cpp index 5351131c..a935a60b 100644 --- a/lib/Hoymiles/src/inverters/HMS_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_1CH.cpp @@ -15,7 +15,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 14, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 22, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 18, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 20, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 20, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 16, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 24, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HMS_2CH.cpp b/lib/Hoymiles/src/inverters/HMS_2CH.cpp index 9c875981..12925d0f 100644 --- a/lib/Hoymiles/src/inverters/HMS_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_2CH.cpp @@ -22,7 +22,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 26, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 34, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 30, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 32, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 32, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 28, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 36, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HMS_4CH.cpp b/lib/Hoymiles/src/inverters/HMS_4CH.cpp index a2f9f9c6..b0ca6207 100644 --- a/lib/Hoymiles/src/inverters/HMS_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HMS_4CH.cpp @@ -36,7 +36,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 50, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 58, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 54, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 56, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 56, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 52, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 60, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HMT_6CH.cpp b/lib/Hoymiles/src/inverters/HMT_6CH.cpp index 384f58e9..eea3353d 100644 --- a/lib/Hoymiles/src/inverters/HMT_6CH.cpp +++ b/lib/Hoymiles/src/inverters/HMT_6CH.cpp @@ -56,7 +56,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC_31, UNIT_V, 78, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 80, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 82, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 84, 2, 10, true, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 84, 2, 10, true, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 86, 2, 100, false, 2 }, // dummy { TYPE_AC, CH0, FLD_IAC_1, UNIT_A, 86, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_IAC_2, UNIT_A, 88, 2, 100, false, 2 }, diff --git a/lib/Hoymiles/src/inverters/HM_1CH.cpp b/lib/Hoymiles/src/inverters/HM_1CH.cpp index f8f20886..0d54e445 100644 --- a/lib/Hoymiles/src/inverters/HM_1CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_1CH.cpp @@ -15,7 +15,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 14, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 22, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 18, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 20, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 20, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 16, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 24, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HM_2CH.cpp b/lib/Hoymiles/src/inverters/HM_2CH.cpp index e029dce5..01252992 100644 --- a/lib/Hoymiles/src/inverters/HM_2CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_2CH.cpp @@ -23,7 +23,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 26, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 34, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 30, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 32, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 32, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 28, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 36, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/inverters/HM_4CH.cpp b/lib/Hoymiles/src/inverters/HM_4CH.cpp index 23a2d9c1..5ac57b4c 100644 --- a/lib/Hoymiles/src/inverters/HM_4CH.cpp +++ b/lib/Hoymiles/src/inverters/HM_4CH.cpp @@ -36,7 +36,7 @@ static const byteAssign_t byteAssignment[] = { { TYPE_AC, CH0, FLD_UAC, UNIT_V, 46, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_IAC, UNIT_A, 54, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PAC, UNIT_W, 50, 2, 10, false, 1 }, - { TYPE_AC, CH0, FLD_PRA, UNIT_VAR, 52, 2, 10, false, 1 }, + { TYPE_AC, CH0, FLD_Q, UNIT_VAR, 52, 2, 10, false, 1 }, { TYPE_AC, CH0, FLD_F, UNIT_HZ, 48, 2, 100, false, 2 }, { TYPE_AC, CH0, FLD_PF, UNIT_NONE, 56, 2, 1000, false, 3 }, diff --git a/lib/Hoymiles/src/parser/StatisticsParser.h b/lib/Hoymiles/src/parser/StatisticsParser.h index fb6b2ba6..f4bf7ae0 100644 --- a/lib/Hoymiles/src/parser/StatisticsParser.h +++ b/lib/Hoymiles/src/parser/StatisticsParser.h @@ -37,7 +37,7 @@ enum FieldId_t { FLD_PF, FLD_EFF, FLD_IRR, - FLD_PRA, + FLD_Q, FLD_EVT_LOG, // HMT only FLD_UAC_1N, diff --git a/src/WebApi_prometheus.cpp b/src/WebApi_prometheus.cpp index f0bcff67..d921dac6 100644 --- a/src/WebApi_prometheus.cpp +++ b/src/WebApi_prometheus.cpp @@ -85,7 +85,7 @@ void WebApiPrometheusClass::onPrometheusMetricsGet(AsyncWebServerRequest* reques addField(stream, serial, i, inv, t, c, FLD_F); addField(stream, serial, i, inv, t, c, FLD_T); addField(stream, serial, i, inv, t, c, FLD_PF); - addField(stream, serial, i, inv, t, c, FLD_PRA); + addField(stream, serial, i, inv, t, c, FLD_Q); addField(stream, serial, i, inv, t, c, FLD_EFF); addField(stream, serial, i, inv, t, c, FLD_IRR); } diff --git a/src/WebApi_ws_live.cpp b/src/WebApi_ws_live.cpp index 9d8c22d5..b9919ebc 100644 --- a/src/WebApi_ws_live.cpp +++ b/src/WebApi_ws_live.cpp @@ -141,7 +141,7 @@ void WebApiWsLiveClass::generateJsonResponse(JsonVariant& root) addField(chanTypeObj, i, inv, t, c, FLD_F); addField(chanTypeObj, i, inv, t, c, FLD_T); addField(chanTypeObj, i, inv, t, c, FLD_PF); - addField(chanTypeObj, i, inv, t, c, FLD_PRA); + addField(chanTypeObj, i, inv, t, c, FLD_Q); addField(chanTypeObj, i, inv, t, c, FLD_EFF); if (t == TYPE_DC && inv->Statistics()->getStringMaxPower(c) > 0) { addField(chanTypeObj, i, inv, t, c, FLD_IRR); From bf648a586f08a89b6be1cf6a1bb2c1997549395c Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Mon, 24 Apr 2023 22:55:20 +0200 Subject: [PATCH 3/5] Doc: Added new total MQTT topics --- docs/MQTT_Topics.md | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/docs/MQTT_Topics.md b/docs/MQTT_Topics.md index 3445486e..20ad0f24 100644 --- a/docs/MQTT_Topics.md +++ b/docs/MQTT_Topics.md @@ -12,6 +12,20 @@ The base topic, as configured in the web GUI is prepended to all follwing topics | dtu/status | R | Indicates whether OpenDTU network is reachable | online / offline | | dtu/uptime | R | Time in seconds since startup | seconds | +## Inverter total topicss + +Enabled inverter means, that only inverters with "Poll inverter data" enabled are considered. + +| Topic | R / W | Description | Value / Unit | +| --------------------------------------- | ----- | ---------------------------------------------------- | -------------------------- | +| ac/power | R | Sum of AC active power of all enabled inverters | W | +| ac/yieldtotal | R | Sum of energy converted to AC since reset watt hours of all enabled inverters | Kilo watt hours (kWh) | +| ac/yieldday | R | Sum of energy converted to AC per day in watt hours of all enabled inverters | Watt hours (Wh) +| ac/is_valid | R | Indicator whether all enabled inverters where reachable | 0 or 1 | +| dc/power | R | Sum of DC power of all enabled inverters | Watt (W) | +| dc/irradiation | R | Produced power of all enabled inverter stripes with defined irradiation settings divided by sum of all enabled inverters irradiation | % | +| dc/is_valid | R | Indicator whether all enabled inverters where reachable | 0 or 1 | + ## Inverter specific topics serial will be replaced with the serial number of the inverter. From 5996fb0edfd7ce1b691160f611d4a2bcf11bf423 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 25 Apr 2023 18:43:56 +0200 Subject: [PATCH 4/5] Fix: MQTT topics ac/yieldday and ac/yieldtotal are swapped Fix #843 --- src/MqttHandleInverterTotal.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/MqttHandleInverterTotal.cpp b/src/MqttHandleInverterTotal.cpp index 6d14576c..a0c3a38c 100644 --- a/src/MqttHandleInverterTotal.cpp +++ b/src/MqttHandleInverterTotal.cpp @@ -65,8 +65,8 @@ void MqttHandleInverterTotalClass::loop() } MqttSettings.publish("ac/power", String(totalAcPower, static_cast(totalAcPowerDigits))); - MqttSettings.publish("ac/yieldtotal", String(totalAcYieldDay, static_cast(totalAcYieldDayDigits))); - MqttSettings.publish("ac/yieldday", String(totalAcYieldTotal, static_cast(totalAcYieldTotalDigits))); + MqttSettings.publish("ac/yieldtotal", String(totalAcYieldTotal, static_cast(totalAcYieldTotalDigits))); + MqttSettings.publish("ac/yieldday", String(totalAcYieldDay, static_cast(totalAcYieldDayDigits))); MqttSettings.publish("ac/is_valid", String(totalReachable)); MqttSettings.publish("dc/power", String(totalDcPower, static_cast(totalAcPowerDigits))); MqttSettings.publish("dc/irradiation", String(totalDcPowerIrrInst > 0 ? totalDcPowerIrr / totalDcPowerIrrInst * 100.0f : 0, 3)); From 0441bbbe722c750860195b088380f703ba3a93b0 Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 25 Apr 2023 19:24:56 +0200 Subject: [PATCH 5/5] Fix: Queue consumed whole memory on inverter timeout When the poll interval was e.g. 1sec it was possible that the queue ran full and consumed the whole memory. Now new entries are only added to the queue automatically if the queue is empty. This issue also caused a lot of "DTU command failed" messages. --- lib/Hoymiles/src/Hoymiles.cpp | 2 +- lib/Hoymiles/src/HoymilesRadio.cpp | 7 ++++++- lib/Hoymiles/src/HoymilesRadio.h | 1 + 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/lib/Hoymiles/src/Hoymiles.cpp b/lib/Hoymiles/src/Hoymiles.cpp index 4ae3223d..3a9999ff 100644 --- a/lib/Hoymiles/src/Hoymiles.cpp +++ b/lib/Hoymiles/src/Hoymiles.cpp @@ -54,7 +54,7 @@ void HoymilesClass::loop() } } - if (iv != nullptr && iv->getRadio()->isInitialized() && iv->getRadio()->isIdle()) { + if (iv != nullptr && iv->getRadio()->isInitialized() && iv->getRadio()->isQueueEmpty()) { _messageOutput->print("Fetch inverter: "); _messageOutput->println(iv->serial(), HEX); diff --git a/lib/Hoymiles/src/HoymilesRadio.cpp b/lib/Hoymiles/src/HoymilesRadio.cpp index 117d45e9..8faf1727 100644 --- a/lib/Hoymiles/src/HoymilesRadio.cpp +++ b/lib/Hoymiles/src/HoymilesRadio.cpp @@ -69,4 +69,9 @@ bool HoymilesRadio::isInitialized() bool HoymilesRadio::isIdle() { return !_busyFlag; -} \ No newline at end of file +} + +bool HoymilesRadio::isQueueEmpty() +{ + return _commandQueue.size() == 0; +} diff --git a/lib/Hoymiles/src/HoymilesRadio.h b/lib/Hoymiles/src/HoymilesRadio.h index 056b61c3..2ee2ad25 100644 --- a/lib/Hoymiles/src/HoymilesRadio.h +++ b/lib/Hoymiles/src/HoymilesRadio.h @@ -12,6 +12,7 @@ public: virtual void setDtuSerial(uint64_t serial); bool isIdle(); + bool isQueueEmpty(); bool isInitialized(); template