Hello there, i also got one of these (48V 1200W with Limiter).Hi, I just saw this other version:
![]()
205.21US $ 16% OFF|WI FI MPPT Solar Grid Tie Inverter 1000W 1200W DC24V 48V 96V zu AC110V AC220V mit Limiter sensor PV/Batterie Entladung Inverter|Solar-Wechselrichter| - AliExpress
Smarter Shopping, Better Living! Aliexpress.comde.aliexpress.com
No display, but a 'USB TTL' port - it looks like the dongle use an ESP module for wifi. Maybe we can decode the traffic on that 'usb port' and make our own interface with a Raspberry or something like that...
Wow Chris, well done. I'm hoping to investigate you post further when i have some more time. I also have a emonpi that I use to relay an MQTT signal for control using a Rpi at the inverter. I've also been able to update the refresh rate of the emonpi to around 700ms without it crashing. If you are interested I left some details here:
![]()
Emonhub- Edit Mosquitto update times
Here is a summary to do the same task after you have maybe upgraded the emonpi: cd /opt/openenergymonitor/emonpi/firmware/src sudo nano src.ino >> EDIT TIME_BETWEEN_READINGS= 5000; cd .. sudo systemctl stop emonhub sudo platformio run -t upload sudo systemctl start emonhub Edit - formatted...community.openenergymonitor.org
Wow, that's a lot happening on a little Rpi 3. I wouldn't run the risk of catastrophic failure especially since the emonpi is so heavily tuned for low disc writing, compared to grafana. I run four rpi's at home for that reason, they are so cheap anyway!
It looks like an add-in for the ESP Home project:Hello, i am using also an soyo Inverter and reading with interest this thread. I want to replace the limiter with an software solution. I have an shelly 3EM and all the values in IO-Broker.
How can i write via IO Broker or Home Assistant the values to the soyo inverter ? That really is confusing me because i am not to expericened with coding. Ist there any How to ? I did not find anything yet.
I found this but still not clear how to build that.
![]()
GitHub - syssi/esphome-soyosource-gtn-virtual-meter: ESPHome component to simulate the current clamp to control the Soyosource GTN1200 limiter
ESPHome component to simulate the current clamp to control the Soyosource GTN1200 limiter - GitHub - syssi/esphome-soyosource-gtn-virtual-meter: ESPHome component to simulate the current clamp to c...github.com
Would be happy for support. Thank you
I'm the author of https://github.com/syssi/esphome-soyosource-gtn-virtual-meterThe project you linked to does look very good giving a dashboard and the ability to control using just Home Assistant scripts. But it does require you to have a working Home Assistant installation with all of the inputs you need to control the inverter being available in Home Assistant (e.g. if you are matching a load then you need to have CT clamp readings available to Home Assistant). Behind the scenes it is just subscribing to a MQTT feed and relaying that to the inverter, and also capturing a status message and publishing that back to MQTT in a format Home Assistant can understand automatically. - If you have Home Assistant all up and running and are used to that ecosystem this should be the goto way to control the inverter.
The project doesn't require a Home Assistant instance. If you flash the example yaml to your ESP
So, i had a few days testing this fine chinese apparatus...Hello there, i also got one of these (48V 1200W with Limiter).
View attachment 26227
I ordered the version with LCD display , but got one of these. Here's the link to Aliexpress: https://de.aliexpress.com/item/4000776611581.html?spm=a2g0s.9042311.0.0.985b4c4dpX34Jj
The USB-TTL port seems to be connected to the LCD port on the board. The WIFI stick does unencrypted MQTT (!) to Soyos servers (mqtt.soyo-dg.com).
There also is some kind of web portal at web.soyo-dg.com - if you register and add a WIFI stick S/N, you can look into the sites code and see the MQTT login credentials...
Unfortunately the web portal not shows any values, maybe it's never been finished... The android app works so far.
It also works with KlausLi's ESP control software: https://github.com/KlausLi/EspSoyosourceController/
Haven't had the time to hook the inverter up to PV voltage (my bench power supply only outputs 20V which is too low for the inverter to produce any power).
I will take some pictures of the inside of the GTI. Maybe its possible to change the USB-TTL Port for a proper LCD and buttons or even better control the inverter via whatever protocol there is spoken (looks like +5V, GND and two data pins - maybe SPI or even RS232?).
Does anyone know which protocol is used for communication between the LCD/button assembly and the main board?
Greetings,
merlin
So, i had a few days testing this fine chinese apparatus...
It works. Kind of. The MPPT is complete and utter crap, it won't find a suitable maximum power point which leads to fluctuating output power.
So for PV use it's useless. I unfortunately don't have a 48V power supply with enough beef to test this thing in battery mode...
I'm not too sure if i might keep the thing, because i will add a ePever charge controller and a 48V battery pack. If it works in battery mode, it's fine
Does your MPPT work?
Best regards,
merlin
It might look a bit dodgy but the yellow line seems to be above the green.... does that mean it outputs more power from the same PV in the same location, or do the two inverters have dissimilar inputs? In my mind more==better even if its wobbly and ugly looking!I have Shellys on each of my inverters. The green line is my existing Hoymiles 4 MPPT inverter, the orange one is the new SoyoSource. You can see the dodgy MPPTBut you are right, the values on the LCD or on the app (as i don't have an LC screen) are a bit off
![]()
Hi MerlinI have Shellys on each of my inverters. The green line is my existing Hoymiles 4 MPPT inverter, the orange one is the new SoyoSource. You can see the dodgy MPPTBut you are right, the values on the LCD or on the app (as i don't have an LC screen) are a bit off
![]()
esphome:
name: ${name}
platform: ESP32
board: heltec_wifi_kit_32
# Enable logging
logger:
baud_rate: 0
ota:
password: "system_generated"
wifi:
ssid: "username_here"
password: "password"
mqtt:
broker: "192.168.1.103"
username: "username_here"
password: "password"
id: mqtt_client
substitutions:
name: housebattery
globals:
- id: demand
type: int
initial_value: '0' #current power inverter should deliver (default to zero)
- id: importbuffer
type: int
initial_value: '120' #minimum amount of import from grid that should be targeted
- id: maxOutput
type: int
initial_value: '500' #maximum power inverter should deliver
- id: importingnow
type: int
initial_value: '0'
uart:
id: uart1
baud_rate: 4800
tx_pin: GPIO1
rx_pin: GPIO3
dallas:
- pin: 23
update_interval: 120s
number:
- platform: template
name: "${name} power demand"
id: powerdemand
min_value: 0
max_value: 1000
step: 1
interval:
- interval: 1s
then:
lambda: !lambda |-
static byte byte0 = 36;
static byte byte1 = 86;
static byte byte2 = 0;
static byte byte3 = 33;
static byte byte4 = 0; //(2 byte watts as short integer xaxb)
static byte byte5 = 0; //(2 byte watts as short integer xaxb)
static byte byte6 = 128;
static byte byte7 = 8; // checksum
static byte serialpacket[8];
// -- Compute serial packet to inverter (just the 3 bytes that change) --
byte4 = int(id(demand)/256); // (2 byte watts as short integer xaxb)
if (byte4 < 0 or byte4 > 256){
byte4 = 0;}
byte5 = int(id(demand))-(byte4 * 256); // (2 byte watts as short integer xaxb)
if (byte5 < 0 or byte5 > 256) {
byte5 = 0;}
byte7 = (264 - byte4 - byte5); //checksum calculation
if (byte7 > 256){
byte7 = 8;}
serialpacket[0]=byte0;
serialpacket[1]=byte1;
serialpacket[2]=byte2;
serialpacket[3]=byte3;
serialpacket[4]=byte4;
serialpacket[5]=byte5;
serialpacket[6]=byte6;
serialpacket[7]=byte7;
uart1->write_array (serialpacket, 8);
ESP_LOGD("Serial", "Inverter Demand Signal Sent: %d", id(demand));
font:
- file: 'OpenSans-Light.ttf'
id: my_font
size: 14
i2c:
sda: 4
scl: 15
display:
- platform: ssd1306_i2c
model: "SSD1306 128x64"
reset_pin: 16
address: 0x3C
id: my_display
lambda: |-
it.printf(0, 0, id(my_font), "Grid Import: %.1f", id(powermeter).state);
it.printf(0, 20, id(my_font), "Inv Demand: %d", id(demand));
it.printf(0, 40, id(my_font), "Batt Temp: %.1f", id(batt_temp).state);
sensor:
- platform: dallas
name: "Outside Ambient"
id: out_temp
index: 0
- platform: dallas
name: "Battery Pack 1"
index: 1
- platform: dallas
name: "Battery Pack 2"
index: 2
- platform: dallas
name: "Battery Pack 3"
index: 3
id: batt_temp
# mqtt subscribe
- id: powermeter
internal: true
platform: mqtt_subscribe
name: "${name} instantaneous power consumption"
topic: "emon/emonpi/power1"
accuracy_decimals: 0
unit_of_measurement: W
device_class: power
on_value:
then:
lambda: !lambda |-
id(importingnow) = id(powermeter).state - id(importbuffer); //target grid demand minus buffer
ESP_LOGD("main", "importnow processed: %d", id(importingnow));
id(demand) = id(demand) + id(importingnow); //add grid import to current demand, expects that grid import will be negative if exporting
ESP_LOGD("main", "demand raw: %d", id(demand));
if (id(demand) >= id(maxOutput)){
id(demand) = id(maxOutput); //cap at maxOutput - if the inverter is off or not keeping up with demand then the demand value would get very large if not capped
ESP_LOGD("main", "demand capped: %d", id(demand));
}
else if (id(demand) <= 0){ // if demand is negative reset to zero (control of a charger can be added here)
id(demand) = 0;
ESP_LOGD("main", "demand zeroed: %d", id(demand));
}
auto call = id(powerdemand).make_call();
call.set_value(id(demand));
call.perform();
#----------------------------------------------------------------------------
# --- Additions for github://syssi/esphome-soyosource-gtn-virtual-meter@main
#-----------------------------------------------------------------------------
- platform: soyosource_inverter
operation_mode_id:
name: "${name} operation mode id"
battery_voltage:
name: "${name} battery voltage"
id: battvolt
battery_current:
name: "${name} battery current"
battery_power:
name: "${name} battery power"
ac_voltage:
name: "${name} ac voltage"
ac_frequency:
name: "${name} ac frequency"
temperature:
name: "${name} temperature"
id: invtemp
text_sensor:
- platform: soyosource_inverter
operation_mode:
name: "${name} operation mode"
binary_sensor:
- platform: soyosource_inverter
fan_running:
name: "${name} fan running"
external_components:
- source: github://syssi/esphome-soyosource-gtn-virtual-meter@main
refresh: 0s
soyosource_modbus:
- id: modbus0
uart_id: uart1
soyosource_inverter:
- id: inverter1
soyosource_modbus_id: modbus0
#----------------------------------------------------------------------------
# --- END -- Additions for github://syssi/esphome-soyosource-gtn-virtual-meter@main
#-----------------------------------------------------------------------------
Also note.... the kWh figure for the units is calculated from the target W and not the measured watts. The target watts is whatever the unit recieves, so you can set the target to 20,000W and this will aggregate in the Wh figure.....When I figured this out after some testing it was bit of a home simpson doh moment crossed with WTF.... might have been corrected in the later units, or not...
Really apperciate the input and feedback.Thanks for the huge amount of info. I have an inverter bought in 2021, so newer firmware: I just had a look and can confirm that the total elapsed kwh figure on the display now appears to show actual power exported rather than aggregating the demand signal. No idea if thats from measured battery input or inverter output, but I do know its not wonderfully accurate if you measure it against what the inverter really outputs (even though it actually outputs very close to what is demanded).. my suspicion is this is energy flowing into the inverter, so is therefore inclusive of losses (I have an expensive SMA solar inverter that follows that methodology, you can calculate its efficiency by looking at its total export verses the export meter fitted by the electricity company).
On your other points:
-low voltage cuttoff now works and the inverter will automatically restart once voltage goes past the user programmable restart limit (you can program a cuttoff voltage and a higher restart voltage to stop the inverter cycling due to voltage drop under load).
-no serial status packet is sent unless prompted by the appropriate command that others on this board have discovered.
-I transmit a demand signal once a second and that works fine, I have experimented with twice a second and that works. If you leave an interval of ~3 seconds between commands then the inverter moves to zero output until it gets another command. Some people have stated that the inverter uses an averaging algorithm on the demand signal, I have not noticed that, it will instantaneously move to the new output level when commanded although the value displayed on the screen can be a little laggy.
-inverter seems to de-rate itself at high output and low battery voltage, but will hold 400w output all the way to low voltage shutdown.
Some of my observations:
-inverter consumes 2 watts of electricity if switched on but at zero output. 7 watts if the screen is on, but that times out after a few minutes. For this reason I have mine on a wifi smart socket and turn it on only for the hours I want the battery to run (my use case doesn't need the inverter matching the load 24/7). This also means I sometimes turn the inverter off under load, but this is within design spec for the inverter.
-I don't have high expectations about exactly matching load, my only requirement is that I don't export any significant amount of power. My battery is small enough that I can empty it in a few hours so I don't need to eeek out extra power by getting as close as possible to zero grid import. I also have a solar diverter for hot water heating and getting to less than100 watts of grid import can cause that to false trigger and then not shut down causing the inverter to back power and load match the diverter which is also undesirable. I have found targeting a buffer of 120w grid import seems to be a happy medium between never exporting or triggering the diverter and feeding the most power to the house, given the type of loads we have.
-The inverter lives in a waterproof box and miraculously doesn't overheat or activate its fans despite limited ventilation... I shall improve this 'one day'... It only operates a few hours at a time at lowish load so that's why I am not concerned at the moment.