From 330c30b7ddf58649bced22736579667a6b4351be Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:31:56 +0200 Subject: [PATCH 1/8] fix(pixii): preserve AC power sign MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- drivers/lua/pixii.lua | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/drivers/lua/pixii.lua b/drivers/lua/pixii.lua index 5759ce9..ea1931f 100644 --- a/drivers/lua/pixii.lua +++ b/drivers/lua/pixii.lua @@ -29,7 +29,7 @@ DRIVER = { id = "pixii", name = "Pixii PowerShaper", manufacturer = "Pixii", - version = "2.1.7", + version = "2.1.8", protocols = { "modbus" }, capabilities = { "battery", "meter" }, description = "Pixii PowerShaper commercial battery storage via Modbus TCP.", @@ -474,9 +474,9 @@ function driver_poll() local battery = { w = bat_w, setpoint_w = setpoint_pixii_w and -setpoint_pixii_w, - -- SunSpec W is in the generator frame, like the setpoint: positive - -- means power out of the inverter. Site signs charge positive. - control_power_w = acw_regs and -ac_w, + -- The measured AC register already uses site signs on Pixii hardware: + -- charge positive, discharge negative. Do not invert it like the setpoint. + control_power_w = acw_regs and ac_w, control_power_available = acw_regs ~= nil, v = bat_v, a = bat_a, From 183daf589c052945fbd65d8eade63cfc872441bd Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:03 +0200 Subject: [PATCH 2/8] test(pixii): cover AC charge and discharge signs MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- drivers/tests/test_pixii_status.py | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/drivers/tests/test_pixii_status.py b/drivers/tests/test_pixii_status.py index 3277df8..eeb2a2b 100644 --- a/drivers/tests/test_pixii_status.py +++ b/drivers/tests/test_pixii_status.py @@ -102,8 +102,10 @@ def test_pixii_control_readback_without_troubleshooting(): local battery = poll(3) assert(battery.setpoint_w == -1500, "setpoint must use site signs outside TS mode") assert(battery.control_power_available == true) --- SunSpec W is generator frame: -1400 W flows into the inverter, a charge. -assert(battery.control_power_w == 1400, "command feedback must use site-signed AC, not DC") +assert(battery.control_power_w == -1400, "negative measured AC must remain discharge") +host._modbus_registers.holding[40083] = 1400 +battery = poll(3) +assert(battery.control_power_w == 1400, "positive measured AC must remain charge") host._modbus_read_fail_addresses[39905] = "timeout" host._modbus_read_fail_addresses[40083] = "timeout" battery = poll(3) From f0fc2469b13d2d405b9f13c034b3f3d37eac1ffe Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:29 +0200 Subject: [PATCH 3/8] chore(pixii): bump driver to 2.1.8 MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- manifests/pixii.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/manifests/pixii.yaml b/manifests/pixii.yaml index f48f5a1..19e2a96 100644 --- a/manifests/pixii.yaml +++ b/manifests/pixii.yaml @@ -1,5 +1,5 @@ name: "pixii" -version: "2.1.7" +version: "2.1.8" tier: core author: "Sourceful Labs AB and community contributors" protocol: modbus @@ -24,9 +24,9 @@ upstream_docs: title: "SunSpec model 802: battery charge and control states" kind: register_map url_stability: stable -size_bytes: 29105 +size_bytes: 29119 dkb_id: "pixii" -sha256: "bd8fe1e850ce66e83e107116d7e236c499cca51f75872feb03efde58f95d6e41" +sha256: "5fc8e600eac7a70020e01e32c531f350f49bd076cac8a5598c2c06205b05f6b8" signature: "" bytecode_sha256: "" From d37d3f34bfa270aef4f84e7027204dc439c20f1c Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:32 +0200 Subject: [PATCH 4/8] chore(catalog): refresh Pixii metadata MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- index.yaml | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/index.yaml b/index.yaml index 9318db6..060c258 100644 --- a/index.yaml +++ b/index.yaml @@ -498,14 +498,14 @@ drivers: size_bytes: 19344 sha256: "29f2bd2f73c0d39d809839ca60b40c3e4281f1dda267ba2b26e66bd9ab80c27b" - name: "pixii" - version: "2.1.7" + version: "2.1.8" tier: core protocol: modbus connectivity: local ders: [battery, meter] control: false - size_bytes: 29105 - sha256: "bd8fe1e850ce66e83e107116d7e236c499cca51f75872feb03efde58f95d6e41" + size_bytes: 29119 + sha256: "5fc8e600eac7a70020e01e32c531f350f49bd076cac8a5598c2c06205b05f6b8" - name: "pixii_pv" version: "0.3.2" tier: core From 731c76fb591f2e8e22364ccac72e0831be6c633f Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:35 +0200 Subject: [PATCH 5/8] chore(catalog): refresh Pixii device version MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- devices.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/devices.yaml b/devices.yaml index 5a47765..74ef10e 100644 --- a/devices.yaml +++ b/devices.yaml @@ -1032,7 +1032,7 @@ manufacturers: protocols: - protocol: modbus driver: "pixii" - version: "2.1.7" + version: "2.1.8" ders: [battery, meter] control: false firmware_versions: "" From d991ca3b869fc0cf0246b36062ac82bb39a4a0cf Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:37 +0200 Subject: [PATCH 6/8] chore(catalog): refresh Pixii support status MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- support-status.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/support-status.json b/support-status.json index 721fa2d..a5fd40a 100644 --- a/support-status.json +++ b/support-status.json @@ -1136,7 +1136,7 @@ }, { "catalog_source": true, - "catalog_version": "2.1.7", + "catalog_version": "2.1.8", "driver_id": "pixii", "targets": { "blixt-l1": { From 9cb5a439d6bff13a2f6af293dc2afae300a59c79 Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:40 +0200 Subject: [PATCH 7/8] chore(catalog): refresh Pixii support table MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- SUPPORT_STATUS.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/SUPPORT_STATUS.md b/SUPPORT_STATUS.md index c4832e9..2b448f0 100644 --- a/SUPPORT_STATUS.md +++ b/SUPPORT_STATUS.md @@ -112,8 +112,8 @@ Catalog source is not proof that a target can install or run a driver. | p1_hdlc | 2.0.2 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | | p1_meter | 2.0.2 | ftw-core | not_assessed | — | not_recorded | not_assessed | | p1_meter | 2.0.2 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | -| pixii | 2.1.7 | ftw-core | not_assessed | — | not_recorded | not_assessed | -| pixii | 2.1.7 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | +| pixii | 2.1.8 | ftw-core | not_assessed | — | not_recorded | not_assessed | +| pixii | 2.1.8 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | | pixii_pv | 0.3.2 | ftw-core | not_assessed | — | not_recorded | not_assessed | | pixii_pv | 0.3.2 | blixt-l1 | not_assessed | — | not_recorded | not_assessed | | remne_p1ib | 0.1.0 | ftw-core | not_assessed | — | not_recorded | not_assessed | From 1d3babb02d81f2ba3e47cdc864a5b1ff1b1a0818 Mon Sep 17 00:00:00 2001 From: segran2 Date: Sat, 3 Oct 2026 02:32:49 +0200 Subject: [PATCH 8/8] docs(changelog): record Pixii AC sign fix MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Signed-off-by: Göran Andersson <268038031+segran2@users.noreply.github.com> --- CHANGELOG.md | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/CHANGELOG.md b/CHANGELOG.md index 7ad8bfb..c3cea80 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -25,6 +25,14 @@ hears from the charger, so a steady charge stays measured. Missing power or source time cannot confirm a command's effect. The live-status display and polling rate stay unchanged. +## pixii 2.1.8 + +Preserve the sign of measured AC power from Pixii register 40083 for command +feedback. Hardware reports this value in FTW site signs already: charging is +positive and discharging is negative. Setpoint conversion, commands, heartbeat +and safety policy are unchanged. Verified against PowerShaper site telemetry +reported in #154; regression tests cover both charge and discharge signs. + ## pixii 2.1.7 Read the setpoint on every poll, including outside troubleshooting mode. Emit