Closed derFrickler closed 1 year ago
Honestly I don't know. The example is dedicated for a Soyosource Inverter without a display / the WiFi dongle version of the device. But it's possible both devices are using the same protocol between the MCU and the display board. You could give it a try!
If you are afraid we could try to compare the mainboard of your inverter (with a display and without an external display port) with the WiFi version of the Soyosource (no display but a display port).
Thanks , i will just try it, lets see if it works. What is strange is that the example file and the code used refer to display - even for the wifi version, so it looks to me that is was developed for the display version but works for the wifi aswell. e.g. https://github.com/syssi/esphome-soyosource-gtn-virtual-meter/blob/822f9f182448dc404026803c996dc68fea319843/components/soyosource_display/soyosource_display.cpp#L120
But i am unable to find any docs or reference to is.
I made the naming pretty generic because I expect it to work. ;-)
If you own a cheap logic analyzer you could sniff some frames to be sure the assumption is correct.
Well, protocol for the display seems to be different from the one for the Wifi stick. It did not work like that.
I used an FTDI with an adum1201 to read the data from and to the display while its showing the status.
The display continuously sends packages to the Inverter - even it its only connected to Power.
5502000000FD 5502000000FD 5502000000FD 5502000000FD 5502000000FD 5502000000FD 5502000000FD 5502000000FD 5502000000FD
The Inverter answers with the following data:
A6025851420101000000DC64019738 A6025851420103000000DC64019736 A6025851420103000000DC64019736 A6025851420103000000DB64019737 A6025851420105000000DB64019834 A602585342D2181E1C00DB64460661 A6025851420103000000DB64019737 A6025851420103000000DB64019935 A6025851420103000000DB64019836 A6025851420103000000DB64019737 A6025851420103000000DB64019836 A6025851420103000000DB64019836
As said, my display is broken and nearly unreadable. I can't tell what is shown on the display for this packages till i get a new display.
For reference. there seems to be somebody that has already worked on this, but seems he is not responding to questions.... https://www.photovoltaikforum.com/thread/192795-soyosource-wr-24v-1000w-display-kaputt-durch-einen-esp8266-ersetzen/?postID=3018115#post3018115
@derFrickler Could you tell me some details about your Soyosource:
This my my first best guess of the frame content:
Pos Hex Dec
0 A6 166 Start of frame
1 02 2
2 58 88
3 51 81
4 42 66
5 01 1
6 01 1
7 00 0
8 00 0
9 00 0
10 DC 220 220V
11 64 100 100/2 = 50Hz
12 01 1
13 97 151
14 38 56 Checksum (Pos 1...13)
uint8_t chksum(const uint8_t data[], const uint8_t len) {
uint8_t checksum = 0xFF;
for (uint8_t i = 1; i < len; i++) {
checksum = checksum - data[i];
}
return checksum;
}
Hi syssi, its a bit hard to tell ;-) As the display is broken and i tried arround to much i guess i have messed up the settings and mode. Its the 24V Model Normally it was Bat+Limiter Mode Battery is attached and Request is 600W, but the Bat Start or Bat Off Voltage are set to high i guess. Bat Voltage should be ~26.4V
What i saw so far, status request is shorter, only 6byte and STATUS_COMMAND seems to be 0x02 instead of 0x01.
Well, a bit of more data and thoughts on the content...
Pos Hex Dec
0 A6 166 Start of frame
1 02 2 -> 81 at startup, then changes to 00 01 02 and stays on 02
2 58 88 -> 06 at startup, then changes to 00 86 58 and stays on 58
3 51 81 -> part of Total?
4 42 66 -> 51 42 -> 20802 -> Guess 208 total - still 5142 the next days - as the inverter did not produce anything.
5 01 1 -> part of Bat Volt?
6 01 1 -> 01 01 -> 257 Bat Volt? changes between 25.7 und 26.1 which is what the battery shows.
7 00 0 -> part of Bat Curr?
8 00 0 -> 00 00 -> 0 Bat Curr 0 as we are in standby?
9 00 0 -> Always 00
10 DC 220 220V -> changes between 219 and 220!
11 64 100 100/2 = 50Hz fix auf 50Hz
12 01 1 -> always 01
13 97 151 -> 97 -> 151 und 153 guess Temp in 0.1 as it was 8.1-8-3 this morning?
14 38 56 Checksum (Pos 1...13)
This would work out for most of the data, just the field for the power is missing and there is no 2byte sequence left...
and some more data captured on PowerOn sequence of Inverter, Captured from and to display at the same time: 24V 1000W Inverter 220V 50Hz Bat voltage ~25.6V
5502000000FD
A681065300D2181E1C0000004606B5
5501000000FE
A6810651020101000000DF6401518E
5501000000FE
A6810651020101000000DE6401538D
5501000000FE
A6810651020101000000DE6401518F
5501000000FE
A6810651020101000000DE6401528E
5501000000FE
A6810651020103000000DE6401528C
5501000000FE
A6000051420101000000DE640151D6
5501000000FE
A60000514200FF000000DC640152DA
5501000000FE
A6000051420101000000DE640153D4
5501000000FE
A6018651420101000000DE6401534D
5503000000FC
A601865342D2181E1C00DE64460631
5503000000FC
A602585342D2181E1C00DE6446065E
5501000000FE
A6025851420101000000DD6401527C
5501000000FE
A60258514200FF000000DD6401537E
5501000000FE
A6025851420113000000DD6401516B
5501000000FE
A6025851420101000000DD6401527C
5501000000FE
A6025851420101000000DB6401537D
5501000000FE
A6025851420101000000DD6401537B
5503000000FC
A602585342D2181E1C00DD6446065F
-> On startup guess Type request?
5502000000FD
Answer:
A681065300D2181E1C0000004606B5
-> Status Request:
5501000000FE
Answers:
A681065300D2181E1C0000004606B5
A6810651020101000000DF6401518E
A6810651020101000000DE6401518F
A6810651020101000000DE6401518F
A6810651020103000000DE6401528C
A6000051420101000000DE640151D6
A6018651420101000000DE6401534D
A6025851420101000000DD6401527C
-> Settings Request (when settings screen is opened):
5503000000FC
Answers:
A601865342D2181E1C00DE64460631
A602585342D2181E1C00DE6446065E
A602585342D2181E1C00DD6446065F
Good job! I've added some more thoughts:
Pos Hex Dec
0 A6 166 Start of frame
1 02 2 Power demand MSB or operation mode
2 58 88 Power demand LSB 0x0258 = 600W
3 51 81 Total energy MSB?
4 42 66 Total energy LSB? 0x5142 = 20802. I don't think this is the total energy because I've replaced a display board (LCD+PCB) in the past and the total energy value is stored on the display board.
5 01 1 Battery voltage MSB
6 01 1 Battery voltage LSB 256/10 = 25.6V
7 00 0 Battery current MSB
8 00 0 Battery current LSB
9 00 0 Operation mode?
10 DC 220 AC voltage 220V
11 64 100 AC frequency 100/2 = 50Hz
12 01 1 -> always 01
13 97 151 Temperature 151/10 = 15.1°C
14 38 56 Checksum (Pos 1...13)
Could you unplug the RS485 limiter cable or change the power demand to another value? Just to get an idea the power demand is part of the frame?
I will try that later, to bad that Udo_17 from the forum is not responding, as he seems to have al the info...
Yes. It feels like we do the same work a second time. ;-(
Next round, managed to get the inverter back to work on rs485 data by playing with the setting screen more than blindly ;_)
this sequence shows 600W 300W 0W rs485 disconnected
A60258914000F8011700E464024931
A60258914000F6011500E464024935
A60258914000F8011700E464024931
A60258914000F8011700E464024A30
A60258914000F6011600E464024A33
A60258914000F8011600E464024932
A60258914000F8011400E464024C31
A60258914000F8011700E464024733
A60258914000F8011500E464024A32
A60258914000F8011700E464024A30
A60258914000F8011600E464024A31
A60258914000FA011400E464024B30
A60258914000F8011500E464024933
A6012C914000FD008700E464024BE8
A6012C914000FD008500E464024CE9
A6012C914000FB008500E364024EEA
A6012C914000FF008600E364024CE7
A6012C914000FF008600E364024BE8
A6012C914000FD008600E364024CE9
A6012C914000FF008600E364024CE7
A6012C914000FF008500E364024CE8
A6012C914000FF008500E264024BEA
A6012C914000FF008600E264024EE6
A6012C914000FD008600E264024EE8
A6012C914000FF008600E264024DE7
A6012C914000FF008500E264024DE8
A6012C914000FF008500E264024EE7
A6012C91400101008600E164024DE5
A6000091400103000000E164024D96
A6000091400105000000E164025091
A6000091400105000000E164024D94
A6000091400105000000E164024D94
A6000091400105000000E164024E93
A6000091400107000000E264024B93
A6000091400105000000E264024E92
A6000091400105000000E264024D93
A6000091400105000000E264025090
A6000091400105000000E264024D93
A6000091400105000000E264024D93
A6000091400105000000E164024E93
A6000091400105000000E164024B96
A6000091400105000000E164024D94
A6000091400105000000E164024D94
A6000091400105000000E164024D94
A6000091000107000000E164024CD3
A6000091000105000000E164024CD5
A6000091000105000000E164024CD5
This confirms, 1-2 are the Power demand
A6
0258 Power Demand 600W
91 Mode or Status, was always 51, now with modbus limiter working its 91
40 Status? Seems to change to 00 if RS485 is disconnected. was 02 before with non working limiter
00F8 Bat Volt. /10
0117 Bat Curr /10
00 ? Always Zero
E4 AC Volts
64 AC Freq.
02 Mode? was 01 before is now 02 with Limiter working
49 Temp/10
31 Chcksum
Long story short: The frames look like the already supported soyosource_display
frames. I will try to proof this tomorrow.
Check this project for the protocol definition: https://github.com/PepeTheFroggie/Soyosource-GridTie-inverter-24V-LCD-replacement
I can confirm it's working with my Inverter
I made the following experiment: I publish your display traffic frames from above periodically using this configuration on GPIO4/GPIO05:
substitutions:
name: fake-display-traffic
device_description: "Emulate the display port traffic of the Soyosource GTN (display version)"
tx_pin: GPIO4
rx_pin: GPIO5
esphome:
name: ${name}
comment: ${device_description}
project:
name: "syssi.esphome-soyosource-gtn-virtual-meter"
version: 2.0.0
esp8266:
board: d1_mini
wifi:
ssid: !secret wifi_ssid
password: !secret wifi_password
ota:
api:
logger:
uart:
baud_rate: 9600
tx_pin: ${tx_pin}
rx_pin: ${rx_pin}
debug:
direction: BOTH
dummy_receiver: true
interval:
- interval: 20s
then:
# status responses
- uart.write: [0xA6, 0x02, 0x58, 0x91, 0x40, 0x00, 0xF8, 0x01, 0x17, 0x00, 0xE4, 0x64, 0x02, 0x4A, 0x30]
- delay: 1s
- uart.write: [0xA6, 0x02, 0x58, 0x91, 0x40, 0x00, 0xF8, 0x01, 0x16, 0x00, 0xE4, 0x64, 0x02, 0x4A, 0x31]
- delay: 1s
- uart.write: [0xA6, 0x02, 0x58, 0x91, 0x40, 0x00, 0xFA, 0x01, 0x14, 0x00, 0xE4, 0x64, 0x02, 0x4B, 0x30]
- delay: 1s
- uart.write: [0xA6, 0x02, 0x58, 0x91, 0x40, 0x00, 0xF8, 0x01, 0x15, 0x00, 0xE4, 0x64, 0x02, 0x49, 0x33]
- delay: 1s
- uart.write: [0xA6, 0x01, 0x2C, 0x91, 0x40, 0x00, 0xFD, 0x00, 0x87, 0x00, 0xE4, 0x64, 0x02, 0x4B, 0xE8]
- delay: 1s
- uart.write: [0xA6, 0x01, 0x2C, 0x91, 0x40, 0x00, 0xFD, 0x00, 0x85, 0x00, 0xE4, 0x64, 0x02, 0x4C, 0xE9]
- delay: 1s
- uart.write: [0xA6, 0x01, 0x2C, 0x91, 0x40, 0x00, 0xFB, 0x00, 0x85, 0x00, 0xE3, 0x64, 0x02, 0x4E, 0xEA]
- delay: 1s
- uart.write: [0xA6, 0x01, 0x2C, 0x91, 0x40, 0x00, 0xFF, 0x00, 0x86, 0x00, 0xE3, 0x64, 0x02, 0x4C, 0xE7]
- delay: 1s
- uart.write: [0xA6, 0x00, 0x00, 0x91, 0x40, 0x01, 0x03, 0x00, 0x00, 0x00, 0xE1, 0x64, 0x02, 0x4D, 0x96]
- delay: 1s
- uart.write: [0xA6, 0x00, 0x00, 0x91, 0x40, 0x01, 0x05, 0x00, 0x00, 0x00, 0xE1, 0x64, 0x02, 0x50, 0x91]
- delay: 1s
- uart.write: [0xA6, 0x00, 0x00, 0x91, 0x40, 0x01, 0x05, 0x00, 0x00, 0x00, 0xE1, 0x64, 0x02, 0x4D, 0x94]
- delay: 1s
- uart.write: [0xA6, 0x00, 0x00, 0x91, 0x40, 0x01, 0x05, 0x00, 0x00, 0x00, 0xE1, 0x64, 0x02, 0x4D, 0x94]
- delay: 1s
# settings responses
- uart.write: [0xA6, 0x01, 0x86, 0x53, 0x42, 0xD2, 0x18, 0x1E, 0x1C, 0x00, 0xDE, 0x64, 0x46, 0x06, 0x31]
- delay: 1s
- uart.write: [0xA6, 0x02, 0x58, 0x53, 0x42, 0xD2, 0x18, 0x1E, 0x1C, 0x00, 0xDE, 0x64, 0x46, 0x06, 0x5E]
- delay: 1s
I've attached another ESP using esp8266-display-example.yaml
to the "fake inverter". The component is able to decode the status
and settings
frames properly:
[07:45:00][I][soyosource_display:225]: Status frame received
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 600.00000 W with 0 decimals of accuracy
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:00][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:00][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:00][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 24.80000 V with 1 decimals of accuracy
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 27.90000 A with 1 decimals of accuracy
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 691.92004 W with 0 decimals of accuracy
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 228.00000 V with 0 decimals of accuracy
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:00][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.60000 °C with 1 decimals of accuracy
[07:45:01][I][soyosource_display:225]: Status frame received
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 600.00000 W with 0 decimals of accuracy
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:01][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:01][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:01][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 24.80000 V with 1 decimals of accuracy
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 27.80000 A with 1 decimals of accuracy
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 689.44006 W with 0 decimals of accuracy
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 228.00000 V with 0 decimals of accuracy
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:01][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.60000 °C with 1 decimals of accuracy
[07:45:02][I][soyosource_display:225]: Status frame received
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 600.00000 W with 0 decimals of accuracy
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:02][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:02][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:02][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 25.00000 V with 1 decimals of accuracy
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 27.60000 A with 1 decimals of accuracy
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 690.00000 W with 0 decimals of accuracy
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 228.00000 V with 0 decimals of accuracy
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:02][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.70000 °C with 1 decimals of accuracy
[07:45:03][I][soyosource_display:225]: Status frame received
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 600.00000 W with 0 decimals of accuracy
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:03][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:03][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:03][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 24.80000 V with 1 decimals of accuracy
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 27.70000 A with 1 decimals of accuracy
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 686.96002 W with 0 decimals of accuracy
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 228.00000 V with 0 decimals of accuracy
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:03][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.50000 °C with 1 decimals of accuracy
[07:45:04][I][soyosource_display:225]: Status frame received
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 300.00000 W with 0 decimals of accuracy
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:04][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:04][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:04][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 25.30000 V with 1 decimals of accuracy
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 13.50000 A with 1 decimals of accuracy
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 341.55002 W with 0 decimals of accuracy
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 228.00000 V with 0 decimals of accuracy
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:04][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.70000 °C with 1 decimals of accuracy
[07:45:05][I][soyosource_display:225]: Status frame received
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 300.00000 W with 0 decimals of accuracy
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:05][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:05][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:05][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 25.30000 V with 1 decimals of accuracy
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 13.30000 A with 1 decimals of accuracy
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 336.49002 W with 0 decimals of accuracy
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 228.00000 V with 0 decimals of accuracy
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:05][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.80000 °C with 1 decimals of accuracy
[07:45:06][I][soyosource_display:225]: Status frame received
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 300.00000 W with 0 decimals of accuracy
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:06][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:06][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:06][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 25.10000 V with 1 decimals of accuracy
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 13.30000 A with 1 decimals of accuracy
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 333.83002 W with 0 decimals of accuracy
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 227.00000 V with 0 decimals of accuracy
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:06][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 29.00000 °C with 1 decimals of accuracy
[07:45:07][I][soyosource_display:225]: Status frame received
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 300.00000 W with 0 decimals of accuracy
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:07][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:07][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:07][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 25.50000 V with 1 decimals of accuracy
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 13.40000 A with 1 decimals of accuracy
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 341.70001 W with 0 decimals of accuracy
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 227.00000 V with 0 decimals of accuracy
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:07][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.80000 °C with 1 decimals of accuracy
[07:45:08][I][soyosource_display:225]: Status frame received
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:08][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:08][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:08][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 25.90000 V with 1 decimals of accuracy
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 0.00000 A with 1 decimals of accuracy
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 225.00000 V with 0 decimals of accuracy
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:08][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.90000 °C with 1 decimals of accuracy
[07:45:09][I][soyosource_display:225]: Status frame received
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:09][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:09][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:09][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 26.10000 V with 1 decimals of accuracy
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 0.00000 A with 1 decimals of accuracy
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 225.00000 V with 0 decimals of accuracy
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:09][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 29.20000 °C with 1 decimals of accuracy
[07:45:10][I][soyosource_display:225]: Status frame received
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:10][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:10][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:10][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 26.10000 V with 1 decimals of accuracy
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 0.00000 A with 1 decimals of accuracy
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 225.00000 V with 0 decimals of accuracy
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:10][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.90000 °C with 1 decimals of accuracy
[07:45:11][I][soyosource_display:225]: Status frame received
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test output power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test operation mode id': Sending state 9.00000 with 0 decimals of accuracy
[07:45:11][D][text_sensor:067]: 'soyosource-gtn-display-test operation mode': Sending state 'Battery Limit'
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test operation status id': Sending state 0.00000 with 0 decimals of accuracy
[07:45:11][D][text_sensor:067]: 'soyosource-gtn-display-test operation status': Sending state 'Normal'
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test error bitmask': Sending state 0.00000 with 0 decimals of accuracy
[07:45:11][D][text_sensor:067]: 'soyosource-gtn-display-test errors': Sending state ''
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test battery voltage': Sending state 26.10000 V with 1 decimals of accuracy
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test battery current': Sending state 0.00000 A with 1 decimals of accuracy
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test battery power': Sending state 0.00000 W with 0 decimals of accuracy
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test ac voltage': Sending state 225.00000 V with 0 decimals of accuracy
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[07:45:11][D][sensor:126]: 'soyosource-gtn-display-test temperature': Sending state 28.90000 °C with 1 decimals of accuracy
[07:45:12][I][soyosource_display:360]: Settings:
[07:45:12][D][soyosource_display:365]: Unknown (byte 1): 01
[07:45:12][D][soyosource_display:368]: Unknown (byte 2): 86
[07:45:12][I][soyosource_display:372]: Operation mode setting: 02
[07:45:12][D][select:015]: 'soyosource-gtn-display-test operation mode': Sending state Battery Constant Power (index 1)
[07:45:12][I][soyosource_display:385]: Device model: 1000 W (210)
[07:45:12][I][soyosource_display:388]: Device type: PV 26-56V / BAT 24V (24)
[07:45:12][I][soyosource_display:392]: Start voltage: 30 V
[07:45:12][D][number:012]: 'soyosource-gtn-display-test start voltage': Sending state 30.000000
[07:45:12][I][soyosource_display:398]: Shutdown voltage: 28 V
[07:45:12][D][number:012]: 'soyosource-gtn-display-test shutdown voltage': Sending state 28.000000
[07:45:12][I][soyosource_display:412]: Output power limit: 700 W
[07:45:12][D][number:012]: 'soyosource-gtn-display-test output power limit': Sending state 700.000000
[07:45:12][I][soyosource_display:418]: Start delay: 6 s
[07:45:12][D][number:012]: 'soyosource-gtn-display-test start delay': Sending state 6.000000
[07:45:13][I][soyosource_display:360]: Settings:
[07:45:13][D][soyosource_display:365]: Unknown (byte 1): 02
[07:45:13][D][soyosource_display:368]: Unknown (byte 2): 58
[07:45:13][I][soyosource_display:372]: Operation mode setting: 02
[07:45:13][D][select:015]: 'soyosource-gtn-display-test operation mode': Sending state Battery Constant Power (index 1)
[07:45:13][I][soyosource_display:385]: Device model: 1000 W (210)
[07:45:13][I][soyosource_display:388]: Device type: PV 26-56V / BAT 24V (24)
[07:45:13][I][soyosource_display:392]: Start voltage: 30 V
[07:45:13][D][number:012]: 'soyosource-gtn-display-test start voltage': Sending state 30.000000
[07:45:13][I][soyosource_display:398]: Shutdown voltage: 28 V
[07:45:13][D][number:012]: 'soyosource-gtn-display-test shutdown voltage': Sending state 28.000000
[07:45:13][I][soyosource_display:412]: Output power limit: 700 W
[07:45:13][D][number:012]: 'soyosource-gtn-display-test output power limit': Sending state 700.000000
[07:45:13][I][soyosource_display:418]: Start delay: 6 s
[07:45:13][D][number:012]: 'soyosource-gtn-display-test start delay': Sending state 6.000000
Which GPIOs did you use for the Soyosource-GridTie-inverter-24V-LCD-replacement solution? I would like to provide a drop in replacement.
He is using the hardware serial with swap ( GPIO15 (TX) and GPIO13 (RX) by calling Serial.swap()) for the connection. I would keep it like in your code and stay on
tx_pin_ttl_wifi: GPIO14
rx_pin_ttl_wifi: GPIO12
tx_pin_rs485: GPIO4
rx_pin_rs485: GPIO5
If your code above is working, that means that the frames form the inverter are the same, just the requests from the display are different right?
Good catch!! The requests are different:
# WiFi dongle display port requests
55:01:00:00:00:00:00:00:00:00:00:FE
55:03:00:00:00:00:00:00:00:00:00:FC
# Display requests
55:02:00:00:00:FD
55:01:00:00:00:FE
55:03:00:00:00:FC
I've prepared a feature branch to add the support for short frames. Please use this YAML for further testing:
The most import change of the YAML is the selected feature branch:
substitutions:
name: soyosource-gtn-display
device_description: "Monitor and control the Soyosource GTN (WiFi & Display version) using the display port"
external_components_source: github://syssi/esphome-soyosource-gtn-virtual-meter@improve-display-support
I've increase the log level to DEBUG
and enabled the debug output of the uart
component. You should see the raw traffic at the log now:
[11:21:08][D][uart_debug:114]: >>> 55:03:00:00:00:FC
[11:21:09][D][uart_debug:114]: <<< A6:01:2C:91:40:00:FD:00:85:00:E4:64:02:4C:E9
[...]
[11:21:15][D][uart_debug:114]: >>> 55:03:00:00:00:FC
[11:21:17][D][uart_debug:114]: <<< A6:02:58:53:42:D2:18:1E:1C:00:DE:64:46:06:5E
I've disabled writes/commands using the long frames for now:
// this->write_array(frame, 12);
https://github.com/syssi/esphome-soyosource-gtn-virtual-meter/pull/104/files
Please give it a try. In best case you are able to request status
and settings
frames now. As next step we will try to write/update some settings.
How to write settings: https://github.com/PepeTheFroggie/Soyosource-GridTie-inverter-24V-LCD-replacement/blob/main/SoyoGraph_24v/soyo.ino#L84-L142
In future a message per setting/change is required. The WiFi version of the inverter supports updating all settings in a single frame.
great! I will try that the next days, i am busy today. Settings is not urgent anymore as its working again now. I will have a look for the settings code.
Take your time! I would be happy about your feedback to finish the feature some day.
YES, just testet you new branch and it seems to be working:
10:38:51][D][number:012]: 'soyosource-gtn-display start delay': Sending state 6.000000
[10:38:51][D][uart_debug:114]: <<< A6:02:58:63:42:D2:18:17:16:00:DE:63:46:06:5C
[10:38:55][D][uart_debug:114]: >>> 55:01:00:00:00:FE
[10:38:55][I][soyosource_display:225]: Status frame received
[10:38:55][D][sensor:126]: 'soyosource-gtn-display output power': Sending state 600.00000 W with 0 decimals of accuracy
[10:38:55][D][sensor:126]: 'soyosource-gtn-display operation mode id': Sending state 6.00000 with 0 decimals of accuracy
[10:38:55][D][text_sensor:067]: 'soyosource-gtn-display operation mode': Sending state 'PV'
[10:38:55][D][sensor:126]: 'soyosource-gtn-display operation status id': Sending state 2.00000 with 0 decimals of accuracy
[10:38:55][D][text_sensor:067]: 'soyosource-gtn-display operation status': Sending state 'Standby'
[10:38:55][D][sensor:126]: 'soyosource-gtn-display error bitmask': Sending state 2.00000 with 0 decimals of accuracy
[10:38:55][D][text_sensor:067]: 'soyosource-gtn-display errors': Sending state 'DC voltage too low'
[10:38:55][D][sensor:126]: 'soyosource-gtn-display battery voltage': Sending state 24.20000 V with 1 decimals of accuracy
[10:38:55][D][sensor:126]: 'soyosource-gtn-display battery current': Sending state 0.00000 A with 1 decimals of accuracy
[10:38:55][D][sensor:126]: 'soyosource-gtn-display battery power': Sending state 0.00000 W with 0 decimals of accuracy
[10:38:56][D][sensor:126]: 'soyosource-gtn-display ac voltage': Sending state 222.00000 V with 0 decimals of accuracy
[10:38:56][D][sensor:126]: 'soyosource-gtn-display ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[10:38:56][D][sensor:126]: 'soyosource-gtn-display temperature': Sending state 10.70000 °C with 1 decimals of accuracy
[10:38:56][D][uart_debug:114]: <<< A6:02:58:61:42:00:F2:00:00:00:DE:64:01:97:36
[10:38:56][D][uart_debug:114]: >>> 55:03:00:00:00:FC
[10:38:56][I][soyosource_display:360]: Settings:
[10:38:56][D][soyosource_display:365]: Unknown (byte 1): 02
[10:38:56][D][soyosource_display:368]: Unknown (byte 2): 58
[10:38:56][I][soyosource_display:372]: Operation mode setting: 01
[10:38:56][D][select:015]: 'soyosource-gtn-display operation mode': Sending state PV (index 0)
[10:38:56][I][soyosource_display:385]: Device model: 1000 W (210)
[10:38:56][I][soyosource_display:388]: Device type: PV 26-56V / BAT 24V (24)
[10:38:56][I][soyosource_display:392]: Start voltage: 23 V
[10:38:56][D][number:012]: 'soyosource-gtn-display start voltage': Sending state 23.000000
[10:38:56][I][soyosource_display:398]: Shutdown voltage: 22 V
[10:38:56][D][number:012]: 'soyosource-gtn-display shutdown voltage': Sending state 22.000000
[10:38:56][I][soyosource_display:412]: Output power limit: 700 W
[10:38:56][D][number:012]: 'soyosource-gtn-display output power limit': Sending state 700.000000
[10:38:56][I][soyosource_display:418]: Start delay: 6 s
Had some problems first as there was nothing on the mqtt because it was not defined in your example anymore. After adding that its back again on mqtt and in HA ;-)
Hmm... but it looks like the interpretation of some values isn't fine:
error bitmask
indicates "DC voltage too low" + Operation status "Standby". The other values seem correct.
Oh yes, right! State is Battery and the error message should not be there
I will have a look!
Great work, thanks a lot!
I have a similar use case. One display is already broken and the new one is getting also unreadable. So it's time to completely ditch the display.
With the improve-display-support
branch flashed onto a d1-mini, i'm already getting values from the inverter.
At the moment i don't have a battery connected. The debug output seems fine, except unknown operation mode
and operation mode setting
:
[22:31:50][D][uart_debug:114]: >>> 55:01:00:00:00:FE
[22:31:50][I][soyosource_display:225]: Status frame received
[22:31:50][D][sensor:124]: 'soyosource-gtn-display output power': Sending state 257.00000 W with 0 decimals of accuracy
[22:31:50][D][sensor:124]: 'soyosource-gtn-display operation mode id': Sending state 12.00000 with 0 decimals of accuracy
[22:31:50][W][soyosource_display:562]: Operation mode: Unknown (12)
[22:31:50][D][text_sensor:067]: 'soyosource-gtn-display operation mode': Sending state 'Unknown'
[22:31:50][D][sensor:124]: 'soyosource-gtn-display operation status id': Sending state 2.00000 with 0 decimals of accuracy
[22:31:50][D][text_sensor:067]: 'soyosource-gtn-display operation status': Sending state 'Standby'
[22:31:50][D][sensor:124]: 'soyosource-gtn-display error bitmask': Sending state 2.00000 with 0 decimals of accuracy
[22:31:50][D][text_sensor:067]: 'soyosource-gtn-display errors': Sending state 'DC voltage too low'
[22:31:50][D][sensor:124]: 'soyosource-gtn-display battery voltage': Sending state 0.00000 V with 1 decimals of accuracy
[22:31:50][D][sensor:124]: 'soyosource-gtn-display battery current': Sending state 0.00000 A with 1 decimals of accuracy
[22:31:50][D][sensor:124]: 'soyosource-gtn-display battery power': Sending state 0.00000 W with 0 decimals of accuracy
[22:31:50][D][sensor:124]: 'soyosource-gtn-display ac voltage': Sending state 221.00000 V with 0 decimals of accuracy
[22:31:50][D][sensor:124]: 'soyosource-gtn-display ac frequency': Sending state 50.00000 Hz with 1 decimals of accuracy
[22:31:50][D][sensor:124]: 'soyosource-gtn-display temperature': Sending state 14.90000 °C with 1 decimals of accuracy
[22:31:50][D][uart_debug:114]: <<< A6:01:01:C1:02:00:00:00:00:00:DD:64:01:C1:37
[22:31:50][D][uart_debug:114]: >>> 55:03:00:00:00:FC
[22:31:50][I][soyosource_display:360]: Settings:
[22:31:50][D][soyosource_display:365]: Unknown (byte 1): 01
[22:31:50][D][soyosource_display:368]: Unknown (byte 2): 01
[22:31:50][I][soyosource_display:372]: Operation mode setting: 00
[22:31:50][W][soyosource_display.select:015]: Invalid value 0
[22:31:50][I][soyosource_display:385]: Device model: 1000 W (210)
[22:31:50][I][soyosource_display:388]: Device type: PV 26-56V / BAT 24V (24)
[22:31:50][I][soyosource_display:392]: Start voltage: 25 V
[22:31:50][D][number:012]: 'soyosource-gtn-display start voltage': Sending state 25.000000
[22:31:50][I][soyosource_display:398]: Shutdown voltage: 25 V
[22:31:50][D][number:012]: 'soyosource-gtn-display shutdown voltage': Sending state 25.000000
[22:31:50][I][soyosource_display:412]: Output power limit: 350 W
[22:31:50][D][number:012]: 'soyosource-gtn-display output power limit': Sending state 350.000000
[22:31:50][I][soyosource_display:418]: Start delay: 60 s
[22:31:50][D][number:012]: 'soyosource-gtn-display start delay': Sending state 60.000000
[22:31:50][D][uart_debug:114]: <<< A6:01:01:C3:02:D2:18:19:19:00:DD:64:23:3C:7C
Without a battery connected, the output power 01:01
= 257W does not make sense.
Maybe the output power should be ignored in Operation mode: Unknown (12)
.
Thanks for your feedback! Do you like to provide some further testing? To move on here some testers would be great.
Hmm... but it looks like the interpretation of some values isn't fine:
- Operation mode "PV". It should be "BAT", right?
- The inverter delivers some power but the
error bitmask
indicates "DC voltage too low" + Operation status "Standby".
coming back to that one.... I mentioned that my inverter worked fine, but was only using the battery down to 60% of charge, then it stopped working. My Assumption now is that the inverter was still on PV mode and the low voltage warning was valid aswell. Meaning your code is fine.
I tried changing that with the write settings code from PepeTheFrogs project, but then the Limiting is not working anymore. Seems there is an issue in the settings stuff aswell.
I will try to confirm that on the weekend, as i just got a display from a friend for testing.
My final plan is - once my display replacement is there - to use your code to control the limiter via RS485 and only sniff the display data via serial on the same ESP. So i can still have the display connected and change settings there.
I tried changing that with the write settings code from PepeTheFrogs project, but then the Limiting is not working anymore. Seems there is an issue in the settings stuff aswell.
I don't understand this sentence. :-) Do you talk about the settings stuff of PepeTheFrogs project? My implementation doesn't provide settings/controls yet.
Thanks for your feedback! Do you like to provide some further testing? To move on here some testers would be great.
sure, i'm going to do some investigation this weekend
I don't understand this sentence. :-) Do you talk about the settings stuff of PepeTheFrogs project? My implementation doesn't provide settings/controls yet.
YES, i used the code from Pepe to change the settings. With that i am able to change from Bat to PV and back, but Limiter mode gets disabled as soon as i change settings, ist just on fix limit then and without the display i can't enable it again...
Sadly, my inverter is a quiet one. :-( Purple board, does not ever send anything back on rs485 (no led blinking) I could also try to test this.
Can I just connect the 2 tx / rx lines from the display with 10K resistors in between to my esp32?
Can I just connect the 2 tx / rx lines from the display with 10K resistors in between to my esp32?
Yes. I recommend adding an optical isolator (ADUM1201) to be super safe.
I have connected the esp8266 with a npn transistor as a level shifter. Just make sure to invert the uart rx_pin in YAML
Directly connecting (with inline resistors) works fine as long as the esp is powered by the inverter ant there is is no connection to the PC.
My ESP is powered by a smartphone usb brick. I suppose you mean it's an issue if the ESP and Soyo do not have a common ground?
ButschFPV solution also works only with common ground, right?
I suppose you mean it's an issue if the ESP and Soyo do not have a common ground?
Yes. This is the risk.
ButschFPV solution also works only with common ground, right?
The solution is risky only if the ESP isn't powered by the Soyosource.
Ok, thanks for the hint before I killed my ESP :D I will buy ADUM1201 then first, because my ESP is also doing other sutff like jk-bms and garage door control, it won't be powered by the soyo.
Directly connecting (with inline resistors) works fine as long as the esp is powered by the inverter ant there is is no connection to the PC.
My ESP is powered by a smartphone usb brick. I suppose you mean it's an issue if the ESP and Soyo do not have a common ground?
ButschFPV solution also works only with common ground, right?
Clearly optical isolation is the better choice if your esp is connected to other stuff. In my example the esp is powered by the Soyosource and share common ground. I flash the esp via OTA so no need to plug in my computer.
So, just attached the working display, set the inverter to Bat Limit and ist back working fine. Replaced the displayby your code and now I can confirm that the mode and error are reporting correct.
@derFrickler Perfect! Could you sniff some of the "write settings commands"? I would like to know how a "set operation mode to PV" frame looks like. Same applies to
Thanks in advance!
@syssi I had a little time to sniff some write settings commands:
Open menu
>>> 55:03:17:18:00:CD
<<< A6:01:01:C3:02:D2:18:17:18:00:DA:64:23:3C:82
Change Battery CP Grid to Y
[19:22:01][D][uart_debug:114]: <<< A6:01:01:53:02:D2:18:17:18:00:DA:64:23:3C:F2
[19:22:01][D][uart_debug:114]: <<< 55:03:17:18:02:CB
Change Battery CP Grid to N
[19:22:32][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:18:00:DA:64:23:3C:E2
[19:22:32][D][uart_debug:114]: <<< 55:03:17:18:01:CC
Change Bat start voltage from 23 to 24
[19:23:02][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:18:18:00:DA:64:23:3C:E1
[19:23:02][D][uart_debug:114]: <<< 55:0B:18:18:00:C4
Change Bat start voltage from 24 to 23
[19:23:27][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:18:00:DA:64:23:3C:E2
[19:23:27][D][uart_debug:114]: <<< 55:0B:17:18:00:C5
Change Bat off voltage from 24 to 23
[19:24:02][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:17:00:DA:64:23:3C:E3
[19:24:02][D][uart_debug:114]: <<< 55:0B:17:17:00:C6
Change Bat off voltage from 23 to 22
[19:24:46][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:16:00:DA:64:23:3C:E4
[19:24:46][D][uart_debug:114]: <<< 55:0B:17:16:00:C7
Bat CP Mode Power 350 to 340
[19:25:17][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:16:00:DA:64:22:3C:E5
[19:25:17][D][uart_debug:114]: <<< 55:13:22:64:00:66
Bat CP Mode Power 340 to 350
[19:25:40][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:16:00:DA:64:23:3C:E4
[19:25:40][D][uart_debug:114]: <<< 55:13:23:64:00:65
Bat AutoLimit Grid from N to Y (Battery CP Grid did change might as well)
[19:26:11][D][uart_debug:114]: <<< A6:01:01:C3:02:D2:18:17:16:00:DA:64:23:3C:84
[19:26:11][D][uart_debug:114]: <<< 55:03:23:64:10:65
Bat AutoLimit Grid from Y to N
[19:27:10][D][uart_debug:114]: <<< A6:01:01:C3:02:D2:18:17:16:00:DA:64:23:3C:84
[19:27:10][D][uart_debug:114]: <<< 55:03:23:64:01:74
Delay start from 60s to 59s
[19:28:30][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:16:00:DA:64:23:3B:E5
[19:28:30][D][uart_debug:114]: <<< 55:83:3B:00:00:41
Delay start from 59s to 60s
[19:29:06][D][uart_debug:114]: <<< A6:01:01:63:02:D2:18:17:16:00:DA:64:23:3C:E4
[19:29:06][D][uart_debug:114]: <<< 55:83:3C:00:00:40
Awesome! This helps a lot to finish the display support feature soon!
I had my inverter running in BatCP and BatLimit mode. Status byte 01 & 02 always shows 01:01. So my inverter does not report the target output power. The displys seems to show the calculated U*I value.
Settings frame
1 2 3 4 5 6 7 8 9 1 2 3 4 5 6 7 8 9
0 A6 A6 A6 A6 A6 A6 A6 A6 A6 SOF
1 01 01 01 01 01 01 01 01 00 Unknown
2 01 01 01 01 01 01 01 01 00 Unknown
3 53 63 63 63 63 63 63 C3 D3 Operation mode Low nibble (3): Settings frame, High nibble: Operation mode?
4 02 02 02 02 02 02 02 02 02 Status bitmask
5 D2 D2 D2 D2 D2 D2 D2 D2 D4 Device model 210 210 210 210 210 210 210 210 212 2=220V 10=1000W/12=1200W
6 18 18 18 18 18 18 18 18 30 Device type 24 24 24 24 24 24 24 24 48 Model 24V/48V
7 17 17 17 17 17 17 18 17 30 Starting voltage 23 23 23 23 23 23 18 17 48
8 18 16 16 16 17 18 18 16 2D Shutdown voltage 24 22 22 22 23 24 24 22 45
9 00 00 00 00 00 00 00 00 00 Grid voltage MSB
10 DA DA DA DA DA DA DA DA FB Grid voltage LSB 218 218 218 218 218 218 218 218 251 V
11 64 64 64 64 64 64 64 64 64 Grid frequency 100 100 100 100 100 100 100 100 100 / 2 = 50 Hz
12 23 22 23 23 23 23 23 23 4B Output power limit 35 34 35 35 35 35 35 35 75 * 10 = 350/340/750W
13 3C 3C 3B 3C 3C 3C 3C 3C 06 Delay in seconds 60 60 59 60 60 60 60 60 6
14 F2 E5 E5 E4 E3 E2 E1 84 19 CRC
sd sd sd sd sd sd sd sd sw
sd = Soyo display frame
sw = Soyo WiFi port frame
The settings frame looks like the settings frame of the Soyosource WiFi version.
Todos:
@ButschFPV I've read your recent messages another time now and it looks like you you are several steps ahead. :-)
# Start delay
55:83:3B:00:00:41
55:83:3C:00:00:40
^^
# Operation mode?
55:03:17:18:02:CB # Constant power mode
55:03:23:64:01:74 # off
55:03:23:64:10:65 # Limiter mode
^^
# Power output limit
55:13:23:64:00:65 # 0x23 = 35*10W
55:13:22:64:00:66 # 0x22 = 34*10W
^^
# Change stop voltage
55:0B:17:18:00:C5
55:0B:17:17:00:C6
55:0B:17:16:00:C7
^^
# Change start voltage
55:0B:17:18:00:C5
55:0B:18:18:00:C4
^^
I have the inverter on my desk. So if you have any questions i can collect more data tomorrow.
Well, not a bug, just a question. Do I get it right, I can use that example to replace my broken Display in the soyo to change the settings via HA? So far I only use the rs485 to set the power.
Thanks a lot!