Pip inverter protocol

Hi to all!
i’m using since two years ago pip inverter syssi integration
Hardware is esp01s + 3,3 ttl / rs232 interface all is working very nice
yaml loaded in esphome is this:

esphome:
name: voltronic-a
friendly_name: Voltronic A

esp8266:
board: esp01_1m

logger:

api:
encryption:
key: “P4kFvrMK3JQK5Q6RUqnHux3Bt5UynFD02mWq2+JIEgQ=”

ota:

  • platform: esphome
    password: “f469303af66280ecfba5bbd0d79acc41”

wifi:
ssid: centro casa
password: bebobestione
output_power: 10

manual_ip:
static_ip: 192.168.2.204
gateway: 192.168.2.1
subnet: 255.255.255.0

uart:

  • id: uart_0
    tx_pin: GPIO1
    rx_pin: GPIO3
    baud_rate: 2400
    rx_buffer_size: 1024
    parity: none
    pipsolar:

  • uart_id: uart_0
    id: inverter0
    update_interval: 1.5s
    text_sensor:

  • platform: pipsolar
    pipsolar_id: inverter0

    last_qpigs:
    id: inverter0_last_qpigs
    name: inverter0_last_qpigs
    sensor:

  • platform: pipsolar
    pipsolar_id: inverter0

    ac_output_voltage:
    id: inverter0_ac_output_voltage
    name: Inv.A Tensione uscita

    ac_output_active_power:
    id: inverter0_pv_ac_output_active_power
    name: Inv.A Potenza attiva uscita

    output_load_percent:
    id: inverter0_pv_output_load_percent
    name: Inv.A Potenza % uscita

    battery_capacity_percent:
    id: inverter0_battery_capacity_percent
    name: Inv.A Capacita % batteria

    battery_voltage:
    id: inverter0_battery_voltage
    name: Inv.A Tensione batteria

    battery_charging_current:
    id: inverter0_battery_charging_current
    name: Inv.A Corrente carica batteria

    battery_discharge_current:
    id: inverter0_battery_discharge_current
    name: Inv.A Corrente scarica batteria

    pv_input_voltage:
    id: inverter0_pv1_voltage
    name: Inv.A Tensione pannelli PV1

    pv_charging_power:
    id: inverter0_pv1_power
    name: Inv.A Potenza pannelli PV1
    grid_voltage:
    id: inverter0_grid_voltage
    name: Inv.A Tensione entrata rete

Inverters are voltronic axpert max 7200W original

1 mount ago , a my dear friend had a present for me: a 11KW inverter same as voltronic , same case cpu display etc, but i’m sure it is a clone…
in fact internal wifi interface is missed and i have an external RS232/WIFI dongle working on a non official cloud.

First i loaded original voltronic firmware .

RS 232 interface works and correctly respond to watch power windows application , now i can read all parameters, modify and so on , exacly the same of the original inverter

It also reports to QPIGS command from axpert tools…

this is qpigs response from original 7k2 from axpert tools:

[2025-10-28 17:51:34] Send: QPIGS

