From e0aea9b1ca5aa844c971e244d87c4612ac545423 Mon Sep 17 00:00:00 2001 From: Claudio Bartoli Date: Sun, 5 Nov 2023 14:48:09 +0100 Subject: [PATCH 01/20] adds inverter hyd-zss-hp-3k-6k --- custom_components/solarman/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/custom_components/solarman/const.py b/custom_components/solarman/const.py index 7673fc3..d903f89 100644 --- a/custom_components/solarman/const.py +++ b/custom_components/solarman/const.py @@ -11,6 +11,7 @@ 'deye_hybrid.yaml', 'deye_sg04lp3.yaml', 'deye_string.yaml', + 'hyd-zss-hp-3k-6k.yaml', 'kstar_hybrid.yaml', 'sofar_g3hyd.yaml', 'sofar_hyd3k-6k-es.yaml', From 00a9a1d5dde0bc3336dfe81e7b38f1f00b2d7dd8 Mon Sep 17 00:00:00 2001 From: Claudio Bartoli Date: Sun, 5 Nov 2023 14:57:29 +0100 Subject: [PATCH 02/20] integrating real time registers https://github.com/StephanJoubert/home_assistant_solarman/discussions/148#discussioncomment-6902081 --- .../hyd-zss-hp-3k-6k.yaml | 64 +++++++++++++++---- 1 file changed, 50 insertions(+), 14 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/hyd-zss-hp-3k-6k.yaml b/custom_components/solarman/inverter_definitions/hyd-zss-hp-3k-6k.yaml index ddf3f19..f230bc0 100644 --- a/custom_components/solarman/inverter_definitions/hyd-zss-hp-3k-6k.yaml +++ b/custom_components/solarman/inverter_definitions/hyd-zss-hp-3k-6k.yaml @@ -2,24 +2,33 @@ # with LSW-3 WiFi logger with SN 27xxxxxxxx and FW LSW3_15_270A_1.53: requests: - - start: 0x0400 - end: 0x042B + - start: 0x0404 + end: 0x0410 mb_functioncode: 0x03 - - start: 0x0482 - end: 0x04A4 + - start: 0x0418 + end: 0x041A + mb_functioncode: 0x03 + - start: 0x042b + end: 0x042b mb_functioncode: 0x03 - - start: 0x0582 + - start: 0x0484 + end: 0x048d + mb_functioncode: 0x03 + - start: 0x04AF + end: 0x04AF + mb_functioncode: 0x03 + - start: 0x0504 + end: 0x0504 + mb_functioncode: 0x03 + - start: 0x0584 end: 0x0589 mb_functioncode: 0x03 - start: 0x0604 end: 0x060A mb_functioncode: 0x03 - - start: 0x0682 + - start: 0x0683 end: 0x069B mb_functioncode: 0x03 - - start: 0x0504 - end: 0x0504 - mb_functioncode: 0x03 parameters: - group: Solar @@ -174,8 +183,8 @@ parameters: - name: "Battery Power" class: "power" state_class: "measurement" - uom: "KW" - scale: 0.01 + uom: "W" + scale: 10 rule: 2 registers: [0x0606] icon: 'mdi:battery-charging-high' @@ -200,6 +209,24 @@ parameters: - group: Grid items: + - name: "Grid Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 10 + rule: 2 + registers: [0x0488] + icon: 'mdi:transmission-tower' + + - name: 'Grid Voltage' + class: 'voltage' + state_class: 'measurement' + uom: 'V' + scale: 0.1 + rule: 1 + registers: [0x048d] + icon: 'mdi:transmission-tower' + - name: 'Grid Frequency' class: 'frequency' state_class: 'measurement' @@ -207,7 +234,7 @@ parameters: scale: 0.01 rule: 1 registers: [0x0484] - icon: 'mdi:home-lightning-bolt' + icon: 'mdi:transmission-tower' - name: 'Active Power Output Total' class: 'power' @@ -217,7 +244,16 @@ parameters: rule: 2 registers: [0x0485] icon: 'mdi:home-lightning-bolt' - + + - name: 'Home Consumption' + class: 'power' + state_class: 'measurement' + uom: 'W' + scale: 10 + rule: 2 + registers: [0x04AF] + icon: 'mdi:home-lightning-bolt' + - name: 'Active Power Load Total' class: 'power' state_class: 'measurement' @@ -312,7 +348,7 @@ parameters: - name: 'Insulation Resistance' class: '' state_class: 'measurement' - uom: 'Ω' + uom: 'kΩ' scale: 1 rule: 1 registers: [0x042B] From 868fd8d33752aa7cfc12c79ede2fa5014e46ddbc Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Mon, 27 Nov 2023 16:41:51 +0100 Subject: [PATCH 03/20] amending the deye_sg04lp3.yaml file with all suggestions from #88 --- .../inverter_definitions/deye_sg04lp3.yaml | 108 +++++++++++++++++- 1 file changed, 107 insertions(+), 1 deletion(-) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index 3a61eef..5e1fe02 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -3,11 +3,14 @@ requests: - start: 0x0003 - end: 0x0059 + end: 0x0085 mb_functioncode: 0x03 - start: 0x0202 end: 0x022E mb_functioncode: 0x03 + - start: 0x0218 + end: 0x021A + mb_functioncode: 0x03 - start: 0x024A end: 0x024F mb_functioncode: 0x03 @@ -17,6 +20,9 @@ requests: - start: 0x0284 end: 0x028D mb_functioncode: 0x03 + - start: 0x0295 + end: 0x029B + mb_functioncode: 0x03 - start: 0x02A0 end: 0x02A7 mb_functioncode: 0x03 @@ -511,6 +517,106 @@ parameters: registers: [0x000D] isstr: true + - group: SmartLoad + items: + - name: "SmartLoad Enable Status" + class: "" + state_class: "" + uom: "" + scale: 1 + rule: 1 + registers: [0x0085] + isstr: true + lookup: + - key: 0 + value: "GEN Use" + - key: 1 + value: "SMART Load output" + - key: 2 + value: "Microinverter" + icon: 'mdi:lightning-bolt-outline' + + - name: "Phase voltage of Gen port A" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0295] + icon: 'mdi:home-lightning-bolt' + + - name: "Phase voltage of Gen port B" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0296] + icon: 'mdi:home-lightning-bolt' + + - name: "Phase voltage of Gen port C" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0297] + icon: 'mdi:home-lightning-bolt' + + - name: "Phase power of Gen port A" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x0298] + icon: 'mdi:home-lightning-bolt' + + - name: "Phase power of Gen port B" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x0299] + icon: 'mdi:home-lightning-bolt' + + - name: "Phase power of Gen port C" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x029A] + icon: 'mdi:home-lightning-bolt' + + - name: "Total Power of Gen port" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x029B] + icon: 'mdi:home-l1ghtning-bolt' + + - name: "Generator daily power generation" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0218] + icon: 'mdi:transmission-tower-import' + + - name: "Generator total power generation" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0219,0x021A] + icon: 'mdi:transmission-tower-import' + - group: Alert items: - name: "Alert" From 1d76187e968f12d4abe7cd6f187f3f24bcb33e71 Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Mon, 27 Nov 2023 16:48:59 +0100 Subject: [PATCH 04/20] fixed indentation issue --- .../inverter_definitions/deye_sg04lp3.yaml | 1215 ++++++++--------- 1 file changed, 607 insertions(+), 608 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index 5e1fe02..a83d244 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -5,624 +5,623 @@ requests: - start: 0x0003 end: 0x0085 mb_functioncode: 0x03 - - start: 0x0202 + - start: 0x0202 end: 0x022E - mb_functioncode: 0x03 + mb_functioncode: 0x03 - start: 0x0218 end: 0x021A - mb_functioncode: 0x03 - - start: 0x024A + mb_functioncode: 0x03 + - start: 0x024A end: 0x024F - mb_functioncode: 0x03 + mb_functioncode: 0x03 - start: 0x0256 end: 0x027C - mb_functioncode: 0x03 - - start: 0x0284 + mb_functioncode: 0x03 + - start: 0x0284 end: 0x028D - mb_functioncode: 0x03 + mb_functioncode: 0x03 - start: 0x0295 end: 0x029B - mb_functioncode: 0x03 - - start: 0x02A0 + mb_functioncode: 0x03 + - start: 0x02A0 end: 0x02A7 mb_functioncode: 0x03 - + parameters: - - group: solar - items: - - name: "PV1 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x02A0] - icon: 'mdi:solar-power' - - - name: "PV2 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x02A1] - icon: 'mdi:solar-power' - - - name: "PV1 Voltage" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x02A4] - icon: 'mdi:solar-power' - - - name: "PV2 Voltage" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x02A6] - icon: 'mdi:solar-power' - - - name: "PV1 Current" - class: "current" - state_class: "measurement" - uom: "A" - scale: 0.1 - rule: 1 - registers: [0x02A5] - icon: 'mdi:solar-power' - - - name: "PV2 Current" - class: "current" - state_class: "measurement" - uom: "A" - scale: 0.1 - rule: 1 - registers: [0x02A7] - icon: 'mdi:solar-power' - - - name: "Daily Production" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x0211] - icon: 'mdi:solar-power' - validation: - max: 100 - invalidate_all: - - - name: "Total Production" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x0216,0x0217] - icon: 'mdi:solar-power' - - - group: Battery - items: - - - name: "Daily Battery Charge" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x0202] - icon: 'mdi:battery-plus' - - name: "Daily Battery Discharge" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x0203] - icon: 'mdi:battery-plus' - - - name: "Total Battery Charge" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x0204,0x0205] - icon: 'mdi:battery-plus' - - - name: "Total Battery Discharge" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x0206,0x0207] - icon: 'mdi:battery-minus' - - - name: "Battery Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x024E] - icon: 'mdi:battery' - - - name: "Battery Voltage" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.01 - rule: 1 - registers: [0x024B] - icon: 'mdi:battery' - - - name: "Battery SOC" - class: "battery" - state_class: "measurement" - uom: "%" - scale: 1 - rule: 1 - registers: [0x024C] - icon: 'mdi:battery' - validation: - min: 0 - max: 101 - - - name: "Battery Current" - class: "current" - state_class: "measurement" - uom: "A" - scale: 0.01 - rule: 2 - registers: [0x024F] - icon: 'mdi:battery' - - - name: "Battery Temperature" - class: "temperature" - state_class: "measurement" - uom: "°C" - scale: 0.1 - rule: 1 - offset: 1000 - registers: [0x024A] - icon: 'mdi:battery' - validation: - min: 1 - max: 99 - - - group: Grid - items: - - name: "Total Grid Power" - class: "measurement" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x0271] - icon: 'mdi:transmission-tower' - - - name: "Grid Voltage L1" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0256] - icon: 'mdi:transmission-tower' - - - name: "Grid Voltage L2" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0257] - icon: 'mdi:transmission-tower' - - - name: "Grid Voltage L3" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0258] - icon: 'mdi:transmission-tower' - - - name: "Internal CT L1 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x025C] - icon: 'mdi:transmission-tower' - - - name: "Internal CT L2 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x025D] - icon: 'mdi:transmission-tower' - - - name: "Internal CT L3 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x025E] - icon: 'mdi:transmission-tower' - - - name: "External CT L1 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x0268] - icon: 'mdi:transmission-tower' - - - name: "External CT L2 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x0269] - icon: 'mdi:transmission-tower' - - - name: "External CT L3 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x026A] - icon: 'mdi:transmission-tower' - - - name: "Daily Energy Bought" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x0208] - icon: 'mdi:transmission-tower-export' - - - name: "Total Energy Bought" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x020A,0x020B] - icon: 'mdi:transmission-tower-export' - - - name: "Daily Energy Sold" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x0209] - icon: 'mdi:transmission-tower-import' - - - name: "Total Energy Sold" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x020C,0x020D] - icon: 'mdi:transmission-tower-import' - - - name: "Total Grid Production" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 4 - registers: [0x020C,0x020D] - icon: 'mdi:transmission-tower' - - - group: Upload - items: - - name: "Total Load Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x028D] - icon: 'mdi:lightning-bolt-outline' - - - name: "Load L1 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x028A] - icon: 'mdi:lightning-bolt-outline' - - - name: "Load L2 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x028B] - icon: 'mdi:lightning-bolt-outline' - - - name: "Load L3 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x028C] - icon: 'mdi:lightning-bolt-outline' - - - name: "Load Voltage L1" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0284] - icon: 'mdi:lightning-bolt-outline' - - - name: "Load Voltage L2" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0285] - icon: 'mdi:lightning-bolt-outline' - - - name: "Load Voltage L3" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0286] - icon: 'mdi:lightning-bolt-outline' - - - name: "Daily Load Consumption" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 1 - registers: [0x020E] - icon: 'mdi:lightning-bolt-outline' - - - name: "Total Load Consumption" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x020F,0x0210] - icon: 'mdi:lightning-bolt-outline' - - - group: Inverter - items: - - name: "Current L1" - class: "current" - state_class: "measurement" - uom: "A" - scale: 0.01 - rule: 2 - registers: [0x0276] - icon: 'mdi:home-lightning-bolt' - - - name: "Current L2" - class: "current" - state_class: "measurement" - uom: "A" - scale: 0.01 - rule: 2 - registers: [0x0277] - icon: 'mdi:home-lightning-bolt' - - - name: "Current L3" - class: "current" - uom: "A" - scale: 0.01 - rule: 2 - registers: [0x0278] - icon: 'mdi:home-lightning-bolt' - - - name: "Inverter L1 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x0279] - icon: 'mdi:home-lightning-bolt' - - - name: "Inverter L2 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x027A] - icon: 'mdi:home-lightning-bolt' - - - name: "Inverter L3 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 2 - registers: [0x027B] - icon: 'mdi:home-lightning-bolt' - - - name: "DC Temperature" - class: "temperature" - state_class: "measurement" - uom: "°C" - scale: 0.1 - rule: 2 - offset: 1000 - registers: [0x021C] - icon: 'mdi:thermometer' - - - name: "AC Temperature" - class: "temperature" - state_class: "measurement" - uom: "°C" - scale: 0.1 - rule: 2 - offset: 1000 - registers: [0x021D] - icon: 'mdi:thermometer' - - - name: "Inverter ID" - class: "" - state_class: "" - uom: "" - scale: 1 - rule: 5 - registers: [0x0003,0x0004,0x0005,0x0006,0x0007] - isstr: true - - - name: "Communication Board Version No." - class: "" - state_class: "" - uom: "" - scale: 1 - rule: 1 - registers: [0x0011] - isstr: true - - - name: "Control Board Version No." - class: "" - state_class: "" - uom: "" - scale: 1 - rule: 1 - registers: [0x000D] - isstr: true - - - group: SmartLoad + - group: solar + items: + - name: "PV1 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x02A0] + icon: "mdi:solar-power" + + - name: "PV2 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x02A1] + icon: "mdi:solar-power" + + - name: "PV1 Voltage" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x02A4] + icon: "mdi:solar-power" + + - name: "PV2 Voltage" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x02A6] + icon: "mdi:solar-power" + + - name: "PV1 Current" + class: "current" + state_class: "measurement" + uom: "A" + scale: 0.1 + rule: 1 + registers: [0x02A5] + icon: "mdi:solar-power" + + - name: "PV2 Current" + class: "current" + state_class: "measurement" + uom: "A" + scale: 0.1 + rule: 1 + registers: [0x02A7] + icon: "mdi:solar-power" + + - name: "Daily Production" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x0211] + icon: "mdi:solar-power" + validation: + max: 100 + invalidate_all: + + - name: "Total Production" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0216, 0x0217] + icon: "mdi:solar-power" + + - group: Battery + items: + - name: "Daily Battery Charge" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x0202] + icon: "mdi:battery-plus" + - name: "Daily Battery Discharge" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x0203] + icon: "mdi:battery-plus" + + - name: "Total Battery Charge" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0204, 0x0205] + icon: "mdi:battery-plus" + + - name: "Total Battery Discharge" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0206, 0x0207] + icon: "mdi:battery-minus" + + - name: "Battery Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x024E] + icon: "mdi:battery" + + - name: "Battery Voltage" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.01 + rule: 1 + registers: [0x024B] + icon: "mdi:battery" + + - name: "Battery SOC" + class: "battery" + state_class: "measurement" + uom: "%" + scale: 1 + rule: 1 + registers: [0x024C] + icon: "mdi:battery" + validation: + min: 0 + max: 101 + + - name: "Battery Current" + class: "current" + state_class: "measurement" + uom: "A" + scale: 0.01 + rule: 2 + registers: [0x024F] + icon: "mdi:battery" + + - name: "Battery Temperature" + class: "temperature" + state_class: "measurement" + uom: "°C" + scale: 0.1 + rule: 1 + offset: 1000 + registers: [0x024A] + icon: "mdi:battery" + validation: + min: 1 + max: 99 + + - group: Grid + items: + - name: "Total Grid Power" + class: "measurement" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x0271] + icon: "mdi:transmission-tower" + + - name: "Grid Voltage L1" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0256] + icon: "mdi:transmission-tower" + + - name: "Grid Voltage L2" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0257] + icon: "mdi:transmission-tower" + + - name: "Grid Voltage L3" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0258] + icon: "mdi:transmission-tower" + + - name: "Internal CT L1 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x025C] + icon: "mdi:transmission-tower" + + - name: "Internal CT L2 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x025D] + icon: "mdi:transmission-tower" + + - name: "Internal CT L3 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x025E] + icon: "mdi:transmission-tower" + + - name: "External CT L1 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x0268] + icon: "mdi:transmission-tower" + + - name: "External CT L2 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x0269] + icon: "mdi:transmission-tower" + + - name: "External CT L3 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x026A] + icon: "mdi:transmission-tower" + + - name: "Daily Energy Bought" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x0208] + icon: "mdi:transmission-tower-export" + + - name: "Total Energy Bought" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x020A, 0x020B] + icon: "mdi:transmission-tower-export" + + - name: "Daily Energy Sold" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x0209] + icon: "mdi:transmission-tower-import" + + - name: "Total Energy Sold" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x020C, 0x020D] + icon: "mdi:transmission-tower-import" + + - name: "Total Grid Production" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 4 + registers: [0x020C, 0x020D] + icon: "mdi:transmission-tower" + + - group: Upload + items: + - name: "Total Load Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x028D] + icon: "mdi:lightning-bolt-outline" + + - name: "Load L1 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x028A] + icon: "mdi:lightning-bolt-outline" + + - name: "Load L2 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x028B] + icon: "mdi:lightning-bolt-outline" + + - name: "Load L3 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x028C] + icon: "mdi:lightning-bolt-outline" + + - name: "Load Voltage L1" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0284] + icon: "mdi:lightning-bolt-outline" + + - name: "Load Voltage L2" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0285] + icon: "mdi:lightning-bolt-outline" + + - name: "Load Voltage L3" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0286] + icon: "mdi:lightning-bolt-outline" + + - name: "Daily Load Consumption" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 1 + registers: [0x020E] + icon: "mdi:lightning-bolt-outline" + + - name: "Total Load Consumption" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x020F, 0x0210] + icon: "mdi:lightning-bolt-outline" + + - group: Inverter + items: + - name: "Current L1" + class: "current" + state_class: "measurement" + uom: "A" + scale: 0.01 + rule: 2 + registers: [0x0276] + icon: "mdi:home-lightning-bolt" + + - name: "Current L2" + class: "current" + state_class: "measurement" + uom: "A" + scale: 0.01 + rule: 2 + registers: [0x0277] + icon: "mdi:home-lightning-bolt" + + - name: "Current L3" + class: "current" + uom: "A" + scale: 0.01 + rule: 2 + registers: [0x0278] + icon: "mdi:home-lightning-bolt" + + - name: "Inverter L1 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x0279] + icon: "mdi:home-lightning-bolt" + + - name: "Inverter L2 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x027A] + icon: "mdi:home-lightning-bolt" + + - name: "Inverter L3 Power" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 2 + registers: [0x027B] + icon: "mdi:home-lightning-bolt" + + - name: "DC Temperature" + class: "temperature" + state_class: "measurement" + uom: "°C" + scale: 0.1 + rule: 2 + offset: 1000 + registers: [0x021C] + icon: "mdi:thermometer" + + - name: "AC Temperature" + class: "temperature" + state_class: "measurement" + uom: "°C" + scale: 0.1 + rule: 2 + offset: 1000 + registers: [0x021D] + icon: "mdi:thermometer" + + - name: "Inverter ID" + class: "" + state_class: "" + uom: "" + scale: 1 + rule: 5 + registers: [0x0003, 0x0004, 0x0005, 0x0006, 0x0007] + isstr: true + + - name: "Communication Board Version No." + class: "" + state_class: "" + uom: "" + scale: 1 + rule: 1 + registers: [0x0011] + isstr: true + + - name: "Control Board Version No." + class: "" + state_class: "" + uom: "" + scale: 1 + rule: 1 + registers: [0x000D] + isstr: true + + - group: SmartLoad + items: + - name: "SmartLoad Enable Status" + class: "" + state_class: "" + uom: "" + scale: 1 + rule: 1 + registers: [0x0085] + isstr: true + lookup: + - key: 0 + value: "GEN Use" + - key: 1 + value: "SMART Load output" + - key: 2 + value: "Microinverter" + icon: "mdi:lightning-bolt-outline" + + - name: "Phase voltage of Gen port A" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0295] + icon: "mdi:home-lightning-bolt" + + - name: "Phase voltage of Gen port B" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0296] + icon: "mdi:home-lightning-bolt" + + - name: "Phase voltage of Gen port C" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.1 + rule: 1 + registers: [0x0297] + icon: "mdi:home-lightning-bolt" + + - name: "Phase power of Gen port A" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x0298] + icon: "mdi:home-lightning-bolt" + + - name: "Phase power of Gen port B" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x0299] + icon: "mdi:home-lightning-bolt" + + - name: "Phase power of Gen port C" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x029A] + icon: "mdi:home-lightning-bolt" + + - name: "Total Power of Gen port" + class: "power" + state_class: "measurement" + uom: "W" + scale: 1 + rule: 1 + registers: [0x029B] + icon: "mdi:home-l1ghtning-bolt" + + - name: "Generator daily power generation" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0218] + icon: "mdi:transmission-tower-import" + + - name: "Generator total power generation" + class: "energy" + state_class: "total_increasing" + uom: "kWh" + scale: 0.1 + rule: 3 + registers: [0x0219, 0x021A] + icon: "mdi:transmission-tower-import" + + - group: Alert items: - - name: "SmartLoad Enable Status" - class: "" - state_class: "" - uom: "" - scale: 1 - rule: 1 - registers: [0x0085] - isstr: true - lookup: - - key: 0 - value: "GEN Use" - - key: 1 - value: "SMART Load output" - - key: 2 - value: "Microinverter" - icon: 'mdi:lightning-bolt-outline' - - - name: "Phase voltage of Gen port A" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0295] - icon: 'mdi:home-lightning-bolt' - - - name: "Phase voltage of Gen port B" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0296] - icon: 'mdi:home-lightning-bolt' - - - name: "Phase voltage of Gen port C" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [0x0297] - icon: 'mdi:home-lightning-bolt' - - - name: "Phase power of Gen port A" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x0298] - icon: 'mdi:home-lightning-bolt' - - - name: "Phase power of Gen port B" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x0299] - icon: 'mdi:home-lightning-bolt' - - - name: "Phase power of Gen port C" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x029A] - icon: 'mdi:home-lightning-bolt' - - - name: "Total Power of Gen port" - class: "power" - state_class: "measurement" - uom: "W" - scale: 1 - rule: 1 - registers: [0x029B] - icon: 'mdi:home-l1ghtning-bolt' - - - name: "Generator daily power generation" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x0218] - icon: 'mdi:transmission-tower-import' - - - name: "Generator total power generation" - class: "energy" - state_class: "total_increasing" - uom: "kWh" - scale: 0.1 - rule: 3 - registers: [0x0219,0x021A] - icon: 'mdi:transmission-tower-import' - - - group: Alert - items: - - name: "Alert" - class: "" - state_class: "" - uom: "" - scale: 1 - rule: 6 - registers: [0x0229,0x022A,0x22B,0x022C,0x022D,0x022E] + - name: "Alert" + class: "" + state_class: "" + uom: "" + scale: 1 + rule: 6 + registers: [0x0229, 0x022A, 0x22B, 0x022C, 0x022D, 0x022E] From 9cb554cd6bcd332fa68e561f42c42ab7f9959be6 Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Mon, 27 Nov 2023 17:10:24 +0100 Subject: [PATCH 05/20] attempted to read out too many registers --- .../solarman/inverter_definitions/deye_sg04lp3.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index a83d244..ff1c656 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -3,7 +3,7 @@ requests: - start: 0x0003 - end: 0x0085 + end: 0x0059 mb_functioncode: 0x03 - start: 0x0202 end: 0x022E From 516b94281e14a9d6e38d77514ff3d9a86dc22a44 Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Mon, 27 Nov 2023 17:16:49 +0100 Subject: [PATCH 06/20] added register for the smartload port function --- .../solarman/inverter_definitions/deye_sg04lp3.yaml | 3 +++ 1 file changed, 3 insertions(+) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index ff1c656..9325300 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -5,6 +5,9 @@ requests: - start: 0x0003 end: 0x0059 mb_functioncode: 0x03 + - start: 0x0085 + end: 0x0085 + mb_functioncode: 0x03 - start: 0x0202 end: 0x022E mb_functioncode: 0x03 From dcb43b59540f16699bc4ab6a5ac0f969e37d011d Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Tue, 28 Nov 2023 08:44:17 +0100 Subject: [PATCH 07/20] Added battery capacity and included phase power of gen ports high value --- .../inverter_definitions/deye_sg04lp3.yaml | 23 +++++++++++++++---- 1 file changed, 18 insertions(+), 5 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index 9325300..8c93142 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -5,6 +5,9 @@ requests: - start: 0x0003 end: 0x0059 mb_functioncode: 0x03 + - start: 0x0066 + end: 0x0066 + mb_functioncode: 0x03 - start: 0x0085 end: 0x0085 mb_functioncode: 0x03 @@ -24,7 +27,7 @@ requests: end: 0x028D mb_functioncode: 0x03 - start: 0x0295 - end: 0x029B + end: 0x029F mb_functioncode: 0x03 - start: 0x02A0 end: 0x02A7 @@ -118,6 +121,7 @@ parameters: rule: 1 registers: [0x0202] icon: "mdi:battery-plus" + - name: "Daily Battery Discharge" class: "energy" state_class: "total_increasing" @@ -197,6 +201,15 @@ parameters: min: 1 max: 99 + - name: "Battery Capacity" + class: "battery" + state_class: "measurement" + uom: "Ah" + scale: 1 + rule: 1 + registers: [0x0066] + icon: "mdi:battery" + - group: Grid items: - name: "Total Grid Power" @@ -571,7 +584,7 @@ parameters: uom: "W" scale: 1 rule: 1 - registers: [0x0298] + registers: [0x0298, 0x029C] icon: "mdi:home-lightning-bolt" - name: "Phase power of Gen port B" @@ -580,7 +593,7 @@ parameters: uom: "W" scale: 1 rule: 1 - registers: [0x0299] + registers: [0x0299, 0x029D] icon: "mdi:home-lightning-bolt" - name: "Phase power of Gen port C" @@ -589,7 +602,7 @@ parameters: uom: "W" scale: 1 rule: 1 - registers: [0x029A] + registers: [0x029A, 0x029E] icon: "mdi:home-lightning-bolt" - name: "Total Power of Gen port" @@ -598,7 +611,7 @@ parameters: uom: "W" scale: 1 rule: 1 - registers: [0x029B] + registers: [0x029B, 0x029F] icon: "mdi:home-l1ghtning-bolt" - name: "Generator daily power generation" From 69a31f6991dd2bd565fae397a5035d1103cd4ce6 Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Tue, 28 Nov 2023 09:29:31 +0100 Subject: [PATCH 08/20] Added limitations to the Gen port statistics as it tends to overshoot values at times (fe. 65kW or 4mW) --- .../solarman/inverter_definitions/deye_sg04lp3.yaml | 12 ++++++++++++ 1 file changed, 12 insertions(+) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index 8c93142..ec5ac69 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -586,6 +586,9 @@ parameters: rule: 1 registers: [0x0298, 0x029C] icon: "mdi:home-lightning-bolt" + validation: + min: 0 + max: 12000 - name: "Phase power of Gen port B" class: "power" @@ -595,6 +598,9 @@ parameters: rule: 1 registers: [0x0299, 0x029D] icon: "mdi:home-lightning-bolt" + validation: + min: 0 + max: 12000 - name: "Phase power of Gen port C" class: "power" @@ -604,6 +610,9 @@ parameters: rule: 1 registers: [0x029A, 0x029E] icon: "mdi:home-lightning-bolt" + validation: + min: 0 + max: 12000 - name: "Total Power of Gen port" class: "power" @@ -613,6 +622,9 @@ parameters: rule: 1 registers: [0x029B, 0x029F] icon: "mdi:home-l1ghtning-bolt" + validation: + min: 0 + max: 12000 - name: "Generator daily power generation" class: "energy" From 7da48d676bc6cd3caf91ab5508b296e2e92d501b Mon Sep 17 00:00:00 2001 From: Julien Date: Tue, 28 Nov 2023 19:43:30 +0100 Subject: [PATCH 09/20] Update const.py, Fixes #423 Fixes: {"message":"Invalid handler specified"} --- custom_components/solarman/const.py | 1 + 1 file changed, 1 insertion(+) diff --git a/custom_components/solarman/const.py b/custom_components/solarman/const.py index 7b28cfc..bb18a18 100644 --- a/custom_components/solarman/const.py +++ b/custom_components/solarman/const.py @@ -1,4 +1,5 @@ from datetime import timedelta +import os DOMAIN = 'solarman' From f1747cbcfaffe796a9f9caf41b3df57b56632f13 Mon Sep 17 00:00:00 2001 From: Johan Bogema <31311380+mrboogiee@users.noreply.github.com.> Date: Wed, 29 Nov 2023 09:06:54 +0100 Subject: [PATCH 10/20] Added several battery properties --- .../inverter_definitions/deye_sg04lp3.yaml | 76 ++++++++++++++++--- 1 file changed, 65 insertions(+), 11 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml index ec5ac69..0560107 100644 --- a/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml +++ b/custom_components/solarman/inverter_definitions/deye_sg04lp3.yaml @@ -5,8 +5,8 @@ requests: - start: 0x0003 end: 0x0059 mb_functioncode: 0x03 - - start: 0x0066 - end: 0x0066 + - start: 0x0063 + end: 0x006D mb_functioncode: 0x03 - start: 0x0085 end: 0x0085 @@ -113,6 +113,69 @@ parameters: - group: Battery items: + - name: "Battery Equalization V" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.01 + rule: 1 + registers: [0x0063] + icon: "mdi:battery" + + - name: "Battery Absorption V" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.01 + rule: 1 + registers: [0x0064] + icon: "mdi:battery" + + - name: "Battery Float V" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.01 + rule: 1 + registers: [0x0065] + icon: "mdi:battery" + + - name: "Battery Capacity" + class: "battery" + state_class: "measurement" + uom: "Ah" + scale: 1 + rule: 1 + registers: [0x0066] + icon: "mdi:battery" + + - name: "Battery Empty V" + class: "voltage" + state_class: "measurement" + uom: "V" + scale: 0.01 + rule: 1 + registers: [0x0066] + icon: "mdi:battery" + + - name: "Battery Max A Charge" + class: "current" + state_class: "measurement" + uom: "A" + scale: 1 + rule: 1 + registers: [0x006C] + icon: "mdi:battery" + + - name: "Battery Max A Discharge" + class: "current" + state_class: "measurement" + uom: "A" + scale: 1 + rule: 1 + registers: [0x006D] + icon: "mdi:battery" + - name: "Daily Battery Charge" class: "energy" state_class: "total_increasing" @@ -201,15 +264,6 @@ parameters: min: 1 max: 99 - - name: "Battery Capacity" - class: "battery" - state_class: "measurement" - uom: "Ah" - scale: 1 - rule: 1 - registers: [0x0066] - icon: "mdi:battery" - - group: Grid items: - name: "Total Grid Power" From 9b1833cc6163e70216e60ab8563c2cd0e88e4877 Mon Sep 17 00:00:00 2001 From: fboundy Date: Fri, 15 Dec 2023 13:16:40 +0000 Subject: [PATCH 11/20] Add Backup SOC and Overdischarge SOC --- .../inverter_definitions/solis_hybrid.yaml | 20 ++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/custom_components/solarman/inverter_definitions/solis_hybrid.yaml b/custom_components/solarman/inverter_definitions/solis_hybrid.yaml index de8699b..a485776 100644 --- a/custom_components/solarman/inverter_definitions/solis_hybrid.yaml +++ b/custom_components/solarman/inverter_definitions/solis_hybrid.yaml @@ -13,7 +13,7 @@ requests: - start: 33206 end: 33282 mb_functioncode: 0x04 - - start: 43140 + - start: 43000 end: 43150 mb_functioncode: 0x03 @@ -844,6 +844,24 @@ parameters: registers: [33144] icon: 'mdi:battery-arrow-down' + - name: "Backup Mode SOC" + class: "battery" + state_class: "measurement" + uom: "%" + scale: 1 + rule: 1 + registers: [43024] + icon: 'mdi:battery' + + - name: "Overdischarge SOC" + class: "battery" + state_class: "measurement" + uom: "%" + scale: 1 + rule: 1 + registers: [43011] + icon: 'mdi:battery' + - group: TimedCharge items: - name: "Timed Charge Current" From fd8f4b7fea005357d3426f52fa4644d6e84f3f59 Mon Sep 17 00:00:00 2001 From: giona Date: Sun, 24 Dec 2023 11:46:08 +0100 Subject: [PATCH 12/20] Added some useful sensors (tested on ZCS 1PH HY6000 ZSS HP) --- .../inverter_definitions/sofar_g3hyd.yaml | 78 ++++++++++++++++--- 1 file changed, 67 insertions(+), 11 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml index ba30139..aa136eb 100644 --- a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml +++ b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml @@ -1,26 +1,31 @@ # Sofar G3 also HYD 5-20KTL-3PH -# This works also for rebranded ZCS Azzurro 3-Phase inverters such as the 3PH HYD6000 ZSS +# This works also for rebranded ZCS Azzurro 3-Phase inverters such as the 3PH HYD6000 ZSS, or single phase such as 1PH HY6000 ZSS HP # Note that this won't work if your ZCS inverter is connected via Connext, you have to be using a Wi-Fi or Ethernet Kit such as ZSM-WIFI-USB. requests: - - start: 0x0404 - end: 0x0420 + - start: 0x0404 # inverter + end: 0x042B mb_functioncode: 0x03 - - start: 0x0484 + - start: 0x0445 # serial number + end: 0x044C + mb_functioncode: 0x03 + - start: 0x0484 # grid end: 0x04AF mb_functioncode: 0x03 -# off - grid info -# - start: 0x0504 -# end: 0x051F -# mb_functioncode: 0x03 - - start: 0x0584 + - start: 0x0504 # off-grid + end: 0x051F + mb_functioncode: 0x03 + - start: 0x0584 # dc end: 0x0589 mb_functioncode: 0x03 - - start: 0x0604 + - start: 0x0604 # battery end: 0x060A # end of first battery after this continue battery pack 2,3,4 mb_functioncode: 0x03 - - start: 0x0684 + - start: 0x0684 # generation end: 0x069B mb_functioncode: 0x03 + - start: 0x104D # battery dod and eod + end: 0x104E + mb_functioncode: 0x03 parameters: - group: Inverter @@ -51,6 +56,14 @@ parameters: - key: 7 value: "self-charging" icon: 'mdi:wrench' + - name: "Power-on Countdown" + class: "" + uom: "s" + scale: 1 + rule: 1 + isstr: true + registers: [ 0x0417 ] + icon: 'mdi:timer' - name: "Ambient temperature 1" class: "temperature" uom: "°C" @@ -128,6 +141,29 @@ parameters: rule: 2 registers: [ 0x0422 ] icon: 'mdi:thermometer' + - name: "Generation Time Today" + class: "duration" + state_class: "measurement" + uom: "min" + scale: 1 + rule: 1 + registers: [ 0x0426 ] + icon: 'mdi:clock' + - name: "Insulation resistance" + class: "" + state_class: "measurement" + uom: "kΩ" + scale: 1 + rule: 1 + registers: [ 0x042B ] + icon: 'mdi:omega' + - name: "Serial Number" + class: "" + uom: "" + scale: 1 + rule: 5 + registers: [ 0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C ] # serial number 17th to 20th digits are in 0x0470 and 0x0471 + icon: 'mdi:barcode' - group: InverterDC items: @@ -294,6 +330,22 @@ parameters: rule: 1 registers: [ 0x0611 ] icon: 'mdi:battery' + - name: "Battery DOD" + class: "" + state_class: "measurement" + uom: "%" + scale: 1 + rule: 1 + registers: [ 0x104D ] + icon: 'mdi:battery' + - name: "Battery EOD" + class: "" + state_class: "measurement" + uom: "%" + scale: 1 + rule: 1 + registers: [ 0x104E ] + icon: 'mdi:battery' - group: GridAC items: @@ -894,6 +946,10 @@ parameters: value: "ID03 Grid Over Frequency Protection" - key: 8 value: "ID04 Grid Under Frequency Protection" + - key: 10 + value: "LOOKUP" # off-grid + - key: 14 + value: "ID03 Grid Over Frequency Protection" # also ID14 Grid voltage unbalance - key: 16 value: "ID05 Leakage current fault" - key: 32 From e3e5b11376565bddf54aa41b6461588d47954265 Mon Sep 17 00:00:00 2001 From: giona Date: Tue, 26 Dec 2023 14:03:56 +0100 Subject: [PATCH 13/20] Remove battery 2 sensors (they weren't actually being read from the registers) --- .../inverter_definitions/sofar_g3hyd.yaml | 60 +------------------ 1 file changed, 2 insertions(+), 58 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml index aa136eb..89da04c 100644 --- a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml +++ b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml @@ -17,8 +17,8 @@ requests: - start: 0x0584 # dc end: 0x0589 mb_functioncode: 0x03 - - start: 0x0604 # battery - end: 0x060A # end of first battery after this continue battery pack 2,3,4 + - start: 0x0604 # battery 1 + end: 0x060A # end of first battery, last battery (8th) ends in 0x063A mb_functioncode: 0x03 - start: 0x0684 # generation end: 0x069B @@ -274,62 +274,6 @@ parameters: rule: 1 registers: [ 0x060A ] icon: 'mdi:battery' - - name: "Battery 2 Voltage" - class: "voltage" - state_class: "measurement" - uom: "V" - scale: 0.1 - rule: 1 - registers: [ 0x060B ] - icon: 'mdi:battery' - - name: "Battery 2 Current" - class: "current" - state_class: "measurement" - uom: "A" - scale: 0.01 - rule: 2 - registers: [ 0x060C ] - icon: 'mdi:current-dc' - - name: "Battery 2 Power" - class: "power" - state_class: "measurement" - uom: "W" - scale: 10 - rule: 2 - registers: [ 0x060D ] - icon: 'mdi:battery-charging' - - name: "Battery 2 Temperature" - class: "temperature" - state_class: "measurement" - uom: "°C" - scale: 1 - rule: 2 - registers: [ 0x060E ] - icon: 'mdi:battery' - - name: "Battery 2 SOC" - class: "battery" - state_class: "measurement" - uom: "%" - scale: 1 - rule: 1 - registers: [ 0x060F ] - icon: 'mdi:battery' - - name: "Battery 2 SOH" - class: "battery" - state_class: "measurement" - uom: "%" - scale: 1 - rule: 1 - registers: [ 0x0610 ] - icon: 'mdi:battery' - - name: "Battery 2 Number of Cycles" - class: "" - state_class: "measurement" - uom: "cycle" - scale: 1 - rule: 1 - registers: [ 0x0611 ] - icon: 'mdi:battery' - name: "Battery DOD" class: "" state_class: "measurement" From 1cb2d18eeb233a12cae5a8748e771b7dc4d74a16 Mon Sep 17 00:00:00 2001 From: giona Date: Tue, 26 Dec 2023 14:05:02 +0100 Subject: [PATCH 14/20] Add some more useful sensors --- .../inverter_definitions/sofar_g3hyd.yaml | 68 +++++++++++++++++-- 1 file changed, 64 insertions(+), 4 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml index 89da04c..90c4a86 100644 --- a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml +++ b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml @@ -2,13 +2,13 @@ # This works also for rebranded ZCS Azzurro 3-Phase inverters such as the 3PH HYD6000 ZSS, or single phase such as 1PH HY6000 ZSS HP # Note that this won't work if your ZCS inverter is connected via Connext, you have to be using a Wi-Fi or Ethernet Kit such as ZSM-WIFI-USB. requests: - - start: 0x0404 # inverter + - start: 0x0404 # inverter and faults end: 0x042B mb_functioncode: 0x03 - - start: 0x0445 # serial number - end: 0x044C + - start: 0x0445 # serial number, hw, sw and firmare versions + end: 0x0465 mb_functioncode: 0x03 - - start: 0x0484 # grid + - start: 0x0484 # on-grid end: 0x04AF mb_functioncode: 0x03 - start: 0x0504 # off-grid @@ -26,6 +26,10 @@ requests: - start: 0x104D # battery dod and eod end: 0x104E mb_functioncode: 0x03 + - start: 0x1052 # battery eps buffer + end: 0x1052 + mb_functioncode: 0x03 + parameters: - group: Inverter @@ -162,8 +166,56 @@ parameters: uom: "" scale: 1 rule: 5 + isstr: true registers: [ 0x0445,0x0446,0x0447,0x0448,0x0449,0x044A,0x044B,0x044C ] # serial number 17th to 20th digits are in 0x0470 and 0x0471 icon: 'mdi:barcode' + - name: "Hardware Version" + class: "" + uom: "" + scale: 1 + rule: 5 + isstr: true + registers: [ 0x044D,0x044E ] + icon: 'mdi:alpha-v' + - name: "Software Version Master" + class: "" + uom: "" + scale: 1 + rule: 5 + isstr: true + registers: [ 0x0453,0x0454,0x0455,0x0456 ] + icon: 'mdi:alpha-v' + - name: "Software Version Slave" + class: "" + uom: "" + scale: 1 + rule: 5 + isstr: true + registers: [ 0x0457,0x0458,0x0459,0x045A ] + icon: 'mdi:alpha-v' + - name: "Safety Version" + class: "" + uom: "" + scale: 1 + rule: 7 + registers: [ 0x045B,0x045C ] + icon: 'mdi:alpha-v' + - name: "Safety Firmware Version" + class: "" + uom: "" + scale: 1 + rule: 5 + isstr: true + registers: [ 0x0460,0x0461,0x0462,0x0463 ] + icon: 'mdi:alpha-v' + - name: "Safety Hardware Version" + class: "" + uom: "" + scale: 1 + rule: 5 + isstr: true + registers: [ 0x0464,0x0465 ] + icon: 'mdi:alpha-v' - group: InverterDC items: @@ -290,6 +342,14 @@ parameters: rule: 1 registers: [ 0x104E ] icon: 'mdi:battery' + - name: "Battery EPS Buffer" + class: "" + state_class: "measurement" + uom: "%" + scale: 1 + rule: 1 + registers: [ 0x1052 ] + icon: 'mdi:battery-low' - group: GridAC items: From 3171e1df5058f9b2566e9a2dda5275dc62f725b5 Mon Sep 17 00:00:00 2001 From: giona Date: Tue, 2 Jan 2024 18:32:44 +0100 Subject: [PATCH 15/20] Remove "power-on countdown" --- .../solarman/inverter_definitions/sofar_g3hyd.yaml | 8 -------- 1 file changed, 8 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml index 90c4a86..da23940 100644 --- a/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml +++ b/custom_components/solarman/inverter_definitions/sofar_g3hyd.yaml @@ -60,14 +60,6 @@ parameters: - key: 7 value: "self-charging" icon: 'mdi:wrench' - - name: "Power-on Countdown" - class: "" - uom: "s" - scale: 1 - rule: 1 - isstr: true - registers: [ 0x0417 ] - icon: 'mdi:timer' - name: "Ambient temperature 1" class: "temperature" uom: "°C" From ff30b215532e5821510cb176773be82d950edd07 Mon Sep 17 00:00:00 2001 From: Aliaksei Hirylovich Date: Wed, 17 Jan 2024 19:31:42 +0100 Subject: [PATCH 16/20] remove 4999 register request --- .../solarman/inverter_definitions/solis_3p-4g.yaml | 12 ------------ 1 file changed, 12 deletions(-) diff --git a/custom_components/solarman/inverter_definitions/solis_3p-4g.yaml b/custom_components/solarman/inverter_definitions/solis_3p-4g.yaml index 7d95b35..788daf0 100644 --- a/custom_components/solarman/inverter_definitions/solis_3p-4g.yaml +++ b/custom_components/solarman/inverter_definitions/solis_3p-4g.yaml @@ -7,9 +7,6 @@ requests: - start: 2999 end: 3044 mb_functioncode: 0x04 - - start: 4999 - end: 4999 - mb_functioncode: 0x04 parameters: @@ -39,15 +36,6 @@ parameters: - key: 6 value: "Rule21Volt–watt" - - name: "Grid status" - class: "" - state_class: "" - uom: "" - scale: 1 - rule: 1 - registers: [4999] - icon: 'mdi:home-lightning-bolt' - - name: "Inverter Temperature" class: "temperature" state_class: "measurement" From 4d555864369982695ec251987f2af00718e74ca6 Mon Sep 17 00:00:00 2001 From: virtualdj Date: Mon, 15 Jan 2024 21:55:02 +0100 Subject: [PATCH 17/20] Show HEX Modbus addresses too in the logs --- custom_components/solarman/solarman.py | 11 ++++++----- 1 file changed, 6 insertions(+), 5 deletions(-) diff --git a/custom_components/solarman/solarman.py b/custom_components/solarman/solarman.py index 8f74b77..f74ece9 100644 --- a/custom_components/solarman/solarman.py +++ b/custom_components/solarman/solarman.py @@ -74,7 +74,8 @@ def get_statistics(self): start = request['start'] end = request['end'] mb_fc = request['mb_functioncode'] - log.debug(f"Querying [{start} - {end}]...") + range_string = f"{start}-{end} (0x{start:04X}-0x{end:04X})" + log.debug(f"Querying [{range_string}]...") attempts_left = QUERY_RETRY_ATTEMPTS while attempts_left > 0: @@ -85,15 +86,15 @@ def get_statistics(self): result = 1 except Exception as e: result = 0 - log.warning(f"Querying [{start} - {end}] failed with exception [{type(e).__name__}: {e}]") + log.warning(f"Querying [{range_string}] failed with exception [{type(e).__name__}: {e}]") self.disconnect_from_server() if result == 0: - log.warning(f"Querying [{start} - {end}] failed, [{attempts_left}] retry attempts left") + log.warning(f"Querying [{range_string}] failed, [{attempts_left}] retry attempts left") else: - log.debug(f"Querying [{start} - {end}] succeeded") + log.debug(f"Querying [{range_string}] succeeded") break if result == 0: - log.warning(f"Querying registers [{start} - {end}] failed, aborting.") + log.warning(f"Querying registers [{range_string}] failed, aborting.") break if result == 1: From e18d3c5aebe73318c961f7d0ec96e673478b4cef Mon Sep 17 00:00:00 2001 From: virtualdj Date: Sun, 21 Jan 2024 13:58:45 +0100 Subject: [PATCH 18/20] Fix UI dropdown to load YAML files --- custom_components/solarman/const.py | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/custom_components/solarman/const.py b/custom_components/solarman/const.py index 7b28cfc..886bef6 100644 --- a/custom_components/solarman/const.py +++ b/custom_components/solarman/const.py @@ -1,4 +1,5 @@ from datetime import timedelta +import os DOMAIN = 'solarman' @@ -6,7 +7,7 @@ DEFAULT_INVERTER_MB_SLAVEID = 1 DEFAULT_LOOKUP_FILE = 'deye_hybrid.yaml' -LOOKUP_FILES = (os.listdir(os.path.dirname(__file__) + '/inverter_definitions')) +LOOKUP_FILES = (sorted([f for f in os.listdir(os.path.dirname(__file__) + '/inverter_definitions') if f.endswith('.yaml')])) MIN_TIME_BETWEEN_UPDATES = timedelta(seconds=15) From 962444ee8084796a80c39db58e6a20c75f34dd72 Mon Sep 17 00:00:00 2001 From: virtualdj Date: Sun, 21 Jan 2024 13:27:08 +0100 Subject: [PATCH 19/20] Automatically set scale to 1 when undefined in YAML --- custom_components/solarman/parser.py | 4 ++-- customization.md | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/custom_components/solarman/parser.py b/custom_components/solarman/parser.py index 32465b4..39276e4 100644 --- a/custom_components/solarman/parser.py +++ b/custom_components/solarman/parser.py @@ -55,7 +55,7 @@ def do_validate(self, title, value, rule): def try_parse_signed (self, rawData, definition, start, length): title = definition['name'] - scale = definition['scale'] + scale = definition['scale'] if 'scale' in definition else 1 value = 0 found = True shift = 0 @@ -92,7 +92,7 @@ def try_parse_signed (self, rawData, definition, start, length): def try_parse_unsigned (self, rawData, definition, start, length): title = definition['name'] - scale = definition['scale'] + scale = definition['scale'] if 'scale' in definition else 1 value = 0 found = True shift = 0 diff --git a/customization.md b/customization.md index 413acb0..d214120 100644 --- a/customization.md +++ b/customization.md @@ -71,7 +71,7 @@ The group just groups parameters that belong together. The induvidual parameter- |uom||The *unit_of_measurement* field of the home-assistant entity #| |icon||The *icon* field of the home-assistant entity #| || **The fields below define how the value from the logger is parsed** | -|scale||Scaling factor for the value read from the logger| +|scale||Scaling factor for the value read from the logger (default: 1)| |rule||Method to interpret the data from the logger ###| |mask||A mask to filter only used bit fields. This is especialy useful for flag fields| |registers||Array of register fields that comprises the value. If the value is placed in a number of registers, this array will contain more than one item.| From 23d2dcf7b8e235aca6f8cdfa374c6efb7c722635 Mon Sep 17 00:00:00 2001 From: virtualdj Date: Sun, 21 Jan 2024 13:22:39 +0100 Subject: [PATCH 20/20] Move status entities to Diagnostic category --- README.md | 2 +- custom_components/solarman/sensor.py | 14 +++++++++++--- 2 files changed, 12 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index ced3bf1..bcdcf72 100644 --- a/README.md +++ b/README.md @@ -150,7 +150,7 @@ Once the component is running, it will add the following entities to Home Assist # Status Entities -Apart from the inverter-parameters, it will also add status entities to view the status of the solarman component. +Apart from the inverter-parameters, it will also add status entities to view the status of the solarman component (in the **Diagnostic** category). ![Component-status](./component_status.png) # Energy Dashboard diff --git a/custom_components/solarman/sensor.py b/custom_components/solarman/sensor.py index f96a069..10e931d 100644 --- a/custom_components/solarman/sensor.py +++ b/custom_components/solarman/sensor.py @@ -12,7 +12,7 @@ import voluptuous as vol from homeassistant.core import HomeAssistant from homeassistant.config_entries import ConfigEntry -from homeassistant.const import CONF_NAME +from homeassistant.const import CONF_NAME, EntityCategory from homeassistant.helpers.entity import Entity from homeassistant.helpers.entity_platform import AddEntitiesCallback @@ -63,8 +63,8 @@ def _do_setup_platform(hass: HomeAssistant, config, async_add_entities : AddEnti except BaseException as ex: _LOGGER.error(f'Config error {ex} {sensor}') raise - hass_sensors.append(SolarmanStatus(inverter_name, inverter, "status_lastUpdate", inverter_sn)) - hass_sensors.append(SolarmanStatus(inverter_name, inverter, "status_connection", inverter_sn)) + hass_sensors.append(SolarmanStatusDiag(inverter_name, inverter, "status_lastUpdate", inverter_sn)) + hass_sensors.append(SolarmanStatusDiag(inverter_name, inverter, "status_connection", inverter_sn)) _LOGGER.debug(f'sensor.py:_do_setup_platform: async_add_entities') _LOGGER.debug(hass_sensors) @@ -160,6 +160,14 @@ def state(self): def update(self): self.p_state = getattr(self.inverter, self._field_name, None) +############################################################################################################# +# This is the the same of SolarmanStatus, but it has EntityCategory setup to Diagnostic. +############################################################################################################# + +class SolarmanStatusDiag(SolarmanStatus): + def __init__(self, inverter_name, inverter, field_name, sn): + super().__init__(inverter_name, inverter, field_name, sn) + self._attr_entity_category = EntityCategory.DIAGNOSTIC ############################################################################################################# # Entity displaying a text field read from the inverter