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 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 | 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: "" 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, 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) 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 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: "" 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": {