[2025-10-28 17:51:35] [1704ms] Return: (000.0 00.0 229.9 49.9 1194 1190 016 387 53.00 000 089 0034 00.0 000.0 00.00 00024 00010000 00 00 00000 010œÈ

this is qpigs reports from 11k clone from axpert tools:

[2025-10-28 17:45:36] Send: QPIGS

[2025-10-28 17:45:38] [1766ms] Return: (229.6 50.0 000.0 00.0 00000 00000 000 000 00.00 000 000 0030 00.0 000.0 00.00 00000 00000000 00 00 00000 000 0 00 0000‹

**(this last one only powered with grid no battery no load … seems correct only last part of string is different …longer) **

PROBLEM IS THAT ESP01 on ESPHome DOES NOT WORK in HOME ASSISTANT : it returns UNKNOWN in the entities values ( not NOT AVAILABLE…)… and the log reports “timeout to poll” after QPIGS command from ESP01
esp01 interface is the same interface that runs correctly with other 7k2 inverters.
Also yaml file is similar

THIS IN LOG : (FROM ESP HOME LOG)

resetting boot loop counter [13:11:06.517][D][sensor:131]: ‘Uptime’: Sending state 1.22760 minutes with 0 decimals of accuracy [13:11:09.268][D][pipsolar:758]: timeout command to poll: QPIGS [13:11:09.347][D][pipsolar:842]: Sending polling command : QPIGS with length 5 [13:11:14.275][D][pipsolar:758]: timeout command to poll: QPIGS [13:11:14.355][D][pipsolar:842]: Sending polling command : QPIGS with length 5 [13:11:19.282][D][pipsolar:758]: timeout command to poll: QPIGS [13:11:19.361][D][pipsolar:842]: Sending polling command : QPIGS with length 5 [13:11:24.300][D][pipsolar:758]: timeout command to poll: QPIGS [13:11:24.379][D][pipsolar:842]: Sending polling command : QPIGS with length 5

This is also the log from protocol test yaml CODE installed on esp01:

INFO ESPHome 2025.10.3
INFO Reading configuration /config/esphome/voltronic-11k.yaml…
INFO Starting log output from 192.168.2.170 using esphome API
INFO Successfully resolved voltronic-11k @ 192.168.2.170 in 0.000s
INFO Successfully connected to voltronic-11k @ 192.168.2.170 in 0.003s
INFO Successful handshake with voltronic-11k @ 192.168.2.170 in 2.333s
[07:18:12.515][I][app:185]: ESPHome version 2025.10.3 compiled on Oct 27 2025, 07:09:05
[07:18:12.653][C][wifi:679]: WiFi:
[07:18:12.903][C][wifi:458]: Local MAC: BC:DD:C2:24:27:90
[07:18:13.128][C][wifi:465]: IP Address: 192.168.2.170
[07:18:14.242][C][wifi:469]: SSID: ‘centro casa’[redacted]
[07:18:14.242][C][wifi:469]: BSSID: 74:4D:28:62:CA:38[redacted]
[07:18:14.242][C][wifi:469]: Hostname: ‘voltronic-11k’
[07:18:14.242][C][wifi:469]: Signal strength: -68 dB ▂▄▆█
[07:18:14.242][C][wifi:469]: Channel: 1
[07:18:14.242][C][wifi:469]: Subnet: 255.255.255.0
[07:18:14.242][C][wifi:469]: Gateway: 192.168.2.1
[07:18:14.242][C][wifi:469]: DNS1: 0.0.0.0
[07:18:14.242][C][wifi:469]: DNS2: 0.0.0.0
[07:18:14.590][I][main:605]: Testing PI41 split phase / multiple strings commands…
[07:18:14.833][D][uart_debug:158]: >>> “QPIGS2h-\r”
[07:18:15.169][C][logger:261]: Logger:
[07:18:15.169][C][logger:261]: Max Level: DEBUG
[07:18:15.169][C][logger:261]: Initial Level: DEBUG
[07:18:15.481][C][logger:267]: Log Baud Rate: 115200
[07:18:15.481][C][logger:267]: Hardware UART: UART0
[07:18:15.703][C][uart.arduino_esp8266:124]: UART Bus:
[07:18:15.952][C][uart.arduino_esp8266:125]: TX Pin: GPIO1
[07:18:16.203][C][uart.arduino_esp8266:126]: RX Pin: GPIO3
[07:18:16.466][C][uart.arduino_esp8266:128]: RX Buffer Size: 256
[07:18:16.927][C][uart.arduino_esp8266:130]: Baud Rate: 2400 baud
[07:18:16.927][C][uart.arduino_esp8266:130]: Data Bits: 8
[07:18:16.927][C][uart.arduino_esp8266:130]: Parity: NONE
[07:18:16.927][C][uart.arduino_esp8266:130]: Stop bits: 1
[07:18:17.253][C][uart.arduino_esp8266:137]: Using hardware serial interface.
[07:18:18.059][W][uart.arduino_esp8266:151]: You’re using the same serial port for logging and the UART component. Please disable logging over the serial port by setting logger->baud_rate to 0.
[07:18:18.329][D][uart_debug:158]: >>> “QP2GS0\x14\x05\r”
[07:18:18.746][C][esphome.ota:093]: Over-The-Air updates:
[07:18:18.746][C][esphome.ota:093]: Address: 192.168.2.170:8266
[07:18:18.746][C][esphome.ota:093]: Version: 2
[07:18:18.976][C][esphome.ota:100]: Password configured
[07:18:19.442][C][safe_mode:018]: Safe Mode:
[07:18:19.442][C][safe_mode:018]: Successful after: 60s
[07:18:19.442][C][safe_mode:018]: Invoke after: 10 attempts
[07:18:19.442][C][safe_mode:018]: Duration: 300s
[07:18:19.700][D][uart_debug:158]: >>> “QP2GS1\x04$\r”
[07:18:20.149][C][api:222]: Server:
[07:18:20.149][C][api:222]: Address: 192.168.2.170:6053
[07:18:20.149][C][api:222]: Listen backlog: 1
[07:18:20.149][C][api:222]: Max connections: 4
[07:18:20.348][C][api:229]: Noise encryption: YES
[07:18:20.592][C][mdns:179]: mDNS:
[07:18:20.592][C][mdns:179]: Hostname: voltronic-11k
[07:18:20.865][I][main:629]: Testing unsupported PI18 commands…
[07:18:21.127][D][uart_debug:158]: >>> “^P005PIq\x8B\r”
[07:18:22.141][D][uart_debug:158]: >>> “^P005GSX\x14\r”
[07:18:23.158][D][uart_debug:158]: >>> “^P006MOD\xDD\xBE\r”
[07:18:24.175][I][main:653]: Testing unsupported PI17 commands…
[07:18:24.177][D][uart_debug:158]: >>> “^P003PI\r”
[07:18:25.193][D][uart_debug:158]: >>> “^P004MOD\r”
[07:18:26.210][D][uart_debug:158]: >>> “^P005FLAG\r”
[07:18:27.229][I][main:677]: Testing unsupported PI16 commands…
[07:18:27.231][D][uart_debug:158]: >>> “QPI\r”
[07:18:28.244][D][uart_debug:158]: >>> “QMOD\r”
[07:18:29.260][D][uart_debug:158]: >>> “QPIGS\r”
[07:18:30.278][D][uart_debug:158]: >>> “QPIRI\r”
[07:18:31.293][D][uart_debug:158]: >>> “QMOD\r”
[07:18:31.314][I][main:711]: Testing unsupported Qx commands…
[07:18:31.424][D][uart_debug:158]: >>> “Q1\r”
[07:18:32.441][D][uart_debug:158]: >>> “Q2\r”
[07:18:33.457][D][uart_debug:158]: >>> “Q4\r”
[07:18:34.475][D][uart_debug:158]: >>> “Q6\r”
[07:18:35.491][I][main:742]: Done. Repeating…
[07:19:20.067][I][main:515]: Testing PI30/PI30MAX/PI30REVO/PI41 commands…
[07:19:20.216][I][main:518]: This is the set of commands supported by the pipsolar component!
[07:19:20.460][D][uart_debug:158]: >>> “QPI\xBE\xAC\r”
[07:19:21.477][D][uart_debug:158]: >>> “QDIq\e\r”
[07:19:22.495][D][uart_debug:158]: >>> “QFLAG\x98t\r”
[07:19:23.510][D][uart_debug:158]: >>> “QMN\xBBd\r”
[07:19:24.526][D][uart_debug:158]: >>> “QMODI\xC1\r”
[07:19:25.544][D][uart_debug:158]: >>> “QPIGS\xB7\xA9\r”
[07:19:26.558][D][uart_debug:158]: >>> “QPIRI\xF8T\r”
[07:19:27.575][D][uart_debug:158]: >>> “QPIWS\xB4\xDA\r”
[07:19:28.590][D][uart_debug:158]: >>> “QT'\xFF\r”
[07:19:29.607][D][uart_debug:158]: >>> “QPGS0?\xDA\r”
[07:19:30.623][D][uart_debug:158]: >>> “QPGS1/\xFB\r”
[07:19:31.638][D][uart_debug:158]: >>> “QPGS2\x1F\x98\r”
[07:19:32.664][I][main:605]: Testing PI41 split phase / multiple strings commands…
[07:19:32.711][D][uart_debug:158]: >>> “QPIGS2h-\r”
[07:19:33.729][D][uart_debug:158]: >>> “QP2GS0\x14\x05\r”
[07:19:34.745][D][uart_debug:158]: >>> “QP2GS1\x04$\r”
[07:19:35.762][I][main:629]: Testing unsupported PI18 commands…
[07:19:35.764][D][uart_debug:158]: >>> “^P005PIq\x8B\r”
[07:19:36.777][D][uart_debug:158]: >>> “^P005GSX\x14\r”
[07:19:37.792][D][uart_debug:158]: >>> “^P006MOD\xDD\xBE\r”
[07:19:38.811][I][main:653]: Testing unsupported PI17 commands…
[07:19:38.814][D][uart_debug:158]: >>> “^P003PI\r”
[07:19:39.827][D][uart_debug:158]: >>> “^P004MOD\r”
[07:19:40.845][D][uart_debug:158]: >>> “^P005FLAG\r”
[07:19:41.859][I][main:677]: Testing unsupported PI16 commands…
[07:19:41.863][D][uart_debug:158]: >>> “QPI\r”
[07:19:42.873][D][uart_debug:158]: >>> “QMOD\r”
[07:19:43.886][D][uart_debug:158]: >>> “QPIGS\r”
[07:19:44.902][D][uart_debug:158]: >>> “QPIRI\r”
[07:19:45.918][D][uart_debug:158]: >>> “QMOD\r”
[07:19:45.939][I][main:711]: Testing unsupported Qx commands…
[07:19:46.050][D][uart_debug:158]: >>> “Q1\r”
[07:19:47.065][D][uart_debug:158]: >>> “Q2\r”
[07:19:48.081][D][uart_debug:158]: >>> “Q4\r”
[07:19:49.100][D][uart_debug:158]: >>> “Q6\r”
[07:19:50.120][I][main:742]: Done. Repeating…

seems somehow like crc and so on,

but i’m sorry i’m not computer scientist !!

some ideas?

Thank you in advance

Mauro

You loaded the same firmware onto two different models? Yikes! Unless they contain identical parts, wired up exactly the same way, are you sure they are fully software compatible?

From the QPIGS output, it seems the fake one is giving you voltage and frequency, however at a different offset. This confirms the firmware is not working correctly. The rest of your code seems relatively straightforward.

I’d strive to get good firmware back on that fake inverter, before some runaway parameter sets it in overdrive and cooks something.

You are talking ELEVEN THOUSAND WATTS of power - a significant amount to explode or catch fire.

Hi,
Thank you for the answer

I have two different inverters, one 7k2, original working fine in Hao via the Syssi esphome.pipsolar integration.

The original firmware of the fake 11K was still Voltronic, just an older version.

I only did an update.
In fact, the behavior and response to the QPIGS command are the same in both firmware versions.

I think the real difference is in the 24c256 eeprom on the DSP board, which hasn’t actually been touched. The basic settings and protocol should be there (I think it’s different because it manages the comunication with the external dongle instead of the internal one that is in the original inverters …)
Another test i done: connected the removable display of the original 7K2 inverter to the 11k clone. So it connected to the Voltronic Watch Power cloud, a sign that this part is contained in the firmware of the internal Wi-Fi card, and while the RS232 port maintains the continues not to communicate correctly and the qpigs response ALWAYS REMAINS THE INCORRECT ONE…

Seeems that Qpigs string is not read It is UNKNOWN , not unavailable…

I see it as a serious issue. If I program a new EEPROM with a dump from another original 11K inverter, it might work, but I think I’ll lose the serial number, exposing myself to a certain F90 error and a related lockout after 2 months. Maybe the right way is to leave this original eeprom and modify the Syssi esphome-pipsolar integration, but I don’t know how to do that. .requires a computer expert