Limiter inverter with RS485 load setting

def read_consumed_power(ser):
time.sleep(0.1) # Wait and clear input buffer to ensure proper packet synchronization
ser.reset_input_buffer()
try:
raw = ser.read(8) # Read 8 bytes
except: return -1

(a,b,divider,c,consumed_power,d,crc) = struct.unpack('>BBBBHBB', raw)
if computeCRC(consumed_power) != crc: return -2 # Checksum mismatch

return consumed_power
I don't know Python very well, but maybe this can help
 
Thanks grundholm!
I know CarlosGS code, it is actually working for reading the measurement box.
Its frame is different in the number of bytes.

If my two soyo are not broken, reading the status frame is somehow different... :-(
 
Last edited by a moderator:
I made this now, it works on my 'broken' Soyo in Windows... Just remember to change the serial port. It prints out the first bit as hex (a)


Python:
import struct
import time
import serial

ser_port = serial.Serial('COM3',4800)

def read_power(ser):
    time.sleep(0.1)
    try:
        raw = ser.read(15)
    except: return -1
      
    (a,b,c,d,e,f,g,h,i,j,k,l,m,n,o) = struct.unpack('>BBBBBBBBBBBBBBB', raw)
  
    return a

def send_request(ser):
    a = 0x24
    b = 0x00
    c = 0x00
    d = 0x00
    e = 0x00
    f = 0x00
    g = 0x00
    h = 0x00
  
    send = struct.pack('>BBBBBBBB',a,b,c,d,e,f,g,h)
    ser.write(send)
    ser.flush()
  
send_request(ser_port)
print(hex(read_power(ser_port)))

ser_port.close()
 
Last edited:
I made this now, it works on my 'broken' Soyo in Windows... Just remember to change the serial port. It prints out the first bit as hex (a)
Thank you very much for your code!
I still get nothing from soyo...
At least my code attempts have not been fundamentally wrong.

Your bricked soyo is answering in standby mode right?
 
My Soyo is not completely bricked, I connected it to my solarpanels again, it converts the power to the grid, but after 20 sec. it reboots - starts again and send power to the grid, 20 sec. reboot - and the cycle continues - I tried with the Python code and if I run it during the 20 secs where the inverter is working, then I get a responce back. The weird thing is that the display continues to show 239 Volt (grid Voltage) - I also get 239 in the serial output, so the display and serial output the same values - maybe a false reading causes the reboots, I don't know...

Did you try with the code like I wrote it? (without any reset of the buffer etc.) It sends the command once and wait for one reply (just to keep it simple) - try to run the code 3-4 times and see if the inverter respond.

How old is your Soyo? maybe they changed something in the firmware, would be interesting to find out.
 
I tried your code!☺️

The older soyo which is working by RS485 demand without any Problem since weeks is a 2021-301.
The brand new one is a "STC8-2022-218" it displays "RS485" in the lower right corner when it receives power demands. (see below)
After 3 sec without a power demand the RS485 is removed in the display.
It doesn't react on status requests, only on power demands.

Both don't answer my status requests....
 

Attachments

  • signal-2022-04-18-150833.jpeg
    signal-2022-04-18-150833.jpeg
    86.5 KB · Views: 83
Last edited by a moderator:
Did anyone here buy the 'new' Soyo with the Wifi-Stick?
-and sniff the data between the Soyo and the stick - I looked at the pictures of the Wifi-Stick and it seems like the 'USB' is actually just a serial port connected to RX, TX and a 'set' button, the last pin is not visible, but probably just 5v or 3.3v for the (ESP12)
 
Interesting, Danke! I also noticed that the wires between the driverboard (behind the screen) and the screen has the 5v, RX, TX and GND markings, the same as the TTL 'USB' port - wonder if it's actually the same...
 
I tried your code!☺️

The older soyo which is working by RS485 demand without any Problem since weeks is a 2021-301.
The brand new one is a "STC8-2022-218" it displays "RS485" in the lower right corner when it receives power demands. (see below)
After 3 sec without a power demand the RS485 is removed in the display.
It doesn't react on status requests, only on power demands.

Both don't answer my status requests....
I also have a new Soyo with software version STC8-2022-218 and it also does not respond to status requests. I can control the power output just fine, but cannot persuade it to give me a status report.
 
@etom - are you in Germany? I am :) -If you want I could send you the CPU board from my bricked inverter, this way we can find out if it's a firmware thing and also see if my CPU works....
 
Hi All, quick question about this device. Does anyone know the ramp speed of the inverter? I'm polling my import feed at 750ms and sending commands to the inverter to match it at a rate of 1 second but I was wondering how quickly the inverter can ramp up (and down) its output rate so that I can minimise error. All advice appreciated!
 
I just got my soyo 1200W inverter and I'm a little sad or unhappy as it has NO LCD at all. Just the wifi stick and limiter.
The manual and how-to papers show the inverter with LCD and describe how to set it up using the buttons.

I downloaded the app and configured the inverter with it, but I planned to see data/informations on the fr*kken LCD -_-
Anyway: I did not yet try to set the power via RS485 as I still wait for the USB converters to arrive, I hope it is possible to get and set some data via RS485 :/

BTW: the 1200W inverter is not as efficient as the SUN-2000 GTIL2, it produces at least 15W less but displays varying wattage values in the app :/
I installed a (house installation) smartmeter to see what's really being produced.
My SUN-2000 GTIL2 actually shows a lower wattage than it actually generates, the 1200W soyo shows more than it generates.
 
My first soyo has a "milage" of 270 kWh now - and is still working.
I know you run this device much longer than me, whats your soyos "milage"?
 
I think there is a bug in CarlosGS code:
Code:
def computeCRC(power):
  pu = power >> 8
  pl = power & 0xFF
  return (264 - pu - pl) & 0xFF

it should be something like:
Code:
def computeCRC(power):
  pu = power >> 8
  pl = power & 0xFF
  cs = 264 - pu - pl
  if cs >= 256: cs = 8
  return(cs)

Thanks for sharing your code!
 
I know you run this device much longer than me, whats your soyos "milage"?
One unit that failed (low voltage - capacitor failure) was about 3,500kWh (800W max)
The three that have displays are :
1,384kWh - RS485 - Newer unit (900W max)
3,902kWh - RS485 - Older (900W max)
3,585kWh - RS485 - Older (900W max)
1,798kWh - no RS485 supplying constant baseload of around 200W 24x7 - oldest unit
 
Back
Top