syssi / esphome-pipsolar Goto Github PK
View Code? Open in Web Editor NEWESPHome component to monitor and control a pipsolar inverter via RS232
License: Apache License 2.0
ESPHome component to monitor and control a pipsolar inverter via RS232
License: Apache License 2.0
I have an inverter model as in the title. I connected it with HA via Nodemcu V3 ESP8266 and RS TTL MAX3232cse converter. I connected the TX / RX pin with ESP to the RX / TX converter. Then I connected RJ45 to the inverter with three pins. Only with this physical configuration do I get any responses from the inverter that look like this:
> INFO Reading configuration /config/esphome/easun.yaml...
> INFO Detected timezone 'Europe/Warsaw'
> INFO Starting log output from easun.local using esphome API
> INFO Successfully connected to easun.local
> [10:40:56][I][app:102]: ESPHome version 2022.10.1 compiled on Nov 8 2022, 09:41:51
> [10:40:56][C][wifi:502]: WiFi:
> [10:40:56][C][wifi:360]: Local MAC: C8:C9:A3:5C:85:0D
> [10:40:56][C][wifi:361]: SSID: 'DeBraders'[redacted]
> [10:40:56][C][wifi:362]: IP Address: 192.168.1.236
> [10:40:56][C][wifi:363]: BSSID: 9C:9D:7E:15:DB:A3[redacted]
> [10:40:56][C][wifi:365]: Hostname: 'easun'
> [10:40:56][C][wifi:367]: Signal strength: -76 dB ▂▄▆█
> [10:40:56][C][wifi:371]: Channel: 6
> [10:40:56][C][wifi:372]: Subnet: 255.255.255.0
> [10:40:56][C][wifi:373]: Gateway: 192.168.1.1
> [10:40:56][C][wifi:374]: DNS1: 192.168.1.1
> [10:40:56][C][wifi:375]: DNS2: 0.0.0.0
> [10:40:56][C][logger:275]: Logger:
> [10:40:56][C][logger:276]: Level: DEBUG
> [10:40:56][C][logger:277]: Log Baud Rate: 0
> [10:40:56][C][logger:278]: Hardware UART: UART1
> [10:40:56][C][uart.arduino_esp8266:102]: UART Bus:
> [10:40:56][C][uart.arduino_esp8266:103]: TX Pin: GPIO1
> [10:40:56][C][uart.arduino_esp8266:104]: RX Pin: GPIO3
> [10:40:56][C][uart.arduino_esp8266:106]: RX Buffer Size: 256
> [10:40:56][C][uart.arduino_esp8266:108]: Baud Rate: 2400 baud
> [10:40:56][C][uart.arduino_esp8266:109]: Data Bits: 8
> [10:40:56][C][uart.arduino_esp8266:110]: Parity: NONE
> [10:40:56][C][uart.arduino_esp8266:111]: Stop bits: 1
> [10:40:56][C][uart.arduino_esp8266:113]: Using hardware serial interface.
> [10:40:56][C][pipsolar:860]: Pipsolar:
> [10:40:56][C][pipsolar:861]: used commands:
> [10:40:56][C][pipsolar:864]: QPIRI
> [10:40:56][C][pipsolar:864]: QPIGS
> [10:40:56][C][web_server:125]: Web Server:
> [10:40:56][C][web_server:126]: Address: easun.local:80
> [10:40:56][C][mdns:100]: mDNS:
> [10:40:56][C][mdns:101]: Hostname: easun
> [10:40:56][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:40:56][C][ota:089]: Over-The-Air Updates:
> [10:40:56][C][ota:090]: Address: easun.local:8266
> [10:40:56][C][ota:093]: Using Password.
> [10:40:56][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:40:56][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:40:57][C][api:138]: API Server:
> [10:40:57][C][api:139]: Address: easun.local:6053
> [10:40:57][C][api:141]: Using noise encryption: YES
> [10:40:57][C][sntp:050]: SNTP Time:
> [10:40:57][C][sntp:051]: Server 1: '0.pool.ntp.org'
> [10:40:57][C][sntp:052]: Server 2: '1.pool.ntp.org'
> [10:40:57][C][sntp:053]: Server 3: '2.pool.ntp.org'
> [10:40:57][C][sntp:054]: Timezone: 'CET-1CEST,M3.5.0,M10.5.0/3'
> [10:40:57][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 406 27.21 000 100 0471 0001 066.6 27.07 00000 10010110 00 04 00045 100)\e\r"
> [10:40:57][D][pipsolar:772]: checking crc on incoming message
> [10:40:57][D][pipsolar:781]: CRC NOK expected: 67 B3 but got: 0 0
> [10:40:57][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:40:58][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:40:58][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:41:02][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:41:03][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:41:03][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:41:03][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 407 27.24 000 100 0471 0001 066.6 27.09 00000 10010110 00 04 00042 100\xDCr\r"
> [10:41:08][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:41:08][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:41:08][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:41:08][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:41:13][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:41:13][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:41:13][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:41:13][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 407 27.24 000 100 0471 0001 066.6 27.09 00000 10010110 00 04 00045 100\xBB\xA6\r"
> [10:41:18][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:41:18][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:41:18][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:41:18][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:41:23][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:41:23][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:41:23][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:41:23][D][uart_debug:158]: <<< "(001.0 00.0 229.0 50.0 0000 0000 000 407 27.24 000 100 0471 0001 066.6 27.09 00000 10010110 00 04 00048 100FQ\r"
> [10:41:28][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:41:28][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:41:28][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:41:28][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:41:33][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:41:33][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:41:33][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:41:33][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 407 27.24 000 100 0471 0001 066.6 27.10 00000 10010110 00 04 00042 100\xE2\x9A\r"
> [10:41:38][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:41:38][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:41:38][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:41:38][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:41:43][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:41:43][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:41:43][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:41:43][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 407 27.24 000 100 0471 0001 066.7 27.11 00000 10010110 00 04 00039 100{\xF9\r"
> [10:41:48][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:41:48][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:41:48][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:41:48][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:41:53][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:41:53][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:41:53][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:41:53][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 407 27.29 000 100 0471 0001 066.7 27.12 00000 10010110 00 04 00039 100\xFA=\r"
> [10:41:58][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:41:58][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:41:58][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:41:58][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
> [10:42:03][D][pipsolar:755]: timeout command to poll: QPIRI
> [10:42:03][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
> [10:42:03][D][pipsolar:836]: Sending polling command : QPIGS with length 5
> [10:42:03][D][uart_debug:158]: <<< "(001.0 00.0 228.0 50.0 0000 0000 000 408 27.29 000 100 0471 0001 066.8 27.13 00000 10010110 00 04 00048 100i\x8B\r"
> [10:42:08][D][pipsolar:755]: timeout command to poll: QPIGS
> [10:42:08][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
> [10:42:08][D][pipsolar:836]: Sending polling command : QPIRI with length 5
> [10:42:08][D][uart_debug:158]: <<< "(230.0 01.3 230.0 50.0 01.3 3000 2400 24.0 24.5 23.5 28.8 27.0 2 20 20 0 1 4 - 01 1 0 27.0 0 0\xAF\x10\r"
This is what my HA configuration file looks like:
substitutions:
name: pipsolar
esphome:
name: easun
platform: ESP8266
board: nodemcuv2
logger:
baud_rate: 0
hardware_uart: uart1
api:
encryption:
key:
ota:
password:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid:
password:
web_server:
port: 80
uart:
id: uart0
baud_rate: 2400
tx_pin: GPIO1
rx_pin: GPIO3
debug:
direction: BOTH
dummy_receiver: true
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
pipsolar:
uart_id: uart0
id: inverter0
sensor:
- platform: pipsolar
pipsolar_id: inverter0
# QPIRI
grid_rating_voltage:
name: "${name} grid_rating_voltage"
battery_rating_voltage:
name: "${name} battery_rating_voltage"
id: inverter0_battery_rating_voltage
current_max_ac_charging_current:
name: "${name} current_max_ac_charging_current"
current_max_charging_current:
name: "${name} current_max_charging_current"
pv_ok_condition_for_parallel:
name: "${name} pv_ok_condition_for_parallel"
pv_power_balance:
name: "${name} pv_power_balance"
# QPIGS
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
id: inverter0_offgrid_pv_input_current_for_battery
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
id: inverter0_offgrid_battery_voltage_scc
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
pv_charging_power:
name: "${name} pv_charging_power"
output:
- platform: pipsolar
pipsolar_id: inverter0
battery_recharge_voltage:
id: inverter0_battery_recharge_voltage_out
- platform: pipsolar
pipsolar_id: inverter0
current_max_ac_charging_current:
id: current_max_ac_charging_current
- platform: pipsolar
pipsolar_id: inverter0
current_max_charging_current:
id: current_max_charging_current
time:
- platform: sntp
id: my_time
I tried to connect the inverter to WatchPower. Then I had to reverse pin 1 and 2 in RJ45 so that it would return something on the console, but the program did not connect, it did not detect the inverter. But when I opened putty, after pressing enter I got "(NAKss"
ac_output_active_power
and ac_output_rating_active_power
are very useful for seeing how much power I am using.
Still, these don't tell me anything if this energy comes from the grid, battery or solar? Is there any way to get this data?
I just updated last ESPhome dev and now gor error while compile the PVbrain using the pip8048 branch.
Here is the log of compilation
(base) PS C:\Users\SeByDocKy\Desktop\SeBy\Maison\Home assistant\47> esphome compile pvbrain.yaml
←[32mINFO Reading configuration pvbrain.yaml...←[0m
←[32mINFO Updating https://github.com/syssi/esphome-jk-bms.git@main←[0m
←[32mINFO Updating https://github.com/syssi/esphome-pipsolar.git@pip8048←[0m
←[31mERROR Unable to load component pipsolar.switch:
Traceback (most recent call last):
File "C:\Users\SeByDocKy\anaconda3\lib\site-packages\esphome\loader.py", line 162, in _lookup_module
module = importlib.import_module(f"esphome.components.{domain}")
File "C:\Users\SeByDocKy\anaconda3\lib\importlib\__init__.py", line 127, in import_module
return _bootstrap._gcd_import(name[level:], package, level)
File "<frozen importlib._bootstrap>", line 1030, in _gcd_import
File "<frozen importlib._bootstrap>", line 1007, in _find_and_load
File "<frozen importlib._bootstrap>", line 986, in _find_and_load_unlocked
File "<frozen importlib._bootstrap>", line 680, in _load_unlocked
File "<frozen importlib._bootstrap_external>", line 850, in exec_module
File "<frozen importlib._bootstrap>", line 228, in _call_with_frames_removed
File "C:\Users\SeByDocKy\Desktop\SeBy\Maison\Home assistant\47\.esphome\external_components\8e1d245d\components\pipsolar\switch\__init__.py", line 38, in <module>
cv.Optional(CONF_ICON, default=ICON_POWER): switch.icon,
AttributeError: module 'esphome.components.switch' has no attribute 'icon'←[0m
←[32mINFO Detected timezone 'Europe/Paris'←[0m
Failed config
switch.pipsolar: [source pvbrain.yaml:503]
Platform not found: 'switch.pipsolar'.
platform: pipsolar
pipsolar_id: pip8048
output_source_priority_utility:
name: pvbrain_axpert_output_source_priority_utility
output_source_priority_solar:
name: pvbrain_axpert_output_source_priority_solar
output_source_priority_battery:
name: pvbrain_axpert_output_source_priority_battery
input_voltage_range:
name: pvbrain_axpert_input_voltage_range
(base) PS C:\Users\SeByDocKy\Desktop\SeBy\Maison\Home assistant\47>
i use component pipsolar original Esphome.
I have some missing and mismatching data :Pv Input Power---Pv input Voltage, Pv Input ampere,Battery discharge Ampere.
This 2 lines are from Voltronic/homeassistant Log.
QPIGS reply size (110 bytes)
QPIGS: 110 bytes read: (231.0 50.0 231.0 50.0 1848 1827 036 397 53.10 011 054 0048 01.1 335.3 00.00 00000 00010111 00 00 00722 010
00722=Pw input power
QPIRI reply size (103 bytes)
QPIRI: 103 bytes read: (230.0 21.7 230.0 50.0 21.7 5000 5000 48.0 50.0 47.5 54.7 53.6 2 010 040 0 1 3 9 00 0 0 52.0 0 1 035
This 2 lines are from Pipsolar original Esphome component.
Inveter last_qpigs': Sending state '(230.9 49.9 230.9 49.9 0461 0412 009 393 52.70 003 050 0048 00.3 322.5 00.00 00000 00010111 00 00 00194 010' 00194=Pv Input Power
dware UART: UART0
[11:36:47][D][sensor:125]: 'Inveter grid_voltage': Sending state 230.89999 V with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter grid_frequency': Sending state 49.90000 Hz with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter ac_output_voltage': Sending state 230.89999 V with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter ac_output_frequency': Sending state 49.90000 Hz with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter ac_output_apparent_power': Sending state 461.00000 VA with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'inverter0_ac_output_active_power': Sending state 412.00000 W with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter output_load_percent': Sending state 9.00000 % with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter bus_voltage': Sending state 393.00000 V with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter battery_voltage': Sending state 52.70000 V with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter battery_charging_current': Sending state 3.00000 A with 1 decimals of accuracy
[11:36:47][D][sensor:125]: 'Inveter battery_capacity_percent': Sending state 50.00000 % with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter inverter_heat_sink_temperature': Sending state 48.00000 °C with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter pv_input_current_for_battery': Sending state 0.00000 A with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter pv_input_voltage': Sending state 0.30000 V with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter battery_voltage_scc': Sending state 322.50000 V with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter battery_discharge_current': Sending state 0.00000 A with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter eeprom_version': Sending state 0.00000 with 1 decimals of accuracy
[11:36:48][D][sensor:125]: 'Inveter pv_charging_power': Sending state 0.00000 W with 1 decimals of accuracy
Inveter last_qpiri': Sending state '(230.0 21.7 230.0 50.0 21.7 5000 5000 48.0 50.0 47.5 54.7 53.6 2 010 040 0 0 3 9 00 0 0 52.0 0 1 035'
[11:36:50][D][sensor:125]: 'inverter0_grid_rating_voltage': Sending state 230.00000 V with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_grid_rating_current': Sending state 21.70000 A with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_battery_rating_voltage': Sending state 48.00000 V with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_battery_recharge_voltage': Sending state 50.00000 V with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_battery_under_voltage': Sending state 47.50000 V with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_battery_bulk_voltage': Sending state 54.70000 V with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_battery_float_voltage': Sending state 53.60000 V with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_output_source_priority': Sending state 0.00000 with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_charger_source_priority': Sending state 3.00000 with 1 decimals of accuracy
[11:36:50][D][sensor:125]: 'inverter0_battery_redischarge_voltage': Sending state 52.00000 with 1 decimals of accuracy
[11:36:51][D][pipsolar:838]: Sending polling command : QPIGS with length 5
thanks for helps
I'm trying to connect my Mecer (Axpert) 3kw inverter to HA using ESPHome pipsolar via RS232, but the communication just times out. I'm pretty sure that the RS233 to TTL converter is wired correctly, but I just can't get this to work. Note that ESPHome is on the latest version.
The attached log shows the result of the configuration that tests the protocol, but I am a bit lost at this point. Some assistance to get onto the right track would be appreciated.
Hi syssi,
I use your component for PIP in my new combined yaml for esphome in HA.
configuration yaml is validated, but If I try install it to ESP32, I got theese errors:
Compiling /data/fve/.pioenvs/fve/src/esphome/components/pipsolar/pipsolar.cpp.o
In file included from src/esphome/components/pipsolar/output/pipsolar_output.h:3,
from src/esphome/components/pipsolar/output/pipsolar_output.cpp:1:
src/esphome/components/pipsolar/output/../pipsolar.h:7:10: fatal error: esphome/components/pipsolar/select/pipsolar_select.h: No such file or directory
#include "esphome/components/pipsolar/select/pipsolar_select.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [/data/fve/.pioenvs/fve/src/esphome/components/pipsolar/output/pipsolar_output.cpp.o] Error 1
In file included from src/esphome/components/pipsolar/pipsolar.cpp:1:
src/esphome/components/pipsolar/pipsolar.h:7:10: fatal error: esphome/components/pipsolar/select/pipsolar_select.h: No such file or directory
#include "esphome/components/pipsolar/select/pipsolar_select.h"
^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
*** [/data/fve/.pioenvs/fve/src/esphome/components/pipsolar/pipsolar.cpp.o] Error 1
========================= [FAILED] Took 15.73 seconds =========================
My yaml is a very long and can not be uploaded as file to here.
Is for completely remote monitoring my PVE and I try to test it.
substitutions:
name: fve
device_description: "Monitor and control FVE"
updates: 30s
epever_rx: GPIO18
epever_tx: GPIO19
inv1_rx: GPIO16
inv1_tx: GPIO17
inv2_rx: GPIO25
inv2_tx: GPIO26
nextion_rx: GPIO32
nextion_tx: GPIO33
bms0: "${name} bms0"
bms1: "${name} bms1"
external_components_source_1: github://syssi/esphome-jk-bms@main
external_components_source_2: github://syssi/esphome-pipsolar@2424mse1
bms0_mac_address: C8:47:8C:E4:51:FA
bms1_mac_address: C8:47:8C:E4:52:9D
bms0_protocol_version: JK02
bms1_protocol_version: JK02
external_components:
- source: ${external_components_source_1}
refresh: 0s
- source: ${external_components_source_2}
refresh: 0s
esphome:
name: ${name}
platformio_options:
friendly_name: fve
build_flags:
- -DCONFIG_ARDUINO_LOOP_STACK_SIZE=32768
# TIME do EPEVER
on_boot:
priority: -100
then:
- lambda: |-
// get local time and sync to controller
time_t now = ::time(nullptr);
struct tm *time_info = ::localtime(&now);
int seconds = time_info->tm_sec;
int minutes = time_info->tm_min;
int hour = time_info->tm_hour;
int day = time_info->tm_mday;
int month = time_info->tm_mon + 1;
int year = time_info->tm_year % 100;
esphome::modbus_controller::ModbusController *controller = id(epever);
// if there is no internet connection localtime returns year 70
if (year != 70) {
// create the payload
std::vector<uint16_t> rtc_data = {uint16_t((minutes << 8) | seconds), uint16_t((day << 8) | hour),
uint16_t((year << 8) | month)};
// Create a modbus command item with the time information as the payload
esphome::modbus_controller::ModbusCommandItem set_rtc_command =
esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(controller, 0x9013, 3, rtc_data);
// Submit the command to the send queue
epever->queue_command(set_rtc_command);
ESP_LOGI("ModbusLambda", "EPSOLAR RTC set to %02d:%02d:%02d %02d.%02d.%04d", hour, minutes, seconds, day, month,
year + 2000);
}
esp32:
board: esp32dev
framework:
type: arduino
logger:
level: INFO
api:
reboot_timeout: 0s
esp32_ble_tracker:
ble_client:
- mac_address: ${bms0_mac_address}
id: client0
- mac_address: ${bms1_mac_address}
id: client1
jk_bms_ble:
- ble_client_id: client0
protocol_version: ${bms0_protocol_version}
throttle: 10s
id: bms0
- ble_client_id: client1
protocol_version: ${bms1_protocol_version}
throttle: 10s
id: bms1
ota:
web_server:
port: 80
#wifi:
# ssid: !secret wifi_ssid_0
# password: !secret wifi_password
#captive_portal:
time:
- platform: sntp
id: sntp_time
# před půlnocí přičte denní energii k totální energii
on_time:
- seconds: 59
minutes: 59
hours: 23
then:
lambda: |-
id(inverter1_total_line_energy) += id(inverter1_line_energy);
id(inverter1_total_inverter_energy) += id(inverter1_line_energy);
id(inverter1_total_pv_energy) += id(inverter1_pv_energy);
id(inverter1_total_battery_charging_energy) += id(inverter1_battery_charging_energy);
id(inverter1_total_battery_discharging_energy) += id(inverter1_battery_discharging_energy);
id(inverter2_total_line_energy) += id(inverter2_line_energy);
id(inverter2_total_inverter_energy) += id(inverter2_line_energy);
id(inverter2_total_pv_energy) += id(inverter2_pv_energy);
id(inverter2_total_battery_charging_energy) += id(inverter2_battery_charging_energy);
id(inverter2_total_battery_discharging_energy) += id(inverter2_battery_discharging_energy);
ethernet:
type: LAN8720
mdc_pin: GPIO23
mdio_pin: GPIO22
clk_mode: GPIO0_IN
phy_addr: 0
uart:
- id: mod_bus
tx_pin: ${epever_tx}
rx_pin: ${epever_rx}
baud_rate: 115200
stop_bits: 1
- id: inv1_uart
tx_pin: ${inv1_tx}
rx_pin: ${inv1_rx}
baud_rate: 2400
- id: inv2_uart
tx_pin: ${inv2_tx}
rx_pin: ${inv2_rx}
baud_rate: 2400
- id: nextion_uart
tx_pin: ${nextion_tx}
rx_pin: ${nextion_rx}
baud_rate: 115200
modbus:
#flow_control_pin: 23
uart_id: mod_bus
send_wait_time: 200ms
id: mod_bus_epever
modbus_controller:
- id: epever
address: 0x1
modbus_id: mod_bus_epever
command_throttle: 200ms
setup_priority: -10
update_interval: ${updates}
pipsolar:
- uart_id: inv1_uart
id: inverter1
- uart_id: inv2_uart
id: inverter2
globals:
- id: inverter1_total_line_energy
type: float
restore_value: True
- id: inverter1_total_inverter_energy
type: float
restore_value: True
- id: inverter1_total_pv_energy
type: float
restore_value: True
- id: inverter1_total_battery_charging_energy
type: float
restore_value: True
- id: inverter1_total_battery_discharging_energy
type: float
restore_value: True
- id: inverter2_total_line_energy
type: float
restore_value: True
- id: inverter2_total_inverter_energy
type: float
restore_value: True
- id: inverter2_total_pv_energy
type: float
restore_value: True
- id: inverter2_total_battery_charging_energy
type: float
restore_value: True
- id: inverter2_total_battery_discharging_energy
type: float
restore_value: True
sensor:
# EPEVER
- platform: template
accuracy_decimals: 0
name: "Generated Charge today"
id: generated_charge_today
unit_of_measurement: "Ah"
- platform: modbus_controller
modbus_controller_id: epever
id: array_rated_voltage
name: "array_rated_voltage"
address: 0x3000
skip_updates: 60
unit_of_measurement: "V"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: array_rated_current
name: "array_rated_current"
address: 0x3001
unit_of_measurement: "A"
register_type: read
value_type: U_WORD
accuracy_decimals: 2
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: array_rated_power
name: "array_rated_power"
address: 0x3002
register_count: 2
unit_of_measurement: "W"
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_rated_voltage
name: "battery_rated_voltage"
address: 0x3004
unit_of_measurement: "V"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_rated_current
name: "battery_rated_current"
address: 0x3005
unit_of_measurement: "A"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: battery_rated_power
name: "battery_rated_power"
address: 0x3006
unit_of_measurement: "W"
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_mode
name: "charging_mode"
address: 0x3008
unit_of_measurement: ""
register_type: read
value_type: U_WORD
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_voltage
name: "PV array input voltage"
address: 0x3100
unit_of_measurement: "V" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_current
name: "PV array input current"
address: 0x3101
unit_of_measurement: "A" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_WORD
accuracy_decimals: 2
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: pv_input_power
name: "PV array input power"
address: 0x3102
unit_of_measurement: "W" ## for any other unit the value is returned in minutes
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_voltage
name: "Charging voltage"
address: 0x3104
unit_of_measurement: "V"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_current
name: "Charging current"
address: 0x3105
unit_of_measurement: "A"
register_type: read
value_type: U_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: charging_power
name: "Charging power"
address: 0x3106
unit_of_measurement: "W"
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: device_temperature
name: "Device temperature"
address: 0x3111
unit_of_measurement: °C
register_type: read
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: power_components_temperature
name: "Power components temperature"
address: 0x3112
unit_of_measurement: °C
register_type: read
value_type: S_WORD
accuracy_decimals: 1
filters:
- multiply: 0.01
- platform: modbus_controller
modbus_controller_id: epever
id: Charger_status
name: "Charger status"
address: 0x3201
register_type: read
value_type: U_WORD
accuracy_decimals: 0
- platform: modbus_controller
modbus_controller_id: epever
id: generated_energy_total
name: "Generated energy total"
address: 0x3312
register_type: read
value_type: U_DWORD_R
accuracy_decimals: 1
filters:
- multiply: 0.01
# JKBMS
- platform: jk_bms_ble
jk_bms_ble_id: bms0
delta_cell_voltage:
name: "${bms0} delta cell voltage"
average_cell_voltage:
name: "${bms0} average cell voltage"
total_voltage:
name: "${bms0} total voltage"
current:
name: "${bms0} current"
power:
name: "${bms0} power"
temperature_sensor_1:
name: "${bms0} temperature sensor 1"
temperature_sensor_2:
name: "${bms0} temperature sensor 2"
power_tube_temperature:
name: "${bms0} power tube temperature"
state_of_charge:
name: "${bms0} state of charge"
capacity_remaining:
name: "${bms0} capacity remaining"
charging_cycles:
name: "${bms0} charging cycles"
cell_voltage_1:
name: "${bms0} cell voltage 1"
cell_voltage_2:
name: "${bms0} cell voltage 2"
cell_voltage_3:
name: "${bms0} cell voltage 3"
cell_voltage_4:
name: "${bms0} cell voltage 4"
cell_voltage_5:
name: "${bms0} cell voltage 5"
cell_voltage_6:
name: "${bms0} cell voltage 6"
cell_voltage_7:
name: "${bms0} cell voltage 7"
cell_voltage_8:
name: "${bms0} cell voltage 8"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
delta_cell_voltage:
name: "${bms1} delta cell voltage"
average_cell_voltage:
name: "${bms1} average cell voltage"
total_voltage:
name: "${bms1} total voltage"
current:
name: "${bms1} current"
power:
name: "${bms1} power"
temperature_sensor_1:
name: "${bms1} temperature sensor 1"
temperature_sensor_2:
name: "${bms1} temperature sensor 2"
power_tube_temperature:
name: "${bms1} power tube temperature"
state_of_charge:
name: "${bms1} state of charge"
capacity_remaining:
name: "${bms1} capacity remaining"
charging_cycles:
name: "${bms1} charging cycles"
cell_voltage_1:
name: "${bms1} cell voltage 1"
cell_voltage_2:
name: "${bms1} cell voltage 2"
cell_voltage_3:
name: "${bms1} cell voltage 3"
cell_voltage_4:
name: "${bms1} cell voltage 4"
cell_voltage_5:
name: "${bms1} cell voltage 5"
cell_voltage_6:
name: "${bms1} cell voltage 6"
cell_voltage_7:
name: "${bms1} cell voltage 7"
cell_voltage_8:
name: "${bms1} cell voltage 8"
# EASUN
- platform: pipsolar
pipsolar_id: inverter1
grid_rating_voltage:
id: inverter1_grid_rating_voltage
name: Inverter 1 Grid Rating Voltage
ac_output_rating_frequency:
id: inverter1_ac_output_rating_frequency
name: Inverter 1 AC Output Rating Freq
grid_rating_current:
id: inverter1_grid_rating_current
name: Inverter 1 Grid Rating Current
ac_output_apparent_power:
id: inverter1_ac_output_apparent_power
name: Inverter 1 AC Output Apparent Power
ac_output_active_power:
id: inverter1_ac_output_active_power
name: Inverter 1 AC Output Active Power
grid_voltage:
id: inverter1_grid_voltage
name: Inverter 1 Grid Voltage
grid_frequency:
id: inverter1_grid_frequency
name: Inverter 1 Grid Freq
ac_output_voltage:
id: inverter1_ac_output_voltage
name: Inverter 1 AC Output Voltage
ac_output_frequency:
id: inverter1_ac_output_frequency
name: Inverter 1 AC Output Freq
output_load_percent:
id: inverter1_output_load_percent
name: Inverter 1 Output Load Percent
bus_voltage:
id: inverter1_bus_voltage
name: Inverter 1 Bus Voltage
battery_voltage:
id: inverter1_battery_voltage
name: Inverter 1 Battery Voltage
battery_charging_current:
id: inverter1_charging_current
name: Inverter 1 Charging Current
battery_capacity_percent:
id: inverter1_battery_capacity_percent
name: Inverter 1 Battery Cap Percent
inverter_heat_sink_temperature:
id: inverter1_inverter_heat_sink_temperature
name: Inverter 1 Inverter Heat Sink Temp
pv_input_current_for_battery:
id: inverter1_pv_input_current_for_battery
name: Inverter 1 PV Input Current
pv_input_voltage:
id: inverter1_pv_input_voltage
name: Inverter 1 PV Input Voltage
battery_voltage_scc:
id: inverter1_battery_voltage_scc
name: Inverter 1 Battery Voltage SCC
battery_discharge_current:
id: inverter1_battery_discharge_current
name: Inverter 1 Battery Discharge Current
pv_charging_power:
id: inverter1_pv_charging_power
name: Inverter 1 PV Charging Power
# MPP
- platform: pipsolar
pipsolar_id: inverter2
grid_rating_voltage:
id: inverter2_grid_rating_voltage
name: Inverter 2 Grid Rating Voltage
ac_output_rating_frequency:
id: inverter2_ac_output_rating_frequency
name: Inverter 2 AC Output Rating Freq
grid_rating_current:
id: inverter2_grid_rating_current
name: Inverter 2 Grid Rating Current
ac_output_apparent_power:
id: inverter2_ac_output_apparent_power
name: Inverter 2 AC Output Apparent Power
ac_output_active_power:
id: inverter2_ac_output_active_power
name: Inverter 2 AC Output Active Power
grid_voltage:
id: inverter2_grid_voltage
name: Inverter 2 Grid Voltage
grid_frequency:
id: inverter2_grid_frequency
name: Inverter 2 Grid Freq
ac_output_voltage:
id: inverter2_ac_output_voltage
name: Inverter 2 AC Output Voltage
ac_output_frequency:
id: inverter2_ac_output_frequency
name: Inverter 2 AC Output Freq
output_load_percent:
id: inverter2_output_load_percent
name: Inverter 2 Output Load Percent
bus_voltage:
id: inverter2_bus_voltage
name: Inverter 2 Bus Voltage
battery_voltage:
id: inverter2_battery_voltage
name: Inverter 2 Battery Voltage
battery_charging_current:
id: inverter2_charging_current
name: Inverter 2 Charging Current
battery_capacity_percent:
id: inverter2_battery_capacity_percent
name: Inverter 2 Battery Cap Percent
inverter_heat_sink_temperature:
id: inverter2_inverter_heat_sink_temperature
name: Inverter 2 Inverter Heat Sink Temp
pv_input_current_for_battery:
id: inverter2_pv_input_current_for_battery
name: Inverter 2 PV Input Current
pv_input_voltage:
id: inverter2_pv_input_voltage
name: Inverter 2 PV Input Voltage
battery_voltage_scc:
id: inverter2_battery_voltage_scc
name: Inverter 2 Battery Voltage SCC
battery_discharge_current:
id: inverter2_battery_discharge_current
name: Inverter 2 Battery Discharge Current
pv_charging_power:
id: inverter2_pv_charging_power
name: Inverter 2 PV Charging Power
# EASUN energies
- platform: template
name: Inverter 1 Line Power
id: inverter1_line_power
unit_of_measurement: W
lambda: |-
if(id(inverter1_device_mode)=="L"){
return id(inverter1_ac_output_active_power);
} else return 0;
- platform: template
name: Inverter 1 Inverter Power
id: inverter1_inverter_power
unit_of_measurement: W
lambda: |-
if(id(inverter1_device_mode)=="B"){
return id(inverter1_ac_output_active_power);
} else return 0;
- platform: total_daily_energy
name: "Inverter 1 Line Energy"
id: inverter1_line_energy
power_id: inverter1_line_power
unit_of_measurement: Wh
- platform: total_daily_energy
name: "Inverter 1 Inverter Energy"
id: inverter1_inverter_energy
power_id: inverter1_inverter_power
unit_of_measurement: Wh
- platform: total_daily_energy
name: "Inverter 1 PV Energy"
id: inverter1_pv_energy
power_id: inverter1_pv_charging_power
unit_of_measurement: Wh
- platform: template
name: Inverter 1 Battery Charging Power
id: inverter1_battery_charging_power
unit_of_measurement: W
lambda: |-
float power = id(inverter1_battery_voltage) * id(inverter1_charging_current);
return power;
update_interval: 5s
- platform: template
name: Inverter 1 Battery Discharging Power
id: inverter1_battery_discharging_power
unit_of_measurement: W
lambda: |-
float power = id(inverter1_battery_voltage) * id(inverter1_battery_discharge_current);
return power;
update_interval: 5s
- platform: total_daily_energy
name: "Inverter 1 Batt Charging Energy"
id: inverter1_battery_charging_energy
power_id: inverter1_battery_charging_power
unit_of_measurement: Wh
- platform: total_daily_energy
name: "Inverter 1 Batt Discharging Energy"
id: inverter1_battery_discharging_energy
power_id: inverter1_battery_discharging_power
unit_of_measurement: Wh
# MPP energies
- platform: template
name: Inverter 2 Line Power
id: inverter2_line_power
unit_of_measurement: W
lambda: |-
if(id(inverter2_device_mode)=="L"){
return id(inverter2_ac_output_active_power);
} else return 0;
- platform: template
name: Inverter 2 Inverter Power
id: inverter2_inverter_power
unit_of_measurement: W
lambda: |-
if(id(inverter2_device_mode)=="B"){
return id(inverter2_ac_output_active_power);
} else return 0;
- platform: total_daily_energy
name: "Inverter 2 Line Energy"
id: inverter2_line_energy
power_id: inverter2_line_power
unit_of_measurement: Wh
- platform: total_daily_energy
name: "Inverter 2 Inverter Energy"
id: inverter2_inverter_energy
power_id: inverter2_inverter_power
unit_of_measurement: Wh
- platform: total_daily_energy
name: "Inverter 2 PV Energy"
id: inverter2_pv_energy
power_id: inverter2_pv_charging_power
unit_of_measurement: Wh
- platform: template
name: Inverter 2 Battery Charging Power
id: inverter2_battery_charging_power
unit_of_measurement: W
lambda: |-
float power = id(inverter2_battery_voltage) * id(inverter2_charging_current);
return power;
update_interval: 5s
- platform: template
name: Inverter 2 Battery Discharging Power
id: inverter2_battery_discharging_power
unit_of_measurement: W
lambda: |-
float power = id(inverter2_battery_voltage) * id(inverter2_battery_discharge_current);
return power;
update_interval: 5s
- platform: total_daily_energy
name: "Inverter 2 Batt Charging Energy"
id: inverter2_battery_charging_energy
power_id: inverter2_battery_charging_power
unit_of_measurement: Wh
- platform: total_daily_energy
name: "Inverter 2 Batt Discharging Energy"
id: inverter2_battery_discharging_energy
power_id: inverter2_battery_discharging_power
unit_of_measurement: Wh
number:
# JKBMS
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balance_trigger_voltage:
name: "${bms0} balance trigger voltage"
balance_starting_voltage:
name: "${bms0} balance starting voltage"
power_off_voltage:
name: "${bms0} power off voltage"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
balance_trigger_voltage:
name: "${bms1} balance trigger voltage"
balance_starting_voltage:
name: "${bms1} balance starting voltage"
power_off_voltage:
name: "${bms1} power off voltage"
binary_sensor:
# EPEVER
- platform: modbus_controller
modbus_controller_id: epever
id: charging_input_volt_failure
name: "Charging Input Volt Failure"
register_type: read
address: 0x3201
bitmask: 0xC000
# JKBMS
- platform: jk_bms_ble
jk_bms_ble_id: bms0
balancing:
name: "${bms0} balancing"
charging:
name: "${bms0} charging"
discharging:
name: "${bms0} discharging"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
balancing:
name: "${bms1} balancing"
charging:
name: "${bms1} charging"
discharging:
name: "${bms1} discharging"
# RESET ENERGY TOTAL METERS EASUN
- platform: nextion
page_id: 3
component_id: 8
name: reset_inverter1_line_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter1_total_line_energy) = 0;
- platform: nextion
page_id: 3
component_id: 19
name: reset_inverter1_inverter_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter1_total_inverter_energy) = 0;
- platform: nextion
page_id: 3
component_id: 9
name: reset_inverter1_pv_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter1_total_pv_energy) = 0;
- platform: nextion
page_id: 3
component_id: 14
name: reset_inverter1_battery_charging_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter1_total_battery_charging_energy) = 0;
- platform: nextion
page_id: 3
component_id: 15
name: reset_inverter1_battery_discharging_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter1_total_battery_discharging_energy) = 0;
# RESET ENERGY TOTAL METERS MPP
- platform: nextion
page_id: 32
component_id: 8
name: reset_inverter2_line_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter2_total_line_energy) = 0;
- platform: nextion
page_id: 32
component_id: 19
name: reset_inverter2_inverter_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter2_total_inverter_energy) = 0;
- platform: nextion
page_id: 32
component_id: 9
name: reset_inverter2_pv_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter2_total_pv_energy) = 0;
- platform: nextion
page_id: 32
component_id: 14
name: reset_inverter2_battery_charging_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter2_total_battery_charging_energy) = 0;
- platform: nextion
page_id: 32
component_id: 15
name: reset_inverter2_battery_discharging_energy
internal: true
on_click:
- min_length: 5000ms
max_length: 10000ms
then:
lambda: |-
id(inverter2_total_battery_discharging_energy) = 0;
switch:
# EPEVER
- platform: modbus_controller
modbus_controller_id: epever
id: manual_control_load
register_type: coil
address: 2
name: "manual control the load"
bitmask: 1
- platform: modbus_controller
modbus_controller_id: epever
id: default_control_the_load
register_type: coil
address: 3
name: "default control the load"
bitmask: 1
- platform: modbus_controller
modbus_controller_id: epever
id: enable_load_test
register_type: coil
address: 5
name: "enable load test mode"
bitmask: 1
- platform: modbus_controller
modbus_controller_id: epever
id: force_load
register_type: coil
address: 6
name: "Force Load on/off"
bitmask: 1
# JKBMS
- platform: jk_bms_ble
jk_bms_ble_id: bms0
charging:
name: "${bms0} charging"
discharging:
name: "${bms0} discharging"
balancer:
name: "${bms0} balancer"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
charging:
name: "${bms1} charging"
discharging:
name: "${bms1} discharging"
balancer:
name: "${bms1} balancer"
- platform: ble_client
ble_client_id: client0
name: "${bms0} enable bluetooth connection"
- platform: ble_client
ble_client_id: client1
name: "${bms1} enable bluetooth connection"
text_sensor:
# EPEVER
- platform: modbus_controller
modbus_controller_id: epever
name: "rtc_clock"
id: rtc_clock
internal: true
register_type: holding
address: 0x9013
register_count: 3
raw_encode: HEXBYTES
response_size: 6
on_value:
then:
- lambda: |-
ESP_LOGV("main", "decoding rtc hex encoded raw data: %s", x.c_str());
uint8_t h=0,m=0,s=0,d=0,month_=0,y = 0 ;
m = esphome::modbus_controller::byte_from_hex_str(x,0);
s = esphome::modbus_controller::byte_from_hex_str(x,1);
d = esphome::modbus_controller::byte_from_hex_str(x,2);
h = esphome::modbus_controller::byte_from_hex_str(x,3);
y = esphome::modbus_controller::byte_from_hex_str(x,4);
month_ = esphome::modbus_controller::byte_from_hex_str(x,5);
// Now check if the rtc time of the controller is ok and correct it
time_t now = ::time(nullptr);
struct tm *time_info = ::localtime(&now);
int seconds = time_info->tm_sec;
int minutes = time_info->tm_min;
int hour = time_info->tm_hour;
int day = time_info->tm_mday;
int month = time_info->tm_mon + 1;
int year = time_info->tm_year % 100;
// correct time if needed (ignore seconds)
if (d != day || month_ != month || y != year || h != hour || m != minutes) {
// create the payload
std::vector<uint16_t> rtc_data = {uint16_t((minutes << 8) | seconds), uint16_t((day << 8) | hour),
uint16_t((year << 8) | month)};
// Create a modbus command item with the time information as the payload
esphome::modbus_controller::ModbusCommandItem set_rtc_command = esphome::modbus_controller::ModbusCommandItem::create_write_multiple_command(epever, 0x9013, 3, rtc_data);
// Submit the command to the send queue
epever->queue_command(set_rtc_command);
ESP_LOGI("ModbusLambda", "EPSOLAR RTC set to %02d:%02d:%02d %02d.%02d.%04d", hour, minutes, seconds, day, month, year + 2000);
}
char buffer[20];
// format time as YYYY-mm-dd hh:mm:ss
sprintf(buffer,"%04d-%02d-%02d %02d:%02d:%02d",y+2000,month_,d,h,m,s);
id(template_rtc).publish_state(buffer);
- platform: template
name: "RTC Time Sensor"
id: template_rtc
- platform: modbus_controller
modbus_controller_id: epever
name: "rtc clock test 2"
id: rtc_clock_test2
internal: true
register_type: holding
address: 0x9013
register_count: 3
raw_encode: HEXBYTES
response_size: 6
# JKBMS
- platform: jk_bms_ble
jk_bms_ble_id: bms0
errors:
name: "${bms0} errors"
total_runtime_formatted:
name: "${bms0} total runtime formatted"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
errors:
name: "${bms1} errors"
total_runtime_formatted:
name: "${bms1} total runtime formatted"
# EASUN
- platform: pipsolar
pipsolar_id: inverter1
device_mode:
id: inverter1_device_mode
name: Inverter 1 Device Mode
# MPP
- platform: pipsolar
pipsolar_id: inverter2
device_mode:
id: inverter2_device_mode
name: Inverter 2 Device Mode
button:
# JKBMS
- platform: jk_bms_ble
jk_bms_ble_id: bms0
retrieve_settings:
name: "${bms0} retrieve settings"
retrieve_device_info:
name: "${bms0} retrieve device info"
- platform: jk_bms_ble
jk_bms_ble_id: bms1
retrieve_settings:
name: "${bms1} retrieve settings"
retrieve_device_info:
name: "${bms1} retrieve device info"
- platform: restart
name: "ESP_Restart"
output:
# EASUN
- platform: pipsolar
pipsolar_id: inverter1
battery_recharge_voltage:
id: inverter1_battery_recharge_voltage
possible_values: [22.0, 22.5, 23.0, 23.5, 24.0, 24.5, 25.0, 25.5]
battery_redischarge_voltage:
id: inverter1_battery_redischarge_voltage
possible_values: [24.0, 24.5, 25.0, 25.5, 26.0, 26.5, 27.0, 27.5, 28.0, 28.5, 29.0]
battery_under_voltage:
id: inverter1_battery_under_voltage
possible_values: [25.0, 25.1, 25.2, 25.3, 25.4, 25.5, 25.6, 25.7, 25.8, 25.9,
26.0, 26.1, 26.2, 26.3, 26.4, 26.5, 26.6, 26.7, 26.8, 26.9,
27.0, 27.1, 27.2, 27.3, 27.4, 27.5, 27.6, 27.7, 27.8, 27.9,
28.0, 28.1, 28.2, 28.3, 27.8, 28.5, 28.6, 28.7, 28.8, 28.9,
29.0, 29.1, 29.2, 29.3, 29.4, 29.5, 29.6, 29.7, 29.8, 29.9,
30.0, 30.1, 30.2, 30.3, 30.4, 30.5, 30.6, 30.7, 30.8, 30.9,
31.0, 31.1, 31.2, 31.3, 31.4, 31.5]
battery_float_voltage:
id: inverter1_battery_float_voltage
possible_values: [24.0, 24.5, 25.0, 25.5, 26.0, 26.5, 27.0, 27.5, 28.0, 28.5, 29.0]
battery_bulk_voltage:
id: inverter1_battery_bulk_voltage_out
possible_values: [24.0, 24.1, 24.2]
current_max_ac_charging_current:
id: inverter1_current_max_ac_charging_current
possible_values: [2, 10, 20, 30, 40, 50, 60]
current_max_charging_current:
id: inverter1_current_max_charging_current
possible_values: [10, 20, 30, 40, 50, 60]
charger_source_priority:
id: inverter1_charger_source_priority
output_source_priority:
id: inverter1_output_source_priority
battery_type:
id: inverter1_battery_type
# MPP
- platform: pipsolar
pipsolar_id: inverter2
battery_recharge_voltage:
id: inverter2_battery_recharge_voltage
possible_values: [22.0, 22.5, 23.0, 23.5, 24.0, 24.5, 25.0, 25.5]
battery_redischarge_voltage:
id: inverter2_battery_redischarge_voltage
possible_values: [24.0, 24.5, 25.0, 25.5, 26.0, 26.5, 27.0, 27.5, 28.0, 28.5, 29.0]
battery_under_voltage:
id: inverter2_battery_under_voltage
possible_values: [25.0, 25.1, 25.2, 25.3, 25.4, 25.5, 25.6, 25.7, 25.8, 25.9,
26.0, 26.1, 26.2, 26.3, 26.4, 26.5, 26.6, 26.7, 26.8, 26.9,
27.0, 27.1, 27.2, 27.3, 27.4, 27.5, 27.6, 27.7, 27.8, 27.9,
28.0, 28.1, 28.2, 28.3, 27.8, 28.5, 28.6, 28.7, 28.8, 28.9,
29.0, 29.1, 29.2, 29.3, 29.4, 29.5, 29.6, 29.7, 29.8, 29.9,
30.0, 30.1, 30.2, 30.3, 30.4, 30.5, 30.6, 30.7, 30.8, 30.9,
31.0, 31.1, 31.2, 31.3, 31.4, 31.5]
battery_float_voltage:
id: inverter2_battery_float_voltage
possible_values: [24.0, 24.5, 25.0, 25.5, 26.0, 26.5, 27.0, 27.5, 28.0, 28.5, 29.0]
battery_bulk_voltage:
id: inverter2_battery_bulk_voltage_out
possible_values: [24.0, 24.1, 24.2]
current_max_ac_charging_current:
id: inverter2_current_max_ac_charging_current
possible_values: [2, 10, 20, 30, 40, 50, 60]
current_max_charging_current:
id: inverter2_current_max_charging_current
possible_values: [10, 20, 30, 40, 50, 60]
charger_source_priority:
id: inverter2_charger_source_priority
output_source_priority:
id: inverter2_output_source_priority
battery_type:
id: inverter2_battery_type
display:
- platform: nextion
id: nextion1
uart_id: nextion_uart
on_page:
then:
lambda: |-
switch (x) {
case 0x01: // Page 1
id(nextion1).set_component_value("grid_voltage", id(inverter1_grid_voltage).state );
id(nextion1).set_component_value("grid_freq", id(inverter1_grid_frequency).state );
id(nextion1).set_component_value("activ_power", id(inverter1_ac_output_active_power).state );
id(nextion1).set_component_text("inv_txt_mode", id(inverter1_device_mode));
id(nextion1).set_component_value("batt_voltage", id(inverter1_battery_voltage).state );
id(nextion1).set_component_value("batt_cap", id(inverter1_battery_capacity_percent).state );
id(nextion1).set_component_value("batt_bar", id(inverter1_battery_capacity_percent).state );
id(nextion1).set_component_value("batt_ch_curr", id(inverter1_charging_current).state );
id(nextion1).set_component_value("batt_dis_curr", id(inverter1_battery_discharge_current).state );
id(nextion1).set_component_value("pv_curr_batt", id(inverter1_pv_input_current_for_battery).state );
id(nextion1).set_component_value("pv_voltage", id(inverter1_pv_input_voltage).state );
break;
case 0x03: // Page 3
id(nextion1).set_component_value("line_energy", id(inverter1_total_line_energy).state );
id(nextion1).set_component_value("inv_energy", id(inverter1_total_inverter_energy).state );
id(nextion1).set_component_value("pv_energy", id(inverter1_total_pv_energy).state );
id(nextion1).set_component_value("batt_ch_energy", id(inverter1_total_battery_charging_energy));
id(nextion1).set_component_value("batt_di_energy", id(inverter1_total_battery_discharging_energy).state );
break;
case 0x05: // Page 5
id(nextion1).set_component_value("grid_voltage", id(inverter1_grid_voltage).state );
id(nextion1).set_component_value("grid_freq", id(inverter1_grid_frequency).state );
id(nextion1).set_component_value("out_voltage", id(inverter1_ac_output_voltage).state );
id(nextion1).set_component_value("out_freq", id(inverter1_ac_output_frequency).state );
id(nextion1).set_component_value("apar_power", id(inverter1_ac_output_apparent_power).state );
id(nextion1).set_component_value("activ_power", id(inverter1_ac_output_active_power).state );
id(nextion1).set_component_value("load", id(inverter1_output_load_percent).state );
id(nextion1).set_component_value("bus_voltage", id(inverter1_bus_voltage).state );
id(nextion1).set_component_value("batt_voltage", id(inverter1_battery_voltage).state );
id(nextion1).set_component_value("batt_ch_curr", id(inverter1_charging_current).state );
id(nextion1).set_component_value("batt_cap", id(inverter1_battery_capacity_percent).state );
id(nextion1).set_component_value("inv_temp", id(inverter1_inverter_heat_sink_temperature).state );
id(nextion1).set_component_value("pv_curr_batt", id(inverter1_pv_input_current_for_battery).state );
id(nextion1).set_component_value("pv_voltage", id(inverter1_pv_input_voltage).state );
id(nextion1).set_component_value("batt_dis_curr", id(inverter1_battery_discharge_current).state );
id(nextion1).set_component_text("inv_txt_mode", id(inverter1_device_mode));
break;
case 0x1F: // Page 31
id(nextion1).set_component_value("grid_voltage", id(inverter2_grid_voltage).state );
id(nextion1).set_component_value("grid_freq", id(inverter2_grid_frequency).state );
id(nextion1).set_component_value("activ_power", id(inverter2_ac_output_active_power).state );
id(nextion1).set_component_text("inv_txt_mode", id(inverter2_device_mode));
id(nextion1).set_component_value("batt_voltage", id(inverter2_battery_voltage).state );
id(nextion1).set_component_value("batt_cap", id(inverter2_battery_capacity_percent).state );
id(nextion1).set_component_value("batt_bar", id(inverter2_battery_capacity_percent).state );
id(nextion1).set_component_value("batt_ch_curr", id(inverter2_charging_current).state );
id(nextion1).set_component_value("batt_dis_curr", id(inverter2_battery_discharge_current).state );
id(nextion1).set_component_value("pv_curr_batt", id(inverter2_pv_input_current_for_battery).state );
id(nextion1).set_component_value("pv_voltage", id(inverter2_pv_input_voltage).state );
break;
case 0x20: // Page 32
id(nextion1).set_component_value("line_energy", id(inverter2_total_line_energy).state );
id(nextion1).set_component_value("inv_energy", id(inverter2_total_inverter_energy).state );
id(nextion1).set_component_value("pv_energy", id(inverter2_total_pv_energy).state );
id(nextion1).set_component_value("batt_ch_energy", id(inverter2_total_battery_charging_energy));
id(nextion1).set_component_value("batt_di_energy", id(inverter2_total_battery_discharging_energy).state );
break;
case 0x22: // Page 34
id(nextion1).set_component_value("grid_voltage", id(inverter2_grid_voltage).state );
id(nextion1).set_component_value("grid_freq", id(inverter2_grid_frequency).state );
id(nextion1).set_component_value("out_voltage", id(inverter2_ac_output_voltage).state );
id(nextion1).set_component_value("out_freq", id(inverter2_ac_output_frequency).state );
id(nextion1).set_component_value("apar_power", id(inverter2_ac_output_apparent_power).state );
id(nextion1).set_component_value("activ_power", id(inverter2_ac_output_active_power).state );
id(nextion1).set_component_value("load", id(inverter2_output_load_percent).state );
id(nextion1).set_component_value("bus_voltage", id(inverter2_bus_voltage).state );
id(nextion1).set_component_value("batt_voltage", id(inverter2_battery_voltage).state );
id(nextion1).set_component_value("batt_ch_curr", id(inverter2_charging_current).state );
id(nextion1).set_component_value("batt_cap", id(inverter2_battery_capacity_percent).state );
id(nextion1).set_component_value("inv_temp", id(inverter2_inverter_heat_sink_temperature).state );
id(nextion1).set_component_value("pv_curr_batt", id(inverter2_pv_input_current_for_battery).state );
id(nextion1).set_component_value("pv_voltage", id(inverter2_pv_input_voltage).state );
id(nextion1).set_component_value("batt_dis_curr", id(inverter2_battery_discharge_current).state );
id(nextion1).set_component_text("inv_txt_mode", id(inverter2_device_mode));
break;
}
Hi, I have a problem with calling the current_max_charging_current service, the current_max_ac_charging_current service on the same settings
works great
logs_rekuperator_upload.txt
Hi all, I am currently trying to integrate my EASUN iGrid IV 5.6. As far as I know, it is a clone of an InfinSolar inverter.
Unfortunately it does not work for me yet.
I did a little search and flashed esp8266-test-protocols on the esp.
I found out that I have to send ^P005GSX\r to the inverter to get a response.
According to different forums the inverter uses the protocol P18.
as an answer I got the following.
[11:46:09][D][uart_debug:158]: <<< "^D1062310,500,0000,000,0000,0000,000,547,000,000,000,039,065,029,000,000,2404,0000,2603,0000,0,2,0,0,1,2,2,0'\xF9\r"
The values would need to include the following information.
500 = 50,0 Hz
039 = 39A Akku loading
065 = 65% Akku Capacity
2404 = 2404 Watt Solar Power
2603 = 260,3V Solar Voltage
547 = 54,7 V Battery
would it be possible to include this in the code? or can someone tell me how to customize this myself.
Thanks in advance
Christian
Hello,
I use the above inverter and would like to read it with ESPHome.
Unfortunately, I do not get proper answers from this inverter and just do not know where to look further.
I have attached the log files and my ESPHome configuration. Maybe someone wants to help me.
I use a nodemcu-32s, MAX3232 RS232 to TTL and a DC-DC converter.
Thanks in advance
Sorry @syssi if I use an issue to share with you all protocols i found to help your work
I uploaded them on my repository
https://github.com/ardupic/voltronic-inverter-communication-protocols
I tried to use this for my MPP Solar Charge Controller PCM60X since I noticed it uses similar code to retrieve data, but I get some weird data. Is anyone using this for a charge controller?
hello, the data from the converter is working, most of the values look ok. Some problems are what I encountered with the values I really need. I do not see the current power of the PV panel and the current voltage of the PV PANEL
pv_input_voltage: has a value of 0v - 0,9v at an almost real 180v
pv_charging_power: it is still at 0w
pv_charging_power:
name: "FV nabíjecí výkon - ${friendly_name}"
id: pv_charging_power
pv_input_voltage:
name: "FV napětí - ${friendly_name}"
Good evening,
I have one more problem. Sensor battery_discharge_current have value 0.0A for all time and not respond with reality.
Can you help me? Inverter is Easun SMW 8k (aka Axpert MAX 8).
In manual is:
QPIGS<cr>: Device general status parameters inquiry
Computer: QPIGS <CRC><cr>
Device: (BBB.B CC.C DDD.D EE.E FFFF GGGG HHH III JJ.JJ KK K OOO TTTT EE. E UUU.U WW.WW PPPPP b7b6b5b4b3b2b1b0 QQ VV MMMMM b10b9b8 Y ZZ AAAA<CRC><cr>
PPPPP Battery discharge current P is an Integer ranging from 0 to 9. The units is A.
Thank you Petr
Originally posted by @PetrDubi in #8 (comment)
I have https://www.mppsolar.com/v3/pip-max/
I'm trying to wire inverter-rs232tottl-esp32 and I'm getting the following messages in the log:
[23:52:20][D][uart_debug:158]: <<< "(230.0 47.8 230.0 50.0 47.8 11000 11000 48.0 46.0 44.0 56.8 55.7 2 010 150 0 0 2 9 01 0 0 54.0 0 1 480 0 000qO\r"
[23:52:20][D][pipsolar:839]: checking crc on incoming message
[23:52:20][D][pipsolar:849]: CRC NOK expected: 7F D4 but got: 0 0
[23:52:21][D][uart_debug:158]: >>> "QBATCD\xAA&\r"
[23:52:21][D][pipsolar:905]: Sending polling command : QBATCD with length 6
[23:52:21][D][uart_debug:158]: <<< "(NAKss\r"
[23:52:21][D][pipsolar:839]: checking crc on incoming message
[23:52:21][D][pipsolar:842]: CRC OK
[23:52:22][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[23:52:22][D][pipsolar:905]: Sending polling command : QPIGS with length 5
[23:52:22][D][uart_debug:158]: <<< "(201.6 50.0 201.6 50.0 03749 03724 034 435 55.60 001 100 0046 00.0 000.0 00.00 00000 00010101 00 00 00000 110<\xAD\r"
[23:52:27][D][pipsolar:822]: timeout command to poll: QPIGS
[23:52:27][D][uart_debug:158]: >>> "QPIGS2h-\r"
Is my inverter not supported or have I connected something wrong?
Hi @syssi,
After updating my esphome dev to the last version, I can't compile anymore my model :(.
Got a problem with the select part :( ...
from esphome.jsonschema import jschema_composite
ImportError: cannot import name 'jschema_composite' from 'esphome.jsonschema' (C:\Users\SeByDocKy\anaconda3\lib\site-packages\esphome\jsonschema.py)←[0m
←[32mINFO Detected timezone 'Europe/Paris'←[0m
Failed config
select.pipsolar: [source pvbrain.yaml:1266]
Platform not found: 'select.pipsolar'.```
Hello,
I have this EAsun iSolar SM IV inverter but most commands seem to report values equal to zero.
[16:39:23][D][pipsolar:775]: CRC OK
[16:39:23][D][pipsolar:448]: Decode QPIGS
[16:39:23][D][text_sensor:067]: 'inverter0_last_qpigs': Sending state 'QPIGS'
[16:39:23][D][sensor:125]: 'inverter0_grid_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_grid_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_ac_output_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_ac_output_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_ac_output_apparent_power': Sending state 0.00000 VA with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_ac_output_active_power': Sending state 0.00000 W with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_output_load_percent': Sending state 0.00000 % with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_bus_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_battery_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_battery_capacity_percent': Sending state 0.00000 % with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_inverter_heat_sink_temperature': Sending state 0.00000 °C with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_pv_input_current_for_battery': Sending state 0.00000 A with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_pv_input_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[16:39:23][D][sensor:125]: 'inverter0_battery_voltage_scc': Sending state 0.00000 V with 1 decimals of accuracy
[16:39:24][D][sensor:125]: 'inverter0_battery_discharge_current': Sending state 0.00000 A with 1 decimals of accuracy
[16:39:24][D][sensor:125]: 'inverter0_pv_charging_power': Sending state 0.00000 W with 1 decimals of accuracy
[16:39:24][D][pipsolar:838]: Sending polling command : QPIWS with length 5
[16:39:24][D][pipsolar:772]: checking crc on incoming message
[16:39:24][D][pipsolar:775]: CRC OK
[16:39:24][D][pipsolar:525]: Decode QPIWS
[16:39:25][D][pipsolar:838]: Sending polling command : QMOD with length 4
[16:39:25][D][pipsolar:772]: checking crc on incoming message
[16:39:25][D][pipsolar:775]: CRC OK
How could I make this work?
Hello.
I am trying to configure my inverter to HA without luck.
I think hardware wiring is good, here is picture :
One from the inverter :
And here is the debug from watchpower and log from esphome in zip. Zip
I tried to add diferent external components but no one worked.
Here is my current config :
esphome:
name: solar
platform: ESP8266
board: d1_mini
# Enable logging
logger:
level: VERY_VERBOSE
logs:
uart: VERY_VERBOSE
uart.arduino_esp8266: VERY_VERBOSE
# Enable Home Assistant API
api:
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
# Enable fallback hotspot (captive portal) in case wifi connection fails
ap:
ssid: "Solar Fallback Hotspot"
captive_portal:
uart:
- id: uart_bus
tx_pin: TX
rx_pin: RX
# most devices use 2400 as baud_rate
baud_rate: 2400
pipsolar:
- uart_id: uart_bus
id: inverter0
sensor:
- platform: pipsolar
pipsolar_id: inverter0
grid_rating_current:
id: inverter0_grid_rating_current
name: inverter0_grid_rating_current
ac_output_active_power:
id: inverter0_ac_output_active_power
name: inverter0_ac_output_active_power
ac_output_apparent_power:
id: inverter0_ac_output_apparent_power
name: inverter0_ac_output_apparent_power
ac_output_voltage:
id: inverter0_ac_output_voltage
name: inverter0_ac_output_voltage
battery_capacity_percent:
id: inverter0_battery_capacity_percent
name: inverter0_battery_capacity_percent
battery_charging_current:
id: inverter0_battery_charging_current
name: inverter0_battery_charging_current
battery_discharge_current:
id: inverter0_battery_discharge_current
name: inverter0_battery_discharge_current
battery_voltage:
id: inverter0_battery_voltage
name: inverter0_battery_voltage
grid_voltage:
id: inverter0_grid_voltage
name: inverter0_grid_voltage
inverter_heat_sink_temperature:
id: inverter0_inverter_heat_sink_temperature
name: inverter0_inverter_heat_sink_temperature
output_load_percent:
id: inverter0_output_load_percent
name: inverter0_output_load_percent
pv_charging_power:
id: inverter0_pv_charging_power
name: inverter0_pv_charging_power
pv_input_voltage:
id: inverter0_pv_input_voltage
name: inverter0_pv_input_voltage
text_sensor:
- platform: pipsolar
pipsolar_id: inverter0
device_mode:
id: inverter0_device_mode
name: inverter0_device_mode
last_qpigs:
id: inverter0_last_qpigs
name: inverter0_last_qpigs
last_qpiri:
id: inverter0_last_qpiri
name: inverter0_last_qpiri
switch:
- platform: pipsolar
pipsolar_id: inverter0
output_source_priority_utility:
name: inverter0_output_source_priority_utility
output_source_priority_solar:
name: inverter0_output_source_priority_solar
output_source_priority_battery:
name: inverter0_output_source_priority_battery
input_voltage_range:
name: inverter0_input_voltage_range
pv_power_balance:
name: inverter0_pv_power_balance
Thank you for the support.
Hi, I am working on a small project depending on Arduino, max 232, and solar inverter.
I do the wiring and upload the code, the problem is I have two brands of solar inverters, one of them a commercial blue sun inverter,
the second one is the Falcon inverter.
So, I could send a message and get a response from the Falcon inverter, but the blue sun inverter did not respond to all messages.
I check the Voltage of TX, and RX of the Rs232 cable of the blue sun inverter and it seems correct as -13V for TX and 0V for RX same as the Falcon inverter.
I went to my friend and got the same problem with his solar inverter, is the problem with the wiring, or does each solar inverter brand has a unique commutation protocol?
SolarInverterCode.zip
Hello every one,
I am struggling setting up the "current_max_ac_charging_current" through pip-solar, PIP18 branch software. (which other than this works great and does exactly what I was desiring - Thank you to all the contributors).
here is the log I get :
[01:24:16][D][main:212]: STARTING VARIABLE ACCurrent
[01:24:16][D][pipsolar.output:015]: Will write: ^S013MUCHGC0,00 out of value 10.000000 / 10
[01:24:16][D][pipsolar:757]: got command: ^S013MUCHGC0,00
[01:24:16][D][pipsolar:748]: Command queued successfully: ^S013MUCHGC0,00 with length 15 at position 0
[01:24:16][D][main:029]: VARIABLE ACCurrent ENDS
Queued for some time and then:
[01:30:51][D][pipsolar:708]: Sending command from queue: ^S013MUCHGC0,00 with length 15
[01:30:52][D][pipsolar:061]: response length for command ^S013MUCHGC0,00 not OK: with length 5
Not surprising, 00 is not a "possible value".
I am wondering why (checked the code without success) the string is not well formed, having the last field "00" instead of "10" .
Do you mind helping?
Many thanks in advance for your comments
hi i would like to read qall and not qpigs where and how can i change that? have easun smr II and in qpigs not everything is sent eg discharge current
protocol:
https://docs.google.com/document/d/1SD2oYo-ZOXvJUI9LmsF4impGtEiqEWE6Bh8kglJcrzs/edit?usp=sharing
Heyhey @syssi,
I´ve got a MPI 15KW WP and currently use the python module https://github.com/jblance/mpp-solar/wiki.
As I got bunch of ESPHome stuff running and only want to ingest stuff into Home Assistant, using your pipsolar integration would be a big leap for me forward.
MPI 12KW WP and MPI 15KW WP use protocol "PI17" and I currently extract info from the inverters via
# mpp-solar -p /dev/hidraw0 -n 'BPVInverter2' -T 'BPVInverter2' -P PI17 -o screen -c MOD#BATS#ET#GS#PS
The commands implemented for PI17
# mpp-solar -P PI17 -c
MOD Device working mode inquiry -- queries the device working mode
BATS Query battery setting -- queries battery setting
ET Query total generated energy -- queries total generated energy from the Inverter
GS Query general status -- queries general status
PS Device Power Status -- queries power status
Do you see an option, to implement the protocol and commands with pipsolar?
Thanks and regards
Jakob
Hello! I am seeing QPIGS response but it's not decoded and it says timeout
[11:24:54][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
[11:24:54][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[11:24:55][D][uart_debug:158]: <<< "(220.0 27.2 220.0 50.0 27.2 6000 6000 48.0 45.0 45.0 53.2 53.2 3 040 010 1 0 2 1 01 0 0 49.0 0 1\xBA\xAB\r"
[11:24:55][D][pipsolar:772]: checking crc on incoming message
[11:24:55][D][pipsolar:775]: CRC OK
[11:24:55][D][pipsolar:429]: Decode QPIRI
[11:24:55][D][sensor:127]: 'pip6048mt_grid_rating_voltage': Sending state 220.00000 V with 1 decimals of accuracy
[11:24:55][D][sensor:127]: 'pip6048mt_grid_rating_current': Sending state 27.20000 A with 1 decimals of accuracy
[11:24:55][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[11:24:55][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[11:24:56][D][uart_debug:158]: <<< "(218.1 49.9 218.1 49.9 0327 0295 005 360 51.20 000 100 0037 00.0 000.0 00.00 00000 00010000 00 00 00002 011 0 00 0000\xD2w\r"
[11:25:00][D][pipsolar:755]: timeout command to poll: QPIGS
And it just repeats like this
Is my QPIGS response unusual? What can I do with this?
Thank you
Here's esp settings related to pipsolar
logger:
hardware_uart: UART1
level: DEBUG
# Don't write log messages to UART0 (GPIO1/GPIO3) if the inverter is connected to GPIO1/GPIO3
baud_rate: 0
uart:
- id: rs232_inverter
tx_pin: GPIO1
rx_pin: GPIO3
# most devices use 2400 as baud_rate
baud_rate: 2400
debug:
direction: BOTH
dummy_receiver: false
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
pipsolar:
- uart_id: rs232_inverter
id: pip6048mt
sensor:
- platform: pipsolar
pipsolar_id: pip6048mt
grid_rating_voltage:
id: pip6048mt_grid_rating_voltage
name: pip6048mt_grid_rating_voltage
grid_rating_current:
id: pip6048mt_grid_rating_current
name: pip6048mt_grid_rating_current
ac_output_apparent_power:
id: pip6048mt_ac_output_apparent_power
name: pip6048mt_ac_output_apparent_power
ac_output_active_power:
id: pip6048mt_ac_output_active_power
name: pip6048mt_ac_output_active_power```
Hi, I am using esp8266 for communication with the Voltronic Axpert VMIII Twin 6 Kw. I can't get the complete data in ESPhome .. The wiring is done correctly, i tried various yaml codes including: main, 2424mse1, hms-3k-24v, pip8048, and they all have the same result ie no data. I tried with another code but it sends me back to then displayed data. I am wondering if there is a solution for this new model? Thank you.
these are the data obtained in Log
[22:20:13][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[22:20:15][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[22:20:15][D][uart_debug:158]: <<< "(NAKss\r"
[22:20:17][D][uart_debug:158]: >>> "QDIq\e\r"
[22:20:17][D][uart_debug:158]: <<< "(230.0 50.0 0030 42.0 54.0 56.4 46.0 60 0 0 2 0 0 0 0 0 1 1 1 0 1 0 54.0 0 1\xFD\xD8\r"
I'm having trouble connecting my Infini MkIV. It works when connected to the SolarPower app, and I can sniff the packets on the serial port on my PC (and can provide more info if needed).
However, when running the ESP with the protocol test config, the log shows different data than what is in the YAML file. For example:
YAML:
# PI18
- uart.write: "^P005PIq\x8b\r"
- delay: 2s
# PI30/PI30MAX/PI30REVO
- uart.write: "QPI\xbe\xac\r"
- delay: 2s
# MKS Test protocol
- uart.write: "^P007PIRI\xee\x38\r"
- delay: 2s
# PI41
- uart.write: "QDIq\x1b\r"
- delay: 2s
- uart.write: "QPIRI\xF8T\r"
- delay: 2s
- uart.write: "QPIGS\xB7\xA9\r"
- delay: 2s
- uart.write: "QMODI\xC1\r"
- delay: 2s
- uart.write: "QFLAG\x98t\r"
shows as
LOG:
[10:25:56][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[10:25:58][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[10:26:00][D][uart_debug:158]: >>> "^P007PIRI\xC3\xAE8\r"
[10:26:02][D][uart_debug:158]: >>> "QDIq\e\r"
[10:26:04][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[10:26:06][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[10:26:08][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[10:26:10][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
in the log. It seems the encoded characters are being added and/or changed somewhere, and I think this is preventing communication (perhaps because the CRC is now incorrect?)
Am I doing something wrong, or is there something I can change, or is this normal?
Hi, i've flashed your code on a esp8266 nodemcu amica. Most of data look ok but i can't retreive power voltage and current of panels.
how can i fix this issue?
thanks
Hi!
For some time I'm using esphome-pipsolar, and it's awesome! The only thing I'm missing is the ability to count how many Wh did the inverter generate (obviously for some HA-graph greatness and tracking PV production).
Would it be possible to add here? I can test it, if i ever learn how to use a branch on docker...
I tested all possible configurations including tests. . Connections also checked several times. Does anyone have this model and can provide yaml configuration?
INFO Updating https://github.com/syssi/esphome-pipsolar.git@pi18
INFO Generating C++ source...
INFO Compiling app...
Processing easun (board: nodemcuv2; framework: arduino; platform: platformio/espressif8266 @ 3.2.0)
--------------------------------------------------------------------------------
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
Dependency Graph
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS @ 1.2
Compiling /data/easun/.pioenvs/easun/src/esphome/components/api/api_connection.cpp.o
[...]
Compiling /data/easun/.pioenvs/easun/src/main.cpp.o
Linking /data/easun/.pioenvs/easun/firmware.elf
RAM: [==== ] 39.2% (used 32100 bytes from 81920 bytes)
Flash: [==== ] 37.2% (used 388457 bytes from 1044464 bytes)
Building /data/easun/.pioenvs/easun/firmware.bin
esp8266_copy_factory_bin(["/data/easun/.pioenvs/easun/firmware.bin"], ["/data/easun/.pioenvs/easun/firmware.elf"])
========================= [SUCCESS] Took 89.81 seconds =========================
INFO Successfully compiled program.
INFO Connecting to 192.168.1.55
INFO Uploading /data/easun/.pioenvs/easun/firmware.bin (392608 bytes)
INFO Compressed to 273487 bytes
Uploading: [============================================================] 100% Done...
INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.1.55 using esphome API
INFO Successfully connected to 192.168.1.55
[20:51:12][I][app:102]: ESPHome version 2023.3.2 compiled on Mar 29 2023, 20:50:34
[20:51:12][C][wifi:504]: WiFi:
[20:51:12][C][wifi:362]: Local MAC: C8:C9:A3:09:EA:A3
[20:51:12][C][wifi:363]: SSID: 'Marek60Mag'[redacted]
[20:51:12][C][wifi:364]: IP Address: 192.168.1.55
[20:51:12][C][wifi:365]: BSSID: 90:9A:4A:D2:BA:3E[redacted]
[20:51:12][C][wifi:367]: Hostname: 'easun'
[20:51:12][C][wifi:369]: Signal strength: -80 dB ▂▄▆█
[20:51:12][C][wifi:373]: Channel: 1
[20:51:12][C][wifi:374]: Subnet: 255.255.255.0
[20:51:12][C][wifi:375]: Gateway: 192.168.1.1
[20:51:12][C][wifi:376]: DNS1: 0.0.0.0
[20:51:12][C][wifi:377]: DNS2: 0.0.0.0
[20:51:12][C][logger:293]: Logger:
[20:51:12][C][logger:294]: Level: DEBUG
[20:51:12][C][logger:295]: Log Baud Rate: 115200
[20:51:12][C][logger:296]: Hardware UART: UART0
[20:51:12][C][uart.arduino_esp8266:102]: UART Bus:
[20:51:12][C][uart.arduino_esp8266:103]: TX Pin: GPIO4
[20:51:12][C][uart.arduino_esp8266:104]: RX Pin: GPIO5
[20:51:12][C][uart.arduino_esp8266:106]: RX Buffer Size: 256
[20:51:12][C][uart.arduino_esp8266:108]: Baud Rate: 2400 baud
[20:51:12][C][uart.arduino_esp8266:109]: Data Bits: 8
[20:51:12][C][uart.arduino_esp8266:110]: Parity: NONE
[20:51:12][C][uart.arduino_esp8266:111]: Stop bits: 1
[20:51:12][C][uart.arduino_esp8266:115]: Using software serial
[20:51:12][C][pipsolar:862]: Pipsolar:
[20:51:12][C][pipsolar:863]: used commands:
[20:51:12][C][pipsolar:866]: ^P007PIRI
[20:51:12][C][mdns:108]: mDNS:
[20:51:12][C][mdns:109]: Hostname: easun
[20:51:12][C][ota:093]: Over-The-Air Updates:
[20:51:12][C][ota:094]: Address: 192.168.1.55:8266
[20:51:12][C][api:138]: API Server:
[20:51:12][C][api:139]: Address: 192.168.1.55:6053
[20:51:12][C][api:143]: Using noise encryption: NO
[20:51:12][D][uart_debug:158]: <<< "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF
[20:51:13][D][pipsolar:755]: timeout command to poll: ^P007PIRI
[20:51:13][D][uart_debug:158]: <<< "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF"
[20:51:13][D][uart_debug:158]: >>> "^P007PIRI\xEE8\r"
[20:51:13][D][pipsolar:838]: Sending polling command : ^P007PIRI with length 9
[20:51:16][D][uart_debug:158]: <<< "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF
[20:51:18][D][pipsolar:755]: timeout command to poll: ^P007PIRI
[20:51:18][D][uart_debug:158]: <<< "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF
[20:51:18][D][uart_debug:158]: >>> "^P007PIRI\xEE8\r"
[20:51:18][D][pipsolar:838]: Sending polling command : ^P007PIRI with length 9
[20:51:21][D][uart_debug:158]: <<< "\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xFF\xF
[20:51:23][D][pipsolar:755]: timeout command to poll: ^P007PIRI
[20:51:23][D][uart_debug:158]: <<<
Seit Tagen suche ich den Fehler meines RS232 auf TTL Konverters im Zusammenhang mit einem ESP32.
Hardware steht aber es kommen keine Daten vom Inverter an:
Wo sollte ich den Fehler suchen:
INFO Waiting for result...
INFO OTA successful
INFO Successfully uploaded program.
INFO Starting log output from 192.168.178.94 using esphome API
INFO Successfully connected to 192.168.178.94
[23:03:51][I][app:102]: ESPHome version 2023.3.2 compiled on Mar 29 2023, 23:02:06
[23:03:51][C][wifi:504]: WiFi:
[23:03:51][C][wifi:362]: Local MAC: 94:3C:C6:37:BB:7C
[23:03:51][C][wifi:363]: SSID: [redacted]
[23:03:51][C][wifi:364]: IP Address: 192.168.178.94
[23:03:51][C][wifi:366]: BSSID: [redacted]
[23:03:51][C][wifi:367]: Hostname: 'pipsolar'
[23:03:51][C][wifi:369]: Signal strength: -50 dB ▂▄▆█
[23:03:51][C][wifi:373]: Channel: 5
[23:03:51][C][wifi:374]: Subnet: 255.255.255.0
[23:03:51][C][wifi:375]: Gateway: 192.168.178.1
[23:03:51][C][wifi:376]: DNS1: 0.0.0.0
[23:03:51][C][wifi:377]: DNS2: 0.0.0.0
[23:03:51][C][logger:293]: Logger:
[23:03:51][C][logger:294]: Level: DEBUG
[23:03:51][C][logger:295]: Log Baud Rate: 115200
[23:03:51][C][logger:296]: Hardware UART: UART0
[23:03:52][C][uart.arduino_esp32:108]: UART Bus 1:
[23:03:52][C][uart.arduino_esp32:109]: TX Pin: GPIO18
[23:03:52][C][uart.arduino_esp32:110]: RX Pin: GPIO19
[23:03:52][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[23:03:52][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[23:03:52][C][uart.arduino_esp32:115]: Data Bits: 8
[23:03:52][C][uart.arduino_esp32:116]: Parity: NONE
[23:03:52][C][uart.arduino_esp32:117]: Stop bits: 1
[23:03:52][C][pipsolar:860]: Pipsolar:
[23:03:52][C][pipsolar:861]: used commands:
[23:03:52][C][pipsolar:864]: QPIRI
[23:03:52][C][pipsolar:864]: QPIGS
[23:03:52][C][pipsolar:864]: QMOD
[23:03:52][C][captive_portal:088]: Captive Portal:
[23:03:52][C][mdns:108]: mDNS:
[23:03:52][C][mdns:109]: Hostname: pipsolar
[23:03:52][C][ota:093]: Over-The-Air Updates:
[23:03:52][C][ota:094]: Address: 192.168.178.94:3232
[23:03:52][C][ota:097]: Using Password.
[23:03:52][C][api:138]: API Server:
[23:03:52][C][api:139]: Address: 192.168.178.94:6053
[23:03:52][C][api:141]: Using noise encryption: YES
[23:03:53][D][api:102]: Accepted 192.168.178.79
[23:03:53][D][api.connection:920]: Home Assistant 2023.3.6 (192.168.178.79): Connected successfully
[23:03:56][D][pipsolar:755]: timeout command to poll: QPIGS
[23:03:56][D][pipsolar:838]: Sending polling command : QMOD with length 4
[23:03:56][D][uart_debug:114]: >>> 51:4D:4F:44:49:C1:0D
[23:04:01][D][pipsolar:755]: timeout command to poll: QMOD
[23:04:01][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[23:04:01][D][uart_debug:114]: >>> 51:50:49:52:49:F8:54:0D
[23:04:06][D][pipsolar:755]: timeout command to poll: QPIRI
[23:04:06][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[23:04:06][D][uart_debug:114]: >>> 51:50:49:47:53:B7:A9:0D
[23:04:11][D][pipsolar:755]: timeout command to poll: QPIGS
[23:04:11][D][pipsolar:838]: Sending polling command : QMOD with length 4
[23:04:11][D][uart_debug:114]: >>> 51:4D:4F:44:49:C1:0D
[23:04:16][D][pipsolar:755]: timeout command to poll: QMOD
[23:04:16][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[23:04:16][D][uart_debug:114]: >>> 51:50:49:52:49:F8:54:0D
[23:04:21][D][pipsolar:755]: timeout command to poll: QPIRI
[23:04:21][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[23:04:21][D][uart_debug:114]: >>> 51:50:49:47:53:B7:A9:0D
I have a few qestions about this PIP 2424:
I no clearly understand if this brach allows(as lv5048).
charger_source_priority:
id: inverter0_charger_source_priority_select
name: inverter0_charger_source_priority_select
optionsmap:
"Utility first": "PCP00"
"Solar first": "PCP01"
"Solar and Utility": "PCP02"
"Solar only": "PCP03"
statusmap:
"0": "Utility first"
"1": "Solar first"
"2": "Solar and Utility"
"3": "Solar only"
I have no clear how to use output and automation?
- platform: pipsolar
pipsolar_id: inverter0
battery_recharge_voltage:
id: inverter0_battery_recharge_voltage_out
also thus not working :select..
select:
- platform: pipsolar
pipsolar_id: inverter0
output_source_priority:
id: inverter0_output_source_priority_select
name: inverter0_output_source_priority_select
optionsmap:
"Utility first": "POP00"
"Solar only": "POP01"
"Solar Battery Utility": "POP02"
statusmap:
"0": "Utility first"
"1": "Solar only"
"2": "Solar Battery Utility"
Can you kindly make some example?...im afraid to make some damage to inverter. Thank you for your time.
Originally posted by @ans-gw in #3 (comment)
Hi, I have been using working configuration for a long time. Now I needed to edit some detail in the entity description and the module cannot be compiled.
I have the current version of ESPHome 2022.12.3
I am using an external source:
external_components:
- source: github://syssi/esphome-pipsolar@2424mse1
refresh: 0 sec
If I don't use an external source, it compiles, but some entities don't work.
When compiling with an external source, the compilation ends with an error:
INFO Reading configuration /config/esphome/fve1-module.yaml...
INFO Updating https://github.com/syssi/esphome-pipsolar.git@2424mse1
INFO Detected timezone 'Europe/Prague'
INFO Generating C++ source...
INFO Compiling app...
Processing fve1-module (board: esp07s; framework: arduino; platform: platformio/espressif8266 @ 3.2.0)
HARDWARE: ESP8266 80MHz, 80KB RAM, 4MB Flash
LDF: Library Dependency Finder -> https://bit.ly/configure-pio-ldf
Dependency Graph
|-- ESP8266WiFi @ 1.0
|-- ESP8266mDNS @ 1.2
|-- noise-c @ 0.1.4
| |-- libsodium @ 1.10018.1
Compiling /data/fve1-module/.pioenvs/fve1-module/src/esphome/components/pipsolar/pipsolar.cpp.o
Compiling /data/fve1-module/.pioenvs/fve1-module/src/esphome/components/pipsolar/switch/pipsolar_switch.cpp.o
In file included from src/esphome/components/pipsolar/pipsolar.cpp:1:
src/esphome/components/pipsolar/pipsolar.h:7:10: fatal error: esphome/components/pipsolar/select/pipsolar_select.h: No such file or directory
7 | #include "esphome/components/pipsolar/select/pipsolar_select.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
In file included from src/esphome/components/pipsolar/switch/pipsolar_switch.h:3,
from src/esphome/components/pipsolar/switch/pipsolar_switch.cpp:1:
src/esphome/components/pipsolar/switch/../pipsolar.h:7:10: fatal error: esphome/components/pipsolar/select/pipsolar_select.h: No such file or directory
7 | #include "esphome/components/pipsolar/select/pipsolar_select.h"
| ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
compilation terminated.
Compiling /data/fve1-module/.pioenvs/fve1-module/src/esphome/components/time/real_time_clock.cpp.o
Compiling /data/fve1-module/.pioenvs/fve1-module/src/esphome/components/total_daily_energy/total_daily_energy.cpp.o
Compiling /data/fve1-module/.pioenvs/fve1-module/src/esphome/components/uart/uart.cpp.o
*** [/data/fve1-module/.pioenvs/fve1-module/src/esphome/components/pipsolar/pipsolar.cpp.o] Error 1
Compiling /data/fve1-module/.pioenvs/fve1-module/src/esphome/components/uart/uart_component.cpp.o
*** [/data/fve1-module/.pioenvs/fve1-module/src/esphome/components/pipsolar/switch/pipsolar_switch.cpp.o] Error 1
========================== [FAILED] Took 5.27 seconds ==========================
Evidently it's after some esphome or homeassistant upgrade because it was working before. I tried restoring to esphome 12.0.0 from the oldest backup, but it didn't help.
I also tried to copy the unavailable files to src, but when checking git and compilation, they are always deleted.
Can anyone help with this?
Thank you, Dan.
Hello,
Inverter is a EASUN smp5K 48Volt
This is my Protocol-test.yaml
substitutions:
name: pipsolar-protocol-test
tx_pin: GPIO16
rx_pin: GPIO17
esphome:
name: ${name}
platform: ESP32
board: esp-wrover-kit
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.0.222
gateway: 192.168.0.100
subnet: 255.255.255.0
api:
ota:
password: "fcdc829ac919fca24e13186523b1a4e5"
logger:
uart:
id: uart0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: true
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(d"QPIGS\xB7\xA9\r"irection, bytes);
interval:
- interval: 30s
then:
# PI41
- uart.write: "QDIq\x1b\r"
- delay: 2s
- uart.write: "QPIRI\xF8\r"
- delay: 2s
- uart.write: "QPIGS\xB7\r" # = meine Einstellung. orginale Einstellung ist "QPIGS\xB7\xA9\r"
- delay: 2s
- uart.write: "QMODI\xC1\r"
- delay: 2s
- uart.write: "QFLAG\x98t\r"
This is the log from Protocol-test.yaml
command QDiq QPIRI and QPIGS is ok
[14:22:44][D][uart_debug:158]: >>> "QDIq\e\r"
[14:22:44][D][uart_debug:158]: <<< "(230.0 50.0 0030 42.0 54.0 56.4 46.0 60 1 0 2 0 0 0 0 0 1 1 0 0 1 0 54.0 0 1 000p\xC4\r"
[14:22:46][D][uart_debug:158]: >>> "QPIRI\xC3\xB8\r"
[14:22:46][D][uart_debug:158]: <<< "(230.0 22.6 230.0 50.0 22.6 5200 5200 48.0 45.0 46.0 55.0 54.0 2 02 070 1 2 3 9 00 0 0 54.0 0 1 000 \x93\r"
[14:22:48][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\r"
[14:22:48][D][uart_debug:158]: <<< "(231.2 50.0 230.3 49.9 0299 0270 005 374 50.60 005 044 0033 03.4 182.9 00.00 00000 00010010 00 00 00640 010 0 01 0000\xF4/\r"
[14:22:50][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[14:22:50][D][uart_debug:158]: <<< "(NAKss\r"
[14:22:52][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[14:22:52][D][uart_debug:158]: <<< "(NAKss\r"
[14:23:06][D][uart_debug:158]: >>> "QPI\r"
[14:23:06][D][uart_debug:158]: <<< "(NAKss\r"
This is my esp32-example.yaml
# Warning:
#
# If you configure a lot of the possible sensors etc. it could be that you run
# out of memory (on esp8266). If you configure nearly all sensors etc. you run
# in a stack-size issue. In this case you have to increase stack size!
#
# https://github.com/esphome/issues/issues/855
substitutions:
name: pipsolar
esphome:
name: ${name}
platform: ESP32
board: esp-wrover-kit
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
manual_ip:
static_ip: 192.168.0.222
gateway: 192.168.0.100
subnet: 255.255.255.0
ota:
password: "fcdc829ac919fca24e13186523b1a4e5"
logger:
baud_rate: 9600
#mqtt:
# broker: !secret mqtt_host
# username: !secret mqtt_username
# password: !secret mqtt_password
#id: mqtt_client
api:
uart:
- id: uart0
baud_rate: 2400
tx_pin: GPIO16
rx_pin: GPIO17
#debug:
# direction: BOTH
# dummy_receiver: false
# after:
# delimiter: "\r"
# sequence:
# - lambda: UARTDebug::log_string(direction, bytes);
pipsolar:
uart_id: uart0
id: inverter0
sensor:
- platform: pipsolar
pipsolar_id: inverter0
# QPIRI
grid_rating_voltage:
name: "${name} grid_rating_voltage"
grid_rating_current:
name: "${name} grid_rating_current"
ac_output_rating_voltage:
name: "${name} ac_output_rating_voltage"
ac_output_rating_frequency:
name: "${name} ac_output_rating_frequency"
ac_output_rating_current:
name: "${name} ac_output_rating_current"
ac_output_rating_apparent_power:
name: "${name} ac_output_rating_apparent_power"
ac_output_rating_active_power:
name: "${name} ac_output_rating_active_power"
battery_rating_voltage:
name: "${name} battery_rating_voltage"
# battery_recharge_voltage:
# name: "${name} battery_recharge_voltage"
# battery_under_voltage:
# name: "${name} battery_under_voltage"
# battery_bulk_voltage:
# name: "${name} battery_bulk_voltage"
# battery_float_voltage:
# name: "${name} battery_float_voltage"
# battery_type:
# name: "${name} battery_type"
# current_max_ac_charging_current:
# name: "${name} current_max_ac_charging_current"
# current_max_charging_current:
# name: "${name} current_max_charging_current"
# input_voltage_range:
# name: "${name} input_voltage_range"
output_source_priority:
name: "${name} output_source_priority"
charger_source_priority:
name: "${name} charger_source_priority"
# parallel_max_num:
# name: "${name} parallel_max_num"
# machine_type:
# name: "${name} machine_type"
topology:
name: "${name} topology"
output_mode:
name: "${name} output_mode"
# battery_redischarge_voltage:
# name: "${name} battery_redischarge_voltage"
# pv_ok_condition_for_parallel:
# name: "${name} pv_ok_condition_for_parallel"
# pv_power_balance:
# name: "${name} pv_power_balance"
# QPIGS
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
# eeprom_version:
# name: "${name} eeprom_version"
pv_charging_power:
name: "${name} pv_charging_power"
text_sensor:
- platform: pipsolar
pipsolar_id: inverter0
device_mode:
name: "${name} device_mode"
last_qpigs:
name: "${name} last_qpigs"
# last_qpiri:
# name: "${name} last_qpiri"
# last_qmod:
# name: "${name} last_qmod"
# last_qflag:
# name: "${name} last_qflag"
binary_sensor:
- platform: pipsolar
pipsolar_id: inverter0
add_sbu_priority_version:
name: "${name} add_sbu_priority_version"
configuration_status:
name: "${name} configuration_status"
# scc_firmware_version:
# name: "${name} scc_firmware_version"
load_status:
name: "${name} load_status"
battery_voltage_to_steady_while_charging:
name: "${name} battery_voltage_to_steady_while_charging"
charging_status:
name: "${name} charging_status"
scc_charging_status:
name: "${name} scc_charging_status"
ac_charging_status:
name: "${name} ac_charging_status"
charging_to_floating_mode:
name: "${name} charging_to_floating_mode"
switch_on:
name: "${name} switch_on"
# dustproof_installed:
# name: "${name} dustproof_installed"
silence_buzzer_open_buzzer:
name: "${name} silence_buzzer_open_buzzer"
overload_bypass_function:
name: "${name} overload_bypass_function"
lcd_escape_to_default:
name: "${name} lcd_escape_to_default"
overload_restart_function:
name: "${name} overload_restart_function"
over_temperature_restart_function:
name: "${name} over_temperature_restart_function"
# backlight_on:
# name: "${name} backlight_on"
switch:
- platform: pipsolar
pipsolar_id: inverter0
output_source_priority_utility:
name: "${name} output_source_priority_utility"
output_source_priority_solar:
name: "${name} output_source_priority_solar"
output_source_priority_battery:
name: "${name} output_source_priority_battery"
input_voltage_range:
name: "${name} input_voltage_range"
pv_ok_condition_for_parallel:
name: "${name} pv_ok_condition_for_parallel"
pv_power_balance:
name: "${name} pv_power_balance"
output:
- platform: pipsolar
pipsolar_id: inverter0
battery_recharge_voltage:
id: inverter0_battery_recharge_voltage_out
This is the log from esp32-example.yaml
QPIRI is ok but QPIGS command is timeout
[14:29:49][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[14:29:54][D][pipsolar:755]: timeout command to poll: QPIGS # Timeout Qpigs
[14:29:54][D][pipsolar:838]: Sending polling command : QMOD with length 4
[14:29:54][D][pipsolar:772]: checking crc on incoming message
[14:29:54][D][pipsolar:775]: CRC OK
[14:29:54][D][pipsolar:471]: Decode QMOD
[14:29:54][D][text_sensor:067]: 'pipsolar device_mode': Sending state 'B'
[14:29:55][D][pipsolar:838]: Sending polling command : QFLAG with length 5
[14:29:55][D][pipsolar:772]: checking crc on incoming message
[14:29:55][D][pipsolar:775]: CRC OK
[14:29:55][D][pipsolar:479]: Decode QFLAG
[14:29:56][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[14:29:56][D][pipsolar:772]: checking crc on incoming message
[14:29:56][D][pipsolar:775]: CRC OK
[14:29:56][D][pipsolar:429]: Decode QPIRI
[14:29:57][D][sensor:127]: 'pipsolar grid_rating_voltage': Sending state 230.00000 V with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar grid_rating_current': Sending state 22.60000 A with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar ac_output_rating_voltage': Sending state 230.00000 V with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar ac_output_rating_frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar ac_output_rating_current': Sending state 22.60000 A with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar ac_output_rating_apparent_power': Sending state 5200.00000 VA with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar ac_output_rating_active_power': Sending state 5200.00000 W with 1 decimals of accuracy
[14:29:57][D][sensor:127]: 'pipsolar battery_rating_voltage': Sending state 48.00000 V with 1 decimals of accuracy
[14:29:58][D][sensor:127]: 'pipsolar output_source_priority': Sending state 2.00000 with 1 decimals of accuracy
[14:29:58][D][sensor:127]: 'pipsolar charger_source_priority': Sending state 3.00000 with 1 decimals of accuracy
[14:29:58][D][sensor:127]: 'pipsolar topology': Sending state 0.00000 with 1 decimals of accuracy
[14:29:58][D][sensor:127]: 'pipsolar output_mode': Sending state 0.00000 with 1 decimals of accuracy
Hello.
I use 2424mse1 branch.
Is it possible to get data on pv2 (Voltage, current, etc.)?
And is it possible to get the data of solar energy production for the day that is stored in the inverter?
Hello, can you also adjust this project so that the Mppsolar Hybrid V2 is supported with the P18 Protocoll?
At that time I adjusted the code at JBlance / MPP solar so that almost all functions of the P18 protocoll are present.
But somehow I can't get along with the ESP code.
I have already flashed an ESP and I don't get an answer with the "normal" queries.
Unfortunately, I don't find the place in the code where the Commando is handed over. If someone can help me there would be great.
With the piri e.g. means the request ^P007PIRI instead of only QPIRI
Hello Sebastian,
It's amazing your contribution for the community, I found you in esphome-jk-bms and now here.
I'm struggling to put the docker-voltronic-homeassistant to work, and then I found in HA forum your post about this ESPhome version, that I'd like to try since I'm more familiar with ESPhome than Docker stuff. Actually I was getting data in HA from my inverter, but sometimes I lose connection. In Docker I was getting "unhealthy" status, I decided to install everything again but now I'm not getting any data at all in HA, so I'm here.
I was looking for your ESPhome yaml file and did not find any way to define the QPIRI, QPIWS, QMOD and QPIGS value, like in the Docker version?
How is this made?
Do you think my inverter will by compatible?
Thanks
André Magro
It has a RJ45 COM-port that I've used to this day to connect it to my server via the RJ45/DB9 cable they provided using the WatchPower software. I can confirm that everything works there.
The said cable contains three wires that I have verified to be the same pinouts as described here. RJ45 pins 1,2,8 go to DB9 pins 2,3,5 respectively.
I have used three different TTL converters with MAX3238, MAX3232, MAX202, with the same results. The one converter that has LEDs either pulses the TX light without any activity from RX. The times when I get the null results regardless of whether the RJ45 cable is plugged or not, the RX and TX lights pulse simultaneously. Someone here with the same problem said that it turned out to be bad wiring.
I've tried every conceivable combination of wiring, different wires, different GPIOs with no improvements. Clearly I'm not getting any data from the inverter. Could my model be so incompatible that I'm not getting anything despite it working with what I understand to be a universal software, WatchPower?
Here is my current configuration:
substitutions:
name: atarian-solar
esphome:
name: ${name}
esp32:
board: nodemcu-32s
#external_components:
# - source: github://syssi/esphome-pipsolar@2424mse1
# refresh: 0s
# components: [pipsolar]
#external_components:
# - source: github://andreashergert1984/esphome@test_newcrc
# refresh: 0s
# components: [pipsolar]
# Enable logging
logger:
level: VERY_VERBOSE
logs:
uart: VERY_VERBOSE
uart.arduino_esp8266: VERY_VERBOSE
# Make some components less verbose
api.service: WARN
ota: WARN
# Enable Home Assistant API
api:
encryption:
key: "hth45h4hhah6ikh534="
ota:
password: "g446h53hqsht645h45h5"
wifi:
ssid: !secret wifi_linksys_ssid
password: !secret wifi_linksys_password
# Enable fallback hotspot in case wifi connection fails
ap:
ssid: "Atarian-Solar Fallback Hotspot"
password: "aerg45jjarh"
uart:
- id: uart_bus
tx_pin: GPIO19
rx_pin: GPIO18
# most devices use 2400 as baud_rate
baud_rate: 2400
debug:
direction: BOTH
pipsolar:
uart_id: uart_bus
id: inverter0
update_interval: 10s
sensor:
- platform: pipsolar
pipsolar_id: inverter0
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
eeprom_version:
name: "${name} eeprom_version"
pv_charging_power:
name: "${name} pv_charging_power"
binary_sensor:
- platform: pipsolar
pipsolar_id: inverter0
add_sbu_priority_version:
name: "${name} add_sbu_priority_version"
configuration_status:
name: "${name} configuration_status"
scc_firmware_version:
name: "${name} scc_firmware_version"
load_status:
name: "${name} load_status"
battery_voltage_to_steady_while_charging:
name: "${name} battery_voltage_to_steady_while_charging"
charging_status:
name: "${name} charging_status"
scc_charging_status:
name: "${name} scc_charging_status"
ac_charging_status:
name: "${name} ac_charging_status"
charging_to_floating_mode:
name: "${name} charging_to_floating_mode"
switch_on:
name: "${name} switch_on"
This is the output:
[20:00:07][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[20:00:07][D][uart_debug:114]: >>> 51:50:49:47:53:B7:A9:0D
[20:00:12][D][pipsolar:755]: timeout command to poll: QPIGS
[20:00:12][VV][scheduler:196]: Running interval 'update' with interval=10000 last_execution=1056434 (now=1066435)
[20:00:17][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[20:00:17][D][uart_debug:114]: >>> 51:50:49:47:53:B7:A9:0D
[20:00:22][D][pipsolar:755]: timeout command to poll: QPIGS
Switching the TX/RX pins in the config file results in this:
[20:02:14][D][uart_debug:114]: <<< 51:50:49:47:53:B7:A9:0D
[20:02:23][VV][scheduler:196]: Running interval 'update' with interval=10000 last_execution=19325 (now=29325)
[20:02:24][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[20:02:24][D][uart_debug:114]: >>> 51:50:49:47:53:B7:A9:0D
[20:02:24][D][pipsolar:772]: checking crc on incoming message
[20:02:24][D][pipsolar:775]: CRC OK
[20:02:24][D][pipsolar:448]: Decode QPIGS
[20:02:24][V][sensor:074]: 'atarian-solar grid_voltage': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar grid_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar grid_frequency': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar grid_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar ac_output_voltage': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar ac_output_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar ac_output_frequency': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar ac_output_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar ac_output_apparent_power': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar ac_output_apparent_power': Sending state 0.00000 VA with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar ac_output_active_power': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar ac_output_active_power': Sending state 0.00000 W with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar output_load_percent': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar output_load_percent': Sending state 0.00000 % with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar bus_voltage': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar bus_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar battery_voltage': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar battery_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar battery_charging_current': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar battery_charging_current': Sending state 0.00000 A with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar battery_capacity_percent': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar battery_capacity_percent': Sending state 0.00000 % with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar inverter_heat_sink_temperature': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar inverter_heat_sink_temperature': Sending state 0.00000 °C with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar pv_input_current_for_battery': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar pv_input_current_for_battery': Sending state 0.00000 A with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar pv_input_voltage': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar pv_input_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar battery_voltage_scc': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar battery_voltage_scc': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar battery_discharge_current': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar battery_discharge_current': Sending state 0.00000 A with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar battery_voltage_offset_for_fans_on': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar battery_voltage_offset_for_fans_on': Sending state 0.00000 V with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar eeprom_version': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar eeprom_version': Sending state 0.00000 with 1 decimals of accuracy
[20:02:24][V][sensor:074]: 'atarian-solar pv_charging_power': Received new state 0.000000
[20:02:24][D][sensor:125]: 'atarian-solar pv_charging_power': Sending state 0.00000 W with 1 decimals of accuracy
[20:02:24][V][component:199]: Component esphome.coroutine took a long time for an operation (0.35 s).
[20:02:24][V][component:200]: Components should block for at most 20-30ms.
But again, it will display this even with the RJ45 unplugged.
I'm at a total loss here...
Hello there,
there's a chance to add more option in output and modify default values for the others?
example:
the float voltage (battery_float_voltage) the possible_values (Optional, list): : 48.0,49.0,50.0,51.
float voltage for agm battery it is 54.0 and other value higher than 54.6
Fault also bulk voltage..
Thanks
(inverter like mppsolar, voltronic and others clone 48V)
hi
i have a problem with easun inverter
i use default config form example
here is the log
[13:04:28][D][pipsolar:838]: Sending polling command : QMOD with length 4
[13:04:28][D][uart_debug:158]: <<< "QMODI\xC1\r"
[13:04:28][D][pipsolar:772]: checking crc on incoming message
[13:04:28][D][pipsolar:775]: CRC OK
[13:04:28][D][pipsolar:471]: Decode QMOD
[13:04:28][D][text_sensor:067]: 'pipsolar device_mode': Sending state 'M'
[13:04:28][D][uart_debug:158]: <<< "\xC2\xD4"
[13:04:29][D][uart_debug:158]: <<< "\x02\xD0"
[13:04:29][D][uart_debug:158]: >>> "QFLAG\x98t\r"
[13:04:29][D][pipsolar:838]: Sending polling command : QFLAG with length 5
[13:04:29][D][uart_debug:158]: <<< "QFLAG\x98t\r"
[13:04:29][D][pipsolar:772]: checking crc on incoming message
[13:04:29][D][pipsolar:775]: CRC OK
[13:04:29][D][pipsolar:479]: Decode QFLAG
[13:04:29][D][uart_debug:158]: <<< "\x90\x00"
[13:04:30][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
[13:04:30][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[13:04:30][D][uart_debug:158]: <<< "QPIRI\xF8T\r"
[13:04:30][D][pipsolar:772]: checking crc on incoming message
[13:04:30][D][pipsolar:775]: CRC OK
[13:04:30][D][pipsolar:429]: Decode QPIRI
[13:04:30][D][uart_debug:158]: <<< "\x82\xF7"
[13:04:31][D][uart_debug:158]: <<< "\x82\xE0"
[13:04:31][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[13:04:31][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[13:04:31][D][uart_debug:158]: <<< "QPIGS\xB7\xA9\r"
[13:04:31][D][pipsolar:772]: checking crc on incoming message
[13:04:31][D][pipsolar:775]: CRC OK
[13:04:31][D][pipsolar:448]: Decode QPIGS
[13:04:31][D][sensor:127]: 'pipsolar grid_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar grid_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar ac_output_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar ac_output_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar ac_output_apparent_power': Sending state 0.00000 VA with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar ac_output_active_power': Sending state 0.00000 W with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar output_load_percent': Sending state 0.00000 % with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar bus_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar battery_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar battery_charging_current': Sending state 0.00000 A with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar battery_capacity_percent': Sending state 0.00000 % with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar inverter_heat_sink_temperature': Sending state 0.00000 °C with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar pv_input_current_for_battery': Sending state 0.00000 A with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar pv_input_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar battery_voltage_scc': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar battery_discharge_current': Sending state 0.00000 A with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar battery_voltage_offset_for_fans_on': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:31][D][sensor:127]: 'pipsolar pv_charging_power': Sending state 0.00000 W with 1 decimals of accuracy
[13:04:31][D][uart_debug:158]: <<< "\xC2\xD8"
[13:04:32][D][uart_debug:158]: <<< "\x80\x00"
[13:04:32][D][uart_debug:158]: >>> "QMODI\xC1\r"
[13:04:32][D][pipsolar:838]: Sending polling command : QMOD with length 4
[13:04:32][D][uart_debug:158]: <<< "QMODI\xC1\r"
[13:04:32][D][pipsolar:772]: checking crc on incoming message
[13:04:32][D][pipsolar:775]: CRC OK
[13:04:32][D][pipsolar:471]: Decode QMOD
[13:04:32][D][text_sensor:067]: 'pipsolar device_mode': Sending state 'M'
[13:04:32][D][uart_debug:158]: <<< "\x80$"
[13:04:33][D][uart_debug:158]: <<< "\x02\xF0"
[13:04:33][D][uart_debug:158]: >>> "QFLAG\x98t\r"
[13:04:33][D][pipsolar:838]: Sending polling command : QFLAG with length 5
[13:04:33][D][uart_debug:158]: <<< "QFLAG\x98t\r"
[13:04:33][D][pipsolar:772]: checking crc on incoming message
[13:04:33][D][pipsolar:775]: CRC OK
[13:04:33][D][pipsolar:479]: Decode QFLAG
[13:04:33][D][uart_debug:158]: <<< "B\xE8"
[13:04:34][D][uart_debug:158]: <<< "\x80\x84"
[13:04:34][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
[13:04:34][D][pipsolar:838]: Sending polling command : QPIRI with length 5
[13:04:34][D][uart_debug:158]: <<< "QPIRI\xF8T\r"
[13:04:34][D][pipsolar:772]: checking crc on incoming message
[13:04:34][D][pipsolar:775]: CRC OK
[13:04:34][D][pipsolar:429]: Decode QPIRI
[13:04:34][D][uart_debug:158]: <<< "\x80\x80"
[13:04:35][D][uart_debug:158]: <<< "\x02\xE0"
[13:04:35][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[13:04:35][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[13:04:35][D][uart_debug:158]: <<< "QPIGS\xB7\xA9\r"
[13:04:35][D][pipsolar:772]: checking crc on incoming message
[13:04:35][D][pipsolar:775]: CRC OK
[13:04:35][D][pipsolar:448]: Decode QPIGS
[13:04:35][D][sensor:127]: 'pipsolar grid_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar grid_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar ac_output_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar ac_output_frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar ac_output_apparent_power': Sending state 0.00000 VA with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar ac_output_active_power': Sending state 0.00000 W with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar output_load_percent': Sending state 0.00000 % with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar bus_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar battery_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar battery_charging_current': Sending state 0.00000 A with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar battery_capacity_percent': Sending state 0.00000 % with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar inverter_heat_sink_temperature': Sending state 0.00000 °C with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar pv_input_current_for_battery': Sending state 0.00000 A with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar pv_input_voltage': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar battery_voltage_scc': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar battery_discharge_current': Sending state 0.00000 A with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar battery_voltage_offset_for_fans_on': Sending state 0.00000 V with 1 decimals of accuracy
[13:04:35][D][sensor:127]: 'pipsolar pv_charging_power': Sending state 0.00000 W with 1 decimals of accuracy
Hello,
Thanks a lot for this great work.
Unfortunately, it doesn’t work on my side.
Inverter: WKS EVO CIRCLE.
Connections:
ESP32 <-> RS232/TTL
3V3 <-> VCC
RX <-> TX
TX <-> RX
GND <-> GND
Yaml
substitutions:
name: esphome-web-3d3788
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS
api:
encryption:
key: "xxx"
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3D3788"
password: "xxx"
captive_portal:
logger:
baud_rate: 0
uart:
- id: uart0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: false
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
pipsolar:
uart_id: uart0
id: inverter0
sensor:
- platform: pipsolar
pipsolar_id: inverter0
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
pv_charging_power:
name: "${name} pv_charging_power"
Logs
======================== [SUCCESS] Took 149.94 seconds ========================
INFO Successfully compiled program.
INFO Resolving IP address of esphome-web-3d3788.local
INFO -> 192.168.1.50
INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (962336 bytes)
Uploading: [============================================================] 100% Done... INFO Waiting for result...
INFO OTA successful INFO Successfully uploaded program.
INFO Starting log output from esphome-web-3d3788.local using esphome API
INFO Successfully connected to esphome-web-3d3788.local
[18:44:08][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 18:42:35
[18:44:08][C][wifi:504]: WiFi:
[18:44:08][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[18:44:08][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[18:44:08][C][wifi:364]: IP Address: 192.168.1.50
[18:44:08][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[18:44:08][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[18:44:08][C][wifi:369]: Signal strength: -85 dB ▂▄▆█
[18:44:08][C][wifi:373]: Channel: 11
[18:44:08][C][wifi:374]: Subnet: 255.255.255.0
[18:44:08][C][wifi:375]: Gateway: 192.168.1.1
[18:44:08][C][wifi:376]: DNS1: 192.168.1.1
[18:44:08][C][wifi:377]: DNS2: 0.0.0.0
[18:44:08][C][logger:293]: Logger:
[18:44:08][C][logger:294]: Level: DEBUG
[18:44:08][C][logger:295]: Log Baud Rate: 0
[18:44:08][C][logger:296]: Hardware UART: UART0
[18:44:08][C][uart.arduino_esp32:108]: UART Bus 0:
[18:44:08][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[18:44:08][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[18:44:08][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[18:44:08][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[18:44:08][C][uart.arduino_esp32:115]: Data Bits: 8
[18:44:08][C][uart.arduino_esp32:116]: Parity: NONE
[18:44:08][C][uart.arduino_esp32:117]: Stop bits: 1
[18:44:08][C][pipsolar:860]: Pipsolar:
[18:44:08][C][pipsolar:861]: used commands:
[18:44:08][C][pipsolar:864]: QPIGS
[18:44:08][C][captive_portal:088]: Captive Portal:
[18:44:08][C][mdns:108]: mDNS:
[18:44:08][C][mdns:109]: Hostname: esphome-web-3d3788
[18:44:08][C][ota:093]: Over-The-Air Updates:
[18:44:08][C][ota:094]: Address: esphome-web-3d3788.local:3232
[18:44:08][C][api:138]: API Server:
[18:44:08][C][api:139]: Address: esphome-web-3d3788.local:6053
[18:44:08][C][api:141]: Using noise encryption: YES
[18:44:11][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:11][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:11][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:16][D][api:102]: Accepted 192.168.1.39
[18:44:16][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[18:44:16][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:16][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:16][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:21][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:21][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:21][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:26][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:26][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:26][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:31][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:31][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:31][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[18:44:36][D][pipsolar:755]: timeout command to poll: QPIGS
[18:44:36][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[18:44:36][D][pipsolar:838]: Sending polling command : QPIGS with length 5
Then I tested the “test protocol”.
Yaml
substitutions:
name: esphome-web-3d3788
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS
api:
encryption:
key: "xxx"
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3D3788"
password: "xxx"
captive_portal:
logger:
baud_rate: 0
uart:
- id: uart0
baud_rate: 2400
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: true
after:
delimiter: "\r"
sequence:
- lambda: UARTDebug::log_string(direction, bytes);
interval:
- interval: 30s
then:
- uart.write: "QPI\r"
- delay: 2s
- uart.write: "^P003PI\r"
- delay: 2s
- uart.write: "^P005PIq\x8b\r"
- delay: 2s
- uart.write: "QPI\xbe\xac\r"
- delay: 2s
- uart.write: "QDIq\x1b\r"
- delay: 2s
- uart.write: "QPIRI\xF8T\r"
- delay: 2s
- uart.write: "QPIGS\xB7\xA9\r"
- delay: 2s
- uart.write: "QMODI\xC1\r"
- delay: 2s
- uart.write: "QFLAG\x98t\r"
Logs
INFO Reading configuration /config/esphome/esphome-web-3d3788.yaml...
INFO Starting log output from esphome-web-3d3788.local using esphome API
INFO Successfully connected to esphome-web-3d3788.local
[18:32:06][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 18:21:54
[18:32:06][C][wifi:504]: WiFi:
[18:32:06][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[18:32:06][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[18:32:06][C][wifi:364]: IP Address: 192.168.1.50
[18:32:06][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[18:32:06][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[18:32:06][C][wifi:369]: Signal strength: -74 dB ▂▄▆█
[18:32:06][C][wifi:373]: Channel: 11
[18:32:06][C][wifi:374]: Subnet: 255.255.255.0
[18:32:06][C][wifi:375]: Gateway: 192.168.1.1
[18:32:06][C][wifi:376]: DNS1: 192.168.1.1
[18:32:06][C][wifi:377]: DNS2: 0.0.0.0
[18:32:06][C][logger:293]: Logger:
[18:32:06][C][logger:294]: Level: DEBUG
[18:32:06][C][logger:295]: Log Baud Rate: 0
[18:32:06][C][logger:296]: Hardware UART: UART0
[18:32:06][C][uart.arduino_esp32:108]: UART Bus 0:
[18:32:06][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[18:32:06][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[18:32:06][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[18:32:06][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[18:32:06][C][uart.arduino_esp32:115]: Data Bits: 8
[18:32:06][C][uart.arduino_esp32:116]: Parity: NONE
[18:32:06][C][uart.arduino_esp32:117]: Stop bits: 1
[18:32:07][C][captive_portal:088]: Captive Portal:
[18:32:07][C][mdns:108]: mDNS:
[18:32:07][C][mdns:109]: Hostname: esphome-web-3d3788
[18:32:07][C][ota:093]: Over-The-Air Updates:
[18:32:07][C][ota:094]: Address: esphome-web-3d3788.local:3232
[18:32:07][C][api:138]: API Server:
[18:32:07][C][api:139]: Address: esphome-web-3d3788.local:6053
[18:32:07][C][api:141]: Using noise encryption: YES
[18:32:07][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[18:32:09][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[18:32:11][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[18:32:13][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[18:32:27][D][uart_debug:158]: >>> "QPI\r"
[18:32:29][D][uart_debug:158]: >>> "^P003PI\r"
[18:32:31][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[18:32:33][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[18:32:35][D][uart_debug:158]: >>> "QDIq\e\r"
[18:32:37][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[18:32:39][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
I was not sure of the connection TX <-> RX, so I tested to switch them :
ESP32 <-> RS232/TTL
3V3 <-> VCC
RX <-> RX
TX <-> TX
GND <-> GND
Yaml (same)
substitutions:
name: esphome-web-3d3788
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS
api:
encryption:
key: "xxx"
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3D3788"
password: "xxx"
captive_portal:
logger:
baud_rate: 0
uart:
pipsolar:
uart_id: uart0
id: inverter0
sensor:
platform: pipsolar
pipsolar_id: inverter0
grid_voltage:
name: "${name} grid_voltage"
grid_frequency:
name: "${name} grid_frequency"
ac_output_voltage:
name: "${name} ac_output_voltage"
ac_output_frequency:
name: "${name} ac_output_frequency"
ac_output_apparent_power:
name: "${name} ac_output_apparent_power"
ac_output_active_power:
name: "${name} ac_output_active_power"
output_load_percent:
name: "${name} output_load_percent"
bus_voltage:
name: "${name} bus_voltage"
battery_voltage:
name: "${name} battery_voltage"
battery_charging_current:
name: "${name} battery_charging_current"
battery_capacity_percent:
name: "${name} battery_capacity_percent"
inverter_heat_sink_temperature:
name: "${name} inverter_heat_sink_temperature"
pv_input_current_for_battery:
name: "${name} pv_input_current_for_battery"
pv_input_voltage:
name: "${name} pv_input_voltage"
battery_voltage_scc:
name: "${name} battery_voltage_scc"
battery_discharge_current:
name: "${name} battery_discharge_current"
battery_voltage_offset_for_fans_on:
name: "${name} battery_voltage_offset_for_fans_on"
pv_charging_power:
name: "${name} pv_charging_power"
Logs
========================= [SUCCESS] Took 75.71 seconds ========================= INFO Successfully compiled program. INFO Resolving IP address of esphome-web-3d3788.local INFO -> 192.168.1.50 INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (962336 bytes) Uploading: [============================================================] 100% Done... INFO Waiting for result... INFO OTA successful INFO Successfully uploaded program. INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[19:18:41][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 19:16:48 [19:18:41][C][wifi:504]: WiFi:
[19:18:41][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[19:18:41][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[19:18:41][C][wifi:364]: IP Address: 192.168.1.50
[19:18:41][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[19:18:41][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[19:18:41][C][wifi:369]: Signal strength: -87 dB ▂▄▆█
[19:18:41][C][wifi:373]: Channel: 11
[19:18:41][C][wifi:374]: Subnet: 255.255.255.0
[19:18:41][C][wifi:375]: Gateway: 192.168.1.1
[19:18:41][C][wifi:376]: DNS1: 192.168.1.1
[19:18:41][C][wifi:377]: DNS2: 0.0.0.0
[19:18:41][C][logger:293]: Logger:
[19:18:41][C][logger:294]: Level: DEBUG
[19:18:41][C][logger:295]: Log Baud Rate: 0
[19:18:41][C][logger:296]: Hardware UART: UART0
[19:18:41][C][uart.arduino_esp32:108]: UART Bus 0:
[19:18:41][C][uart.arduino_esp32:109]: TX Pin: GPIO1
[19:18:41][C][uart.arduino_esp32:110]: RX Pin: GPIO3
[19:18:41][C][uart.arduino_esp32:112]: RX Buffer Size: 256
[19:18:41][C][uart.arduino_esp32:114]: Baud Rate: 2400 baud
[19:18:41][C][uart.arduino_esp32:115]: Data Bits: 8
[19:18:41][C][uart.arduino_esp32:116]: Parity: NONE
[19:18:41][C][uart.arduino_esp32:117]: Stop bits: 1
[19:18:41][C][pipsolar:860]: Pipsolar:
[19:18:41][C][pipsolar:861]: used commands:
[19:18:41][C][pipsolar:864]: QPIGS
[19:18:41][C][captive_portal:088]: Captive Portal:
[19:18:41][C][mdns:108]: mDNS:
[19:18:41][C][mdns:109]: Hostname: esphome-web-3d3788
[19:18:41][C][ota:093]: Over-The-Air Updates:
[19:18:41][C][ota:094]: Address: esphome-web-3d3788.local:3232
[19:18:41][C][api:138]: API Server:
[19:18:41][C][api:139]: Address: esphome-web-3d3788.local:6053
[19:18:41][C][api:141]: Using noise encryption: YES
[19:18:42][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:42][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:42][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[19:18:47][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:47][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:47][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[19:18:52][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:52][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:52][D][pipsolar:838]: Sending polling command : QPIGS with length 5
[19:18:57][D][pipsolar:755]: timeout command to poll: QPIGS
[19:18:57][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:18:57][D][pipsolar:838]: Sending polling command : QPIGS with length 5
Then the “test protocol”
Yaml
substitutions:
name: esphome-web-3d3788
tx_pin: GPIO1
rx_pin: GPIO3
esphome:
name: ${name}
platform: ESP32
board: esp32dev
friendly_name: ESPHome WKS
api:
encryption:
key: "xxx"
ota:
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ap:
ssid: "Esphome-Web-3D3788"
password: "xxx"
captive_portal:
logger:
baud_rate: 0
uart:
interval:
uart.write: "QPI\r"
delay: 2s
uart.write: "^P003PI\r"
delay: 2s
uart.write: "^P005PIq\x8b\r"
delay: 2s
uart.write: "QPI\xbe\xac\r"
delay: 2s
uart.write: "QDIq\x1b\r"
delay: 2s
uart.write: "QPIRI\xF8T\r"
delay: 2s
uart.write: "QPIGS\xB7\xA9\r"
delay: 2s
uart.write: "QMODI\xC1\r"
delay: 2s
uart.write: "QFLAG\x98t\r"
Logs
======================== [SUCCESS] Took 143.02 seconds ======================== INFO Successfully compiled program. INFO Resolving IP address of esphome-web-3d3788.local INFO -> 192.168.1.50 INFO Uploading /data/esphome-web-3d3788/.pioenvs/esphome-web-3d3788/firmware.bin (916768 bytes) Uploading: [============================================================] 100% Done... INFO Waiting for result... INFO OTA successful INFO Successfully uploaded program. INFO Starting log output from esphome-web-3d3788.local using esphome API INFO Successfully connected to esphome-web-3d3788.local
[19:23:55][I][app:102]: ESPHome version 2023.3.2 compiled on Apr 12 2023, 19:22:19
[19:23:55][C][wifi:504]: WiFi:
[19:23:55][C][wifi:362]: Local MAC: 40:22:D8:3D:37:88
[19:23:55][C][wifi:363]: SSID: 'Livebox-8C62'[redacted]
[19:23:56][C][wifi:364]: IP Address: 192.168.1.50
[19:23:56][C][wifi:366]: BSSID: AC:84:C9:28:8C:62[redacted]
[19:23:56][C][wifi:367]: Hostname: 'esphome-web-3d3788'
[19:23:56][C][wifi:369]: Signal strength: -87 dB ▂▄▆█
[19:23:56][C][wifi:373]: Channel: 11
[19:23:56][C][wifi:374]: Subnet: 255.255.255.0
[19:23:56][C][wifi:375]: Gateway: 192.168.1.1
[19:23:56][C][wifi:376]: DNS1: 192.168.1.1
[19:23:56][C][wifi:377]: DNS2: 0.0.0.0
[19:23:56][C][logger:293]: Logger:
[19:23:56][C][logger:294]: Level: DEBUG
[19:23:56][C][logger:295]: Log Baud Rate: 0
[19:23:56][C][logger:296]: Hardware UART: UART0
[19:23:56][C][captive_portal:088]: Captive Portal:
[19:23:56][C][mdns:108]: mDNS:
[19:23:56][C][mdns:109]: Hostname: esphome-web-3d3788
[19:23:56][C][ota:093]: Over-The-Air Updates:
[19:23:56][C][ota:094]: Address: esphome-web-3d3788.local:3232
[19:23:56][C][api:138]: API Server:
[19:23:56][C][api:139]: Address: esphome-web-3d3788.local:6053
[19:23:56][C][api:141]: Using noise encryption: YES
[19:23:56][D][uart_debug:158]: >>> "QDIq\e\r"
[19:23:58][D][api:102]: Accepted 192.168.1.39
[19:23:58][D][api.connection:920]: Home Assistant 2023.4.2 (192.168.1.39): Connected successfully
[19:23:58][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[19:24:00][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[19:24:02][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[19:24:04][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[19:24:09][D][uart_debug:158]: >>> "QPI\r"
[19:24:11][D][uart_debug:158]: >>> "^P003PI\r"
[19:24:13][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[19:24:15][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
[19:24:17][D][uart_debug:158]: >>> "QDIq\e\r"
[19:24:19][D][uart_debug:158]: >>> "QPIRI\xC3\xB8T\r"
[19:24:21][D][uart_debug:158]: >>> "QPIGS\xC2\xB7\xC2\xA9\r"
[19:24:23][D][uart_debug:158]: >>> "QMODI\xC3\x81\r"
[19:24:25][D][uart_debug:158]: >>> "QFLAG\xC2\x98t\r"
[19:24:39][D][uart_debug:158]: >>> "QPI\r"
[19:24:41][D][uart_debug:158]: >>> "^P003PI\r"
[19:24:43][D][uart_debug:158]: >>> "^P005PIq\xC2\x8B\r"
[19:24:45][D][uart_debug:158]: >>> "QPI\xC2\xBE\xC2\xAC\r"
Thank you for your help.
Mathieu.
Hello,
Amazing job you did .... Is-il possible to extend your work to support as well the PIP8048 (axpert max I & II). Protocol changed just a bit...... In general in your amazing work, will be fantastic to have an option to choose a particular PIP model even if I understood it's a huge work to be compatible with all PIP models
Here is the link for the PIP8048 protocol : https://www.transfernow.net/dl/202112112SpO2rcW
I did a custom sensor for it... but you work is even better....
Kind regards,
hello Sebastian,
do you think its possible to add a sensor to my slit phase inverter to monitor both sides ?
I will like to be able to monitor
grid voltage phase A
grid voltage phase B
grid current phase A
grid current phase B
ac output voltage phase A
ac output voltage phase B
the inverter uses QPIGS protocol
with your guideness I can log whatever info you need
thank you
73 de KP4MI
Miguel
Hi all,
I have been using pipsolar with a ESP32-cam for a while and it has been running well. My inverter is an Axpert VMII 1.2kW.
When I initially setup pipsolar I noticed that one missing sensor is my battery_discharge_current.
This always shows 0. I noticed that in the last_qpigs message it reads correctly there.
At the moment I am extracting the value using a sensor in my configuration.yaml. See below code:
#extract battery discharge current from qpigs message
- sensor:
- name: "inverter0_battery_discharge_qpigs"
unit_of_measurement: "A"
availability: >
{{states('sensor.inverter0_last_qpigs')[78:82] not in ['unavailable', 'unknown']}}
state: >
{{states('sensor.inverter0_last_qpigs')[78:82] | float(0)}}
Doing it this way causes a lot of unwanted data to be transferred and also stored in my history.
Is there a way to only send the battery discharge current section of the qpigs (basically use this code on the ESP) or to get the original "battery_discharge_current" sensor working?
Thank you for any help and advice.
Using the PIP8048 branch, I've setup the select charging current for max total/grid charging and sliders for the charging voltages, however, it doesn't seem to apply the settings. The logs show the below when I attempt to make use of the current selection or volage sliders to change the settings:
Below is the log for the charging current threshold select:
[22:20:41][D][select:062]: 'inverter_axpert_current_max_ac_charging_current_select' - Setting
[22:20:41][D][select:115]: 'inverter_axpert_current_max_ac_charging_current_select' - Set selected option to: 10A
[22:20:41][D][pipsolar.select:012]: got option: 10A
[22:20:41][D][pipsolar.select:014]: found mapped option MUCHGC0010 for option 10A
[22:20:41][D][pipsolar:944]: got command: MUCHGC0010
[22:20:41][D][pipsolar:936]: Command queued successfully: MUCHGC0010 with length 10 at position 5
[22:20:41][D][pipsolar:895]: Sending command from queue: MUCHGC0010 with length 10
[22:20:42][D][pipsolar:042]: response length for command OK
[22:20:42][D][pipsolar:860]: checking crc on incoming message
[22:20:42][D][pipsolar:863]: CRC OK
[22:20:42][D][pipsolar:048]: command not successful
Below is the log for the float charging voltage slider:
[22:40:22][D][number:054]: 'inverter_axpert_battery_float_voltage_number' - Setting number value
[22:40:22][D][number:113]: New number value: 27.600000
[22:40:22][D][number:012]: 'inverter_axpert_battery_float_voltage_number': Sending state 27.600000
[22:40:22][D][pipsolar.output:015]: Will write: PBFT27.6 out of value 27.600000 / 028
[22:40:22][D][pipsolar:944]: got command: PBFT27.6
[22:40:22][D][pipsolar:936]: Command queued successfully: PBFT27.6 with length 8 at position 1
[22:40:22][D][pipsolar:860]: checking crc on incoming message
[22:40:22][D][pipsolar:863]: CRC OK
[22:40:22][D][pipsolar:895]: Sending command from queue: PBFT27.6 with length 8
[22:40:23][D][pipsolar:042]: response length for command OK
[22:40:23][D][pipsolar:860]: checking crc on incoming message
[22:40:23][D][pipsolar:863]: CRC OK
[22:40:23][D][pipsolar:048]: command not successful
This is the output for the supported protocols:
[19:11:15][I][main:430]: Testing PI30/PI30MAX/PI30REVO/PI41 commands...
[19:11:15][I][main:433]: This is the set of commands supported by the pipsolar component!
[19:11:15][D][uart_debug:158]: >>> "QPI\xBE\xAC\r"
[19:11:15][D][uart_debug:158]: <<< "(PI30\x9A\v\r"
[19:11:16][D][uart_debug:158]: >>> "QDIq\e\r"
[19:11:16][D][uart_debug:158]: <<< "(230.0 50.0 0030 21.0 27.0 28.2 23.0 60 0 0 2 0 0 0 0 0 1 1 1 0 1 0 27.0 0 1)F\r"
[19:11:17][D][uart_debug:158]: >>> "QFLAG\x98t\r"
[19:11:17][D][uart_debug:158]: <<< "(EzDabjkuvxy\xFF\xD8\r"
[19:11:18][D][uart_debug:158]: >>> "QMN\xBBd\r"
[19:11:18][D][uart_debug:158]: <<< "(VMIII-2500\x12\xFA\r"
[19:11:19][D][uart_debug:158]: >>> "QMODI\xC1\r"
[19:11:19][D][uart_debug:158]: <<< "(L\x06\a\r"
[19:11:20][D][uart_debug:158]: >>> "QPIGS\xB7\xA9\r"
[19:11:20][D][uart_debug:158]: <<< "(235.4 50.0 235.4 50.0 0423 0372 016 410 27.20 020 095 0054 00.0 000.0 00.00 00000 00010101 00 00 00000 110\xCC\xF8\r"
[19:11:21][D][uart_debug:158]: >>> "QPIRI\xF8T\r"
[19:11:21][D][uart_debug:158]: <<< "(230.0 10.8 230.0 50.0 10.8 2500 2500 24.0 23.0 24.0 28.2 27.2 2 30 020 1 0 2 1 01 0 0 27.0 0 1p\xE3\r"
[19:11:22][D][uart_debug:158]: >>> "QPIWS\xB4\xDA\r"
[19:11:22][D][uart_debug:158]: <<< "(100000000000000000000000000000000000\x15\xCF\r"
[19:11:23][D][uart_debug:158]: >>> "QT\'\xFF\r"
[19:11:23][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:24][I][main:499]: Testing PI41 split phase / multiple strings commands...
[19:11:24][D][uart_debug:158]: >>> "QPIGS2h-\r"
[19:11:24][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:25][D][uart_debug:158]: >>> "QP2GS0\x14\x05\r"
[19:11:25][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:26][D][uart_debug:158]: >>> "QP2GS1\x04$\r"
[19:11:26][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:27][I][main:523]: Testing unsupported PI18 commands...
[19:11:27][D][uart_debug:158]: >>> "^P005PIq\x8B\r"
[19:11:27][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:28][D][uart_debug:158]: >>> "^P005GSX\x14\r"
[19:11:28][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:29][D][uart_debug:158]: >>> "^P006MOD\xDD\xBE\r"
[19:11:29][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:30][I][main:547]: Testing unsupported PI17 commands...
[19:11:30][D][uart_debug:158]: >>> "^P003PI\r"
[19:11:30][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:31][D][uart_debug:158]: >>> "^P004MOD\r"
[19:11:31][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:32][D][uart_debug:158]: >>> "^P005FLAG\r"
[19:11:32][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:33][I][main:571]: Testing unsupported PI16 commands...
[19:11:33][D][uart_debug:158]: >>> "QPI\r"
[19:11:33][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:34][D][uart_debug:158]: >>> "QMOD\r"
[19:11:34][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:35][D][uart_debug:158]: >>> "QPIGS\r"
[19:11:35][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:36][D][uart_debug:158]: >>> "QPIRI\r"
[19:11:36][D][uart_debug:158]: <<< "(NAKss\r"
[19:11:37][D][uart_debug:158]: >>> "QMOD\r"
[19:11:37][I][main:605]: Done. Repeating...
Any help would be appreciated!
Hello there,
result of QPIWS it's not complete (complete are 38 numbers) this produce an error in the variable faults_present
'QPIWS': Sending state '(00000000000000000000000000000000'
`text_sensor:
##Inverter
`binary_sensor:
Thanks
So I am seeing a lot of CRC NOK as well as a few CRC OK. Which makes me think that I must have things wired up correctly, maybe? But I am just getting everything reported as 0.0 or off.
Could this be a compatibility issue? The SunGoldPower has identical specs and looks physically identical on the outside (except the paint job) as the Voltronic Axpert King II which is also the same as the MPP Solar lvx6048, so I am assuming they are all the same unit. I am running this on an esp8266 D1 mini if that makes a difference.
Here are some of the logs:
[18:07:00][D][pipsolar:836]: Sending polling command : QPIRI with length 5
[18:07:00][D][pipsolar:772]: checking crc on incoming message
[18:07:00][D][pipsolar:775]: CRC OK
[18:07:00][D][pipsolar:429]: Decode QPIRI
[18:07:00][D][text_sensor:067]: 'inverter0_last_qpiri': Sending state 'QPIRI'
[18:07:00][D][sensor:124]: 'Inverter Battery Recharge Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:00][D][sensor:124]: 'Inverter Battery Bulk Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:00][D][sensor:124]: 'Inverter Battery Float Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:00][D][sensor:124]: 'Inverter Output Source Priority': Sending state 0.00000 with 1 decimals of accuracy
[18:07:00][D][sensor:124]: 'Inverter Charger Source Priority': Sending state 0.00000 with 1 decimals of accuracy
[18:07:00][D][sensor:124]: 'Inverter Output Mode': Sending state 0.00000 with 1 decimals of accuracy
[18:07:00][D][sensor:124]: 'Inverter Battery Re-discharge Voltage': Sending state 0.00000 with 1 decimals of accuracy
[18:07:01][D][pipsolar:836]: Sending polling command : QPIWS with length 5
[18:07:01][D][pipsolar:772]: checking crc on incoming message
[18:07:01][D][pipsolar:775]: CRC OK
[18:07:01][D][pipsolar:525]: Decode QPIWS
[18:07:02][D][pipsolar:836]: Sending polling command : QMOD with length 4
[18:07:02][D][pipsolar:772]: checking crc on incoming message
[18:07:02][D][pipsolar:781]: CRC NOK expected: 4A 4E but got: 49 C1
[18:07:03][D][pipsolar:836]: Sending polling command : QPIGS with length 5
[18:07:03][D][pipsolar:772]: checking crc on incoming message
[18:07:03][D][pipsolar:775]: CRC OK
[18:07:03][D][pipsolar:448]: Decode QPIGS
[18:07:03][D][text_sensor:067]: 'inverter0_last_qpigs': Sending state 'QPIGS'
[18:07:03][D][sensor:124]: 'Inverter Grid Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Grid Frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter AC Output Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter AC Output Frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter AC Output Apparent Power': Sending state 0.00000 VA with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter AC Output Active Power': Sending state 0.00000 W with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Output Load Percent': Sending state 0.00000 % with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Bus Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Battery Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Battery Charging Current': Sending state 0.00000 A with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Battery Capacity Percent': Sending state 0.00000 % with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Inverter Heat Sink Temperature': Sending state 0.00000 °C with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter PV Input Current for Battery': Sending state 0.00000 A with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter PV Input Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Battery Voltage SCC': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter Battery Discharge Current': Sending state 0.00000 A with 1 decimals of accuracy
[18:07:03][D][sensor:124]: 'Inverter PV Charging Power': Sending state 0.00000 W with 1 decimals of accuracy
[18:07:04][D][pipsolar:836]: Sending polling command : QPIRI with length 5
[18:07:04][D][pipsolar:772]: checking crc on incoming message
[18:07:04][D][pipsolar:781]: CRC NOK expected: F8 54 but got: F8 0
[18:07:05][D][pipsolar:836]: Sending polling command : QPIWS with length 5
[18:07:05][D][pipsolar:772]: checking crc on incoming message
[18:07:05][D][pipsolar:775]: CRC OK
[18:07:05][D][pipsolar:525]: Decode QPIWS
[18:07:06][D][pipsolar:836]: Sending polling command : QMOD with length 4
[18:07:06][D][pipsolar:772]: checking crc on incoming message
[18:07:06][D][pipsolar:775]: CRC OK
[18:07:06][D][pipsolar:471]: Decode QMOD
[18:07:06][D][text_sensor:067]: 'inverter0_device_mode': Sending state 'M'
[18:07:07][D][pipsolar:836]: Sending polling command : QPIGS with length 5
[18:07:07][D][pipsolar:772]: checking crc on incoming message
[18:07:07][D][pipsolar:775]: CRC OK
[18:07:07][D][pipsolar:448]: Decode QPIGS
[18:07:07][D][text_sensor:067]: 'inverter0_last_qpigs': Sending state 'QPIGS'
[18:07:07][D][sensor:124]: 'Inverter Grid Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Grid Frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter AC Output Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter AC Output Frequency': Sending state 0.00000 Hz with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter AC Output Apparent Power': Sending state 0.00000 VA with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter AC Output Active Power': Sending state 0.00000 W with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Output Load Percent': Sending state 0.00000 % with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Bus Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Battery Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Battery Charging Current': Sending state 0.00000 A with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Battery Capacity Percent': Sending state 0.00000 % with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Inverter Heat Sink Temperature': Sending state 0.00000 °C with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter PV Input Current for Battery': Sending state 0.00000 A with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter PV Input Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Battery Voltage SCC': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter Battery Discharge Current': Sending state 0.00000 A with 1 decimals of accuracy
[18:07:07][D][sensor:124]: 'Inverter PV Charging Power': Sending state 0.00000 W with 1 decimals of accuracy
[18:07:08][D][pipsolar:836]: Sending polling command : QPIRI with length 5
[18:07:08][D][pipsolar:772]: checking crc on incoming message
[18:07:08][D][pipsolar:775]: CRC OK
[18:07:08][D][pipsolar:429]: Decode QPIRI
[18:07:08][D][text_sensor:067]: 'inverter0_last_qpiri': Sending state 'QPIRI'
[18:07:08][D][sensor:124]: 'Inverter Battery Recharge Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:08][D][sensor:124]: 'Inverter Battery Bulk Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:08][D][sensor:124]: 'Inverter Battery Float Voltage': Sending state 0.00000 V with 1 decimals of accuracy
[18:07:08][D][sensor:124]: 'Inverter Output Source Priority': Sending state 0.00000 with 1 decimals of accuracy
[18:07:08][D][sensor:124]: 'Inverter Charger Source Priority': Sending state 0.00000 with 1 decimals of accuracy
[18:07:08][D][sensor:124]: 'Inverter Output Mode': Sending state 0.00000 with 1 decimals of accuracy
[18:07:08][D][sensor:124]: 'Inverter Battery Re-discharge Voltage': Sending state 0.00000 with 1 decimals of accuracy_
Any help is greatly appreciated! And thanks again for all your volunteer work on this project. I'm already using your code to integrate my jkbms and smart shunt into Home Assistant.
A declarative, efficient, and flexible JavaScript library for building user interfaces.
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
An Open Source Machine Learning Framework for Everyone
The Web framework for perfectionists with deadlines.
A PHP framework for web artisans
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
Some thing interesting about web. New door for the world.
A server is a program made to process requests and deliver data to clients.
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
Some thing interesting about visualization, use data art
Some thing interesting about game, make everyone happy.
We are working to build community through open source technology. NB: members must have two-factor auth.
Open source projects and samples from Microsoft.
Google ❤️ Open Source for everyone.
Alibaba Open Source for everyone
Data-Driven Documents codes.
China tencent open source team.