FAQ
TL;DR: Field tests show ≤ 2 % deviation between Sofar inverter Modbus data and PZEM-004T meters [Elektroda, michal.zd, post #21420031]; "data practically the same"[Elektroda, michal.zd, post #21420031] The open-source PV InverterBroker now streams MQTT-ready Domoticz payloads in <60 s setup.
Why it matters: You gain utility-grade monitoring without cloud lock-in or extra hardware.
Quick Facts
• Platform: C++ binary for Raspberry Pi (ARMv6/7) & generic Linux; ~350 kB size [Elektroda, michal.zd, post #21480795]
• Proven inverters: Sofar 15 KTL-X G3, HYD 15 KTL, HYD 5–20 K-3PH [Elektroda, michal.zd, post #21407292]
• Power register: signed int16; 65532-65535 map to −4 … −1 decaW (−0.4 … −0.1 W) [Elektroda, michal.zd, post #21408717]
• Typical night standby: 6 W per phase measured, 4.8 W calculated [Elektroda, michal.zd, post #21407292]
• Licence & cost: MIT, free download on GitHub [Elektroda, michal.zd, post #21480795]
What is PV InverterBroker?
It is a lightweight Linux daemon that polls Sofar inverters over Modbus-TCP (Wi-Fi logger LSW-3), converts raw registers to human units, then publishes JSON over MQTT. No cloud connection is required [Elektroda, michal.zd, post #21407292]
Which Sofar models are confirmed compatible?
Tests succeeded on on-grid KTL-X G3 15 kW and hybrid HYD 15 KTL; documentation covers HYD 5-20 K-3PH and HYD 3-6 K-EP registers, so any KTL/KTL-X/HYD using the same map should work [Elektroda, michal.zd, post #21407292]
How does the program handle negative power values like 65531?
It treats the 16-bit register as signed. Values 65536-N become −N. Example: 65531 → −5 decaW (−0.5 W) exported with a leading minus instead of the large integer [Elektroda, michal.zd, post #21408498]
How accurate are its readings?
After a week of parallel logging, inverter power deviated by ≤ 2 % from three-phase PZEM-004T meters [Elektroda, michal.zd, post #21420031] "Data practically the same," noted the author [Elektroda, michal.zd, post #21420031]
How do I install on Raspberry Pi?
wget
the three release binaries from GitHub. 2. Copy sample config to /etc/ime/inverterbroker
. 3. chmod +x inverterbroker
and run ./inverterbroker -d
for live logs [Elektroda, Daro1003, post #21453527]
How do I publish directly to Domoticz?
Fill MQTT topic and four IDX numbers in the config (domoticz_pvpower_idx
, etc.). The broker now sends ready-made domoticz/in
JSON—no Node-RED needed [Elektroda, michal.zd, post #21483283]
Which registers are currently exposed?
• PV total power
• Grid import/export power
• Household consumption
• PV1 & PV2 voltage and current
Support for battery SOC and PCC power is planned [Elektroda, michal.zd, post #21483283]
Can I run it as a service?
Yes. Copy pvInverterBroker.service
to /lib/systemd/system/
, then sudo systemctl enable --now pvInverterBroker
for automatic start on boot [Elektroda, michal.zd, post #21483283]
Edge case: Why do I see 65535 at night?
When PV output is zero, the inverter reports −1 decaW as 65535. The broker converts this to −0.1 W, reflecting standby draw [Elektroda, michal.zd, post #21408717]
How do I add PV string sensors in Domoticz?
Create four virtual sensors (Voltage x2, Current x2). Note their IDX values and place them in the config. Broker will push fresh values every 30 s [Elektroda, Daro1003, post #21482756]
Is Node-RED still useful?
Optional. Node-RED can tap the same MQTT topics for custom dashboards or automations. A simple flow shows values in under two minutes [Elektroda, michal.zd, post #21420031]
What is the typical idle power draw of a Sofar HYD?
PZEM measured ~6 W per phase (≈18 W total) while the inverter’s signed register showed −4 … −6 decaW (−0.4 … −0.6 W) per phase due to resolution limits [Elektroda, Daro1003, post #21407292]
Failure: nothing appears in Node-RED; why?
Most misses stem from spaces in topic strings or forgetting the red “Deploy” button. A misplaced space blocks Mosquitto delivery [Elektroda, michal.zd, post #21420465]
Quick troubleshooting checklist?
• run mosquitto_sub -t 'ime/inverter/#'
to confirm payloads
• verify inverter IP & serial in config
• restart service after editing
• look for signed overflow (6553x) at zero-sun periods.
Is battery data supported?
Not yet. Registers like ActivePower_Load_Total
and activePower_PCC_Total
are mapped but need real HYD+storage tests. The author welcomes pull requests [Elektroda, michal.zd, post #21409803]
How is the project licensed and what does it cost?
The code ships under the MIT licence, so it is free for personal or commercial use. No proprietary dependencies [Elektroda, michal.zd, post #21480795]