Git Product home page Git Product logo

esphome-pipsolar's Introduction

esphome-pipsolar

GitHub actions GitHub stars GitHub forks GitHub watchers "Buy Me A Coffee"

ESPHome example configuration to monitor and control a pipsolar inverter via RS232

Kudos to @andreashergert1984 for the great work!

Supported devices

  • PIP4048 compatible PV Inverter

Requirements

  • ESPHome 2022.11.0 or higher.
  • One half of an ethernet cable with RJ45 connector
  • RS232-to-TTL module (MAX3232CSE f.e.)
  • Generic ESP32 or ESP8266 board

Schematics

               RS232                     UART-TTL
┌──────────┐              ┌──────────┐                ┌─────────┐
│          │              │          │<----- RX ----->│         │
│          │<---- TX ---->│  RS232   │<----- TX ----->│ ESP32/  │
│   PIP    │<---- RX ---->│  to TTL  │<----- GND ---->│ ESP8266 │
│          │<---- GND --->│  module  │<-- 3.3V VCC -->│         │<--- VCC
│          │              │          │                │         │<--- GND
└──────────┘              └──────────┘                └─────────┘

RJ45 connector

Pin Purpose MAX3232 pin Color T-568B
1 TX P13 (RIN1) White-Orange
2 RX P14 (DOUT1) Orange
3
4 VCC 12V - Blue
5
6
7
8 GND P15 (GND) Brown

Please be aware of the different RJ45 pinout colors (T-568A vs. T-568B).

The inverter provides +12V on pin 4 or 7 depending on the model. You can use a cheap DC-DC converter to power the ESP with 3.3V.

The source for the pinout is here.

MAX3232

Pin Label ESPHome ESP8266 example ESP32 example
P11 (DIN1) TXD tx_pin GPIO4 GPIO16
P12 (ROUT1) RXD rx_pin GPIO5 GPIO17
P16 (VCC) VCC
P15 (GND) GND

Installation

Use the esp32-example.yaml / esp8266-example.yaml as proof of concept:

# Install esphome
pip3 install esphome

# Clone this external component
git clone https://github.com/syssi/esphome-pipsolar.git
cd esphome-pipsolar

# Create a secret.yaml containing some setup specific secrets
cat > secrets.yaml <<EOF
wifi_ssid: MY_WIFI_SSID
wifi_password: MY_WIFI_PASSWORD

mqtt_host: MY_MQTT_HOST
mqtt_username: MY_MQTT_USERNAME
mqtt_password: MY_MQTT_PASSWORD
EOF

# Validate the configuration, create a binary, upload it, and start logs
# If you use a esp8266 run the esp8266-examle.yaml
esphome run esp32-example.yaml

Take a look at the official documentation of the component for additional details.

Known issues

  1. If you configure a lot of the possible sensors etc. it could be that you run out of memory (on esp32). If you configure nearly all sensors etc. you run in a stack-size issue. In this case you have to increase stack size: esphome/issues#855

Debugging

If this component doesn't work out of the box for your device please update your configuration to enable the debug output of the UART component and increase the log level to the see outgoing and incoming serial traffic:

logger:
  level: DEBUG
  # Don't write log messages to UART0 (GPIO1/GPIO3) if the inverter is connected to GPIO1/GPIO3
  baud_rate: 0

uart:
  id: uart_0
  baud_rate: 2400
  tx_pin: GPIO1
  rx_pin: GPIO3
  debug:
    direction: BOTH
    dummy_receiver: false
    after:
      delimiter: "\r"
    sequence:
      - lambda: UARTDebug::log_string(direction, bytes);

If you don't know the protocol of your inverter please use this configuration and try to identify to which request (>>>) your inverter responds (<<<). NAK is a negative response f.e. if the command isn't supported. If you have trouble to interpret the log please create an issue and provide your ESPHome log.

References

esphome-pipsolar's People

Contributors

avion23 avatar syssi avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

esphome-pipsolar's Issues

EASUN iGrid IV 5.6 issue

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

Voltronic Axpert MKS IV 5.6kW no PV data

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

pipsolar:755]: timeout command to poll: QPIRI

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.

logs_mecer-inverter_logs.txt

Select Charging Paramaters Command Not Successful

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!

battery_discharge_current showing zero

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.

Adding QED, QEM, QEY and similar commands.

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...

EAsun ISolar SMH 3K - gets the answer on one line

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"

I have a few qestions about this PIP 2424.:

I have a few qestions about this PIP 2424:

  1. how can set Solar Charge priority:PCP00,PCP01,PCP02.PCP03?
  2. how to send other command(change bulk and float voltage,ecc,ecc)?? before using MQTT was very easy.

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)

ESP sending altered commands

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?

Add PI17 to support MPI 12KW WP and MPI 15KW WP

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

Solar Inverter communication with max 232 not work properly for all inverter

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

PIP 2424MSE1 - compilation error

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.

EASun problems

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

Connections for Voltronic MK IV

Hello Sissi, i wish to connect my Axpert MK IV with Home Assistant, i have a different connector, can you help me step by step to connect it? I attaced the my connection, i don't have the step down for the moment thank you
IMG_20221123_201900_943
IMG_20221123_203134_006
IMG_20221123_203210_339
IMG_20221124_103503_145

PIP 2424MSE1 support

Hi,
I tried with a 24v inverter from easun which however is identical to the 2424MSE1 of MPP solar looking at the esphome log I see that it sends something but receives nothing I also checked the wiring and I had reversed the red and white cable on the rj45 side, now I believe they are right
IMG_20210901_163157

PIP6048MT QPIGS timeout even with data coming in

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```

pipsolar >keine Daten im HA

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

How much solar/grid/battery power?

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?

PIP 18 : Problem with "current_max_ac_charging_current" string not having the

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

pip8048 branch have no more switch working

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>

Getting NAK with SunGoldPower 6048 (Voltronic Infinisolar V II rebrand)

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.

pip8048 branch with last dev compile error

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'.```

pip8048max CRC NOK

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?

Steca Solarix PLI 5000-48 // Axpert MKS 5K-48

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

Steca-Log.txt
ESPHome-config.txt

Add split phase sensors of the LV5048 (PI41)

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

Voltronic Axpert MKS IV 5.6kW compatible

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

Easun ISolar SML 3K - Not Working

image

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...

EASUN SMP5KW pipsplar

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

EAsun iSolar SM IV 5.6kW support

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?

Compatibility for HMS 3K-24V

image
image
image
image

as we have talked about in the other issue to try to solve the problem with this model, problem is temperature and SBU not working

Add battery bulk voltage setting (`PCVV`) support

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)

PI18 inverters support

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

QPIWS - not complete

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

  • platform: pipsolar
    pipsolar_id: inverter0
    last_qpiws:
    id: inverter0_last_qpiws
    name: ${name} QPIWS`

`binary_sensor:

  • platform: pipsolar
    pipsolar_id: inverter0
    #QPIWS
    faults_present:
    name: ${name} Faults`

Thanks

Problem with pipsolar_output

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;
          }

Few qestions about PIP8048 Max

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?

Voltronic Axpert VM III TWIN 6 kW no data

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"

eb964879-9318-46d8-bb19-372787325615

Screenshot-31

Sila Solar V2000M

Hi! does my Sila Solar V2000M inverter support this?
I tried using two different RS232 converters on each of them, the result is the same. I checked all the wires with a multitester, everything is fine with the connection. Below is a photo of the wires:
01
02
03

PIP 8048 support (Aka Axpert max)

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,

MPP Solar MPPT Charge Controller

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?

Easun SMW 8k (aka Axpert MAX 8) support

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)

Some sensors doesn't show valid values (Axpert VM IV 24v 3600w)

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}"

Easun smh 3k

Hello.
I am trying to configure my inverter to HA without luck.
I think hardware wiring is good, here is picture :
IMG20230309001012
One from the inverter :
IMG20230309115445

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.

Verify WKS EVO CIRCLE compatibility

Hello,
Thanks a lot for this great work.
Unfortunately, it doesn’t work on my side.
Inverter: WKS EVO CIRCLE.

image

Connections:

ESP32 <-> RS232/TTL
3V3 <-> VCC
RX <-> TX
TX <-> RX
GND <-> GND

image

image

image

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

image

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:

  • 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 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:

  • 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

======================== [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.

Pip 5048MGX not reporting all data and mismatching data entry.

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

This pip fro solpiplog.
SolpiplogScr

thanks for helps

EASUN ISOLAR SML III 5.5kW - Problem

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]: <<< 

PIP 8048 wrong "current_max_ac_charging_current"

Hi, thank you for your work! Today i tested setting of ac charging current, but i noticed that inverter doesn't load the correct value. TO do so i created simply buttons to load 2A and 10A; in both cases a wrong value is loaded by the inverter.

image

2022-12-09 17_50_31-HA Virtual 3T

photo_2022-12-10_01-24-59

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.