celsworth / lxp-bridge

A bridge to MQTT/InfluxDB/Postgres for communications with LuxPower inverters
MIT License
10 stars 14 forks source link

Decode bit registers #119

Closed celsworth closed 1 year ago

celsworth commented 1 year ago

Publish a new message when we see registers containing bitwise values:

# mosquitto_pub -t lxp/cmd/all/read/hold/21 -m ''
# mosquitto_pub -t lxp/cmd/all/read/hold/110 -m ''

<in another window>
# mosquitto_sub -t lxp/# -v

lxp/cmd/all/read/hold/21 (null)
lxp/BA00000000/hold/21 62421
lxp/BA00000000/hold/21/bits {"eps_en":true,"ovf_load_derate_en":false,"drms_en":true,"lvrt_en":false,"anti_island_en":true,"neutral_detect_en":false,"grid_on_power_ss_en":true,"ac_charge_en":true,"sw_seamless_en":true,"set_to_standby":true,"forced_discharge_en":false,"forced_charge_en":false,"iso_en":true,"gfci_en":true,"dci_en":true,"feed_in_grid_en":true}
lxp/result/BA00000000/read/hold/21 OK

lxp/cmd/all/read/hold/110 (null)
lxp/BA00000000/hold/110 2
lxp/BA00000000/hold/110/bits {"ub_pv_grid_off_en":false,"ub_run_without_grid":true,"ub_micro_grid_en":false}
lxp/result/BA00000000/read/hold/110 OK

And an example of setting ac_charge true, when it was previously false:

lxp/cmd/all/set/ac_charge true
lxp/BA00000000/hold/21 62293
lxp/BA00000000/hold/21/bits {"eps_en":true,"ovf_load_derate_en":false,"drms_en":true,"lvrt_en":false,"anti_island_en":true,"neutral_detect_en":false,"grid_on_power_ss_en":true,"ac_charge_en":false,"sw_seamless_en":true,"set_to_standby":true,"forced_discharge_en":false,"forced_charge_en":false,"iso_en":true,"gfci_en":true,"dci_en":true,"feed_in_grid_en":true}
lxp/BA00000000/hold/21 62421
lxp/BA00000000/hold/21/bits {"eps_en":true,"ovf_load_derate_en":false,"drms_en":true,"lvrt_en":false,"anti_island_en":true,"neutral_detect_en":false,"grid_on_power_ss_en":true,"ac_charge_en":true,"sw_seamless_en":true,"set_to_standby":true,"forced_discharge_en":false,"forced_charge_en":false,"iso_en":true,"gfci_en":true,"dci_en":true,"feed_in_grid_en":true}
lxp/result/BA00000000/set/ac_charge OK

We get two bits messages here because setting ac_charge true involves reading the previous register (first message), updating it, then writing it back - the inverters reply to this final part is what generates the second bits message.

Part of #7, also paves the way for #116