Getting Data from Solis Inverter

What model inverter do you have?

I would be very interested in your nodeRED flows for writing. I have gone down the exact same route hardware wise as yourself.

I’m not an experienced Node-red user, but I find making logic in HAAS very tedious and ineffective.

[{"id":"dae48a4adc25160a","type":"tab","label":"Solar","disabled":false,"info":"","env":[]},{"id":"257abe6c0a5907e2","type":"junction","z":"dae48a4adc25160a","x":140,"y":340,"wires":[["90614ad5a674692c","fbb05aa007462456"]]},{"id":"9995ae81a37d9dae","type":"ha-entity","z":"dae48a4adc25160a","name":"Low Power Solar","server":"d7bd0613.794c78","version":2,"debugenabled":false,"outputs":2,"entityType":"switch","config":[{"property":"name","value":"Low_power_solar"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":true,"outputPayload":"true","outputPayloadType":"bool","x":130,"y":180,"wires":[["5461e6b90ab63e7c","9ec2556140e57470"],["c7303b2ce79047a5","b2bc0cd9d3731f54"]]},{"id":"5461e6b90ab63e7c","type":"modbus-getter","z":"dae48a4adc25160a","name":"","showStatusActivities":false,"showErrors":false,"logIOActivities":false,"unitid":"1","dataType":"HoldingRegister","adr":"3051","quantity":"1","server":"839d6faa3b9316ef","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":true,"x":340,"y":140,"wires":[["92291737d89d8fcc"],[]]},{"id":"92291737d89d8fcc","type":"function","z":"dae48a4adc25160a","name":"set to 50%","func":"var pwrMsg = {};\nvar gridMsg = {}; \n\nif (msg.payload[0] > 6000)\n{\n    node.warn(\"output set to 60%\");\n    pwrMsg.payload = { value: 6000, 'fc': 6, 'unitid': 1, 'address': 3051, 'quantity': 1 };\n    gridMsg.payload = { value: 52, 'fc': 6, 'unitid': 1, 'address': 3067, 'quantity': 1 }; \n    return [pwrMsg, gridMsg];\n}\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":120,"wires":[["5364e6d4aafc542b"],["5364e6d4aafc542b"]]},{"id":"d643f2a283e32b10","type":"function","z":"dae48a4adc25160a","name":"set to 110%","func":"var pwrMsg = {};\nvar gridMsg = {};\n\nif (msg.payload[0] < 11000) {\n    node.warn(\"output set to 110%\");\n    pwrMsg.payload = { value: 11000, 'fc': 6, 'unitid': 1, 'address': 3051, 'quantity': 1 };\n    gridMsg.payload = { value: 53, 'fc': 6, 'unitid': 1, 'address': 3067, 'quantity': 1 };\n    return [pwrMsg, gridMsg];\n}\n\n","outputs":2,"noerr":0,"initialize":"","finalize":"","libs":[],"x":530,"y":220,"wires":[["5364e6d4aafc542b"],["5364e6d4aafc542b"]]},{"id":"c7303b2ce79047a5","type":"modbus-getter","z":"dae48a4adc25160a","name":"","showStatusActivities":false,"showErrors":false,"logIOActivities":false,"unitid":"1","dataType":"HoldingRegister","adr":"3051","quantity":"1","server":"839d6faa3b9316ef","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":true,"x":340,"y":200,"wires":[["d643f2a283e32b10"],[]]},{"id":"5364e6d4aafc542b","type":"modbus-flex-write","z":"dae48a4adc25160a","name":"","showStatusActivities":false,"showErrors":false,"server":"839d6faa3b9316ef","emptyMsgOnFail":false,"keepMsgProperties":false,"x":750,"y":160,"wires":[["6caf2b56548b9338"],[]]},{"id":"90614ad5a674692c","type":"modbus-getter","z":"dae48a4adc25160a","name":"","showStatusActivities":false,"showErrors":false,"logIOActivities":false,"unitid":"1","dataType":"HoldingRegister","adr":"3067","quantity":"1","server":"839d6faa3b9316ef","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":true,"x":340,"y":360,"wires":[["cc6fd2526d5e451a"],[]]},{"id":"cc6fd2526d5e451a","type":"function","z":"dae48a4adc25160a","name":"Sort Grid Standard","func":"if (msg.payload[0] == 52) {\n    msg.payload = \"G98\";\n} else if (msg.payload[0] == 53) {\n    msg.payload = \"G99\";\n} else {\n    msg.payload = \"error\";\n}\nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":340,"wires":[["d2a4ec41e3cf64a7"]]},{"id":"fbb05aa007462456","type":"modbus-getter","z":"dae48a4adc25160a","name":"","showStatusActivities":false,"showErrors":false,"logIOActivities":false,"unitid":"1","dataType":"HoldingRegister","adr":"3051","quantity":"1","server":"839d6faa3b9316ef","useIOFile":false,"ioFile":"","useIOForPayload":false,"emptyMsgOnFail":false,"keepMsgProperties":true,"x":340,"y":420,"wires":[["6990b2096f6560d0"],[]]},{"id":"6990b2096f6560d0","type":"function","z":"dae48a4adc25160a","name":"Sort Power Level","func":"msg.payload = (msg.payload[0] / 100); \nreturn msg;","outputs":1,"noerr":0,"initialize":"","finalize":"","libs":[],"x":590,"y":420,"wires":[["4ed266f81e8320a8"]]},{"id":"d2a4ec41e3cf64a7","type":"ha-entity","z":"dae48a4adc25160a","name":"solis_grid_standard","server":"d7bd0613.794c78","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"solis_grid_standard"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":""},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":810,"y":340,"wires":[[]]},{"id":"4ed266f81e8320a8","type":"ha-entity","z":"dae48a4adc25160a","name":"solis_power_limit","server":"d7bd0613.794c78","version":2,"debugenabled":false,"outputs":1,"entityType":"sensor","config":[{"property":"name","value":"solis_power_limit"},{"property":"device_class","value":""},{"property":"icon","value":""},{"property":"unit_of_measurement","value":"%"},{"property":"state_class","value":""},{"property":"last_reset","value":""}],"state":"payload","stateType":"msg","attributes":[],"resend":true,"outputLocation":"payload","outputLocationType":"none","inputOverride":"allow","outputOnStateChange":false,"outputPayload":"","outputPayloadType":"str","x":810,"y":420,"wires":[[]]},{"id":"6caf2b56548b9338","type":"delay","z":"dae48a4adc25160a","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"5","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":true,"allowrate":false,"outputs":1,"x":960,"y":220,"wires":[["257abe6c0a5907e2"]]},{"id":"9ec2556140e57470","type":"debug","z":"dae48a4adc25160a","name":"debug 1","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":220,"y":60,"wires":[]},{"id":"b2bc0cd9d3731f54","type":"debug","z":"dae48a4adc25160a","name":"debug 2","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"payload","targetType":"msg","statusVal":"","statusType":"auto","x":240,"y":260,"wires":[]},{"id":"d7bd0613.794c78","type":"server","name":"Home Assistant","version":2,"addon":true,"rejectUnauthorizedCerts":true,"ha_boolean":"y|yes|true|on|home|open","connectionDelay":true,"cacheJson":true,"heartbeat":false,"heartbeatInterval":30},{"id":"839d6faa3b9316ef","type":"modbus-client","name":"Solis","clienttype":"tcp","bufferCommands":true,"stateLogEnabled":false,"queueLogEnabled":false,"failureLogEnabled":true,"tcpHost":"192.168.1.24","tcpPort":"502","tcpType":"DEFAULT","serialPort":"/dev/ttyUSB","serialType":"RTU-BUFFERD","serialBaudrate":"9600","serialDatabits":"8","serialStopbits":"1","serialParity":"none","serialConnectionDelay":"100","serialAsciiResponseStartDelimiter":"0x3A","unit_id":1,"commandDelay":1,"clientTimeout":1000,"reconnectOnTimeout":true,"reconnectTimeout":2000,"parallelUnitIdsAllowed":true}]

This is the flow that I use. This checks some variables in HAAS then allows you to switch Grid standard from G98 to G99 and limit the power output of the inverter.

Weirdly these settings are not persistent over nighttime. ie. the next day it has forgotten about them, which also happens if you set them via the panel at the front. I’ve not investigated this at the moment, it was more a proof of principle. However, setting up the modes instance and reading values was fairly straight forward.

If you are having trouble, show me what you are doing and I can try to help.

Have you got HASS working from the TCP/Serial device?

A

Just found this community, hope I can get into this API or the WiFi data.

I have the solis inverter and the wifi dongle from installation. I can see the device on my network but if I try and access the standard creds dont work (Admin:admin).

I am happy to eavesdrop the traffic or use other techniques to get more data.

My other project would be to repurpose one of my raspberry pi’s and use ct to measure the regular house power, however I want to explore the inverter option first in case this is enough to get at the core data?

TIA
G

Solis inverters have available a mass of data, including domestic load, grid power, solar power etc.

There are several approaches to getting data out of a Solis inverter, and you should be able to make at least one work. Current methods with varying success using the stick itself include re-directing the ‘server A/B’ output or using the stick internal Modbus server.

All very much dependent on which model of Solis inverter (hybrid models are very different)
which stick type (LAN / WiFi are very different) and which version (hardware and firmware vary considerably - by model, age, and country location where sold).

First you need to get at the stick internal web setting page, which is at stick IP address port 80, and by default admin/admin. Who first setup your stick, you or an installer? Has your installer changed the stick account settings I wonder? Solis seem to encourage installers to set up the stick so that they also have access for monitoring customer’s systems (something I avoided letting my installer do by setting the stick and cloud account myself).

Which WiFi stick model do you have - the latest Gen3 with the external lights and reset button?
Is your Solis cloud account working OK with updates from the stick every five minutes?
Can you see your stick on your cloud account (which should show you your stick serial number)?

1 Like

I have the S6-GR1P3.6K and a Wi-Fi data logging stick. I can use their cloud app and view basic data.

The dongle is S3-wifi-ST. Yes the interval 5 mins ok, wondering if there is more to glean from it.

The cloud has the data from the stick and this can be accessed by an API. The data there is updated every 5 mins.

The inverter has all the data, and with a working approach, can provide data on a more frequent basis.

Modes of access into the stick include scraping the status page (limit info), listening to the server A/B, and accessing the internal server via Modbus.

This is the latest WiFi dongle. I don’t have any experience with this. However, as a first step access into the stick settings page will be required.

It may well be that the S3-WiFi-ST does not have a settings page.

Thanks @Biscuit the installer fella must have changed the default creds. I suppose I could ask them to see what that is.

I am happy to use some python or other alternative hacks, but dont fancy messing with the RS232 wired option if I dont have to.

Thought I’d report back given I have everything working now on my hybrid Solis inverter (no battery or data stick of any kind yet):

The box was installed by my solar installers, they had centred the energy meter with some spacers which I removed to add the PW11 Wi-Fi to modbus bridge in. It’s the high voltage one meaning it doesn’t need a separate DC power supply, just wired into the same 6A circuit powering the meter. (The meter installed there by the way has a CT clamp on my home’s grid connection and uses some CAN or modbus protocol to deliver that measurement (grid export/import) to the Solis inverter)

I configured the PW11 - note, DHCP wasn’t working reliably on my network and every hour the PW11 kept getting assigned a different IP address, so I configured a static one - and away we went.

(Ignore the kW scale, I’ve just changed it to kW but this is displaying an older day that was measured in W)

HA is now querying the addresses I need successfully - I might move it to NodeRED once I start writing to the registers (I’ve done this for my underfloor heating Modbus TCP) but we’ll see when the battery arrives.

Thanks all for the help @Biscuit and others.

admin: your wifi password

the one which goes with your ssid.

But dont get excited. You still cant access server b.

Tony

1 Like

@sticilface I would be very interested to see your node-red flows please, I’ve just purchased one of these bridges and am about to start down this rabbit hole.

edit: nevermind, I found your comment with the flow.

Thanks

This was just posted on a different thread on GitHub, and has worked for me:

I am now setup to get the inverter data via modbus either by TCP ethernet or serial. I have tried several integrations but keep failing. Solarman since the recent outage, and TCP or serial since the modbus registers seem to be at odds with my UK inverter.

I have asked solis for the correct RS485_MODBUS Communication Protocol for my UK inverter.

Is anyone able to confirm that I will need a protocol relevant to my 3.6K inverter in the UK? or am I, as usual, missing some trees in a very dark wood?

On a positive note my solar array performs as expected in decent weather, I am signed up with Octopus, I charge my battery cheaply every night and my electricity bills are now negligible.

Tony

Hi Tony
Can I ask which Solis Inverter family are you using?

I am currently trying to get RS485 Modbus working on an S6 GR1P 3.6k and so far, after a huge number of hours of investigation I am seeing some really weird comms problems which appear to relate to an input hardware quirk, or logic levels or critical bias resistor values or my inverter has a fault!

My S6 comms works happily with a Mk3 Wifi Stick to Solis Cloud, but using a direct 485 connection to either an Arduino data acquisition system or to a laptop ( with a USB-RS485 adapter and running Radzio Modbus Master Simulator etc) fails to respond unless I fiddle around with pull up and down resistors. The same comms ‘masters’ devices happily connect to a Solis 4G mini and OB115 power meter. I have a lot of experience of using Modbus on Solis 4Gs and they are bomb proof! Currently I can simply move the comms connector to a Solis 4G and it replies to a request (function 04 Input Read, Register 35000, 1 reg location, Slave address 01, 9600B 8 bit 1 stop No Parity) - this is the very first command issued from a Wifi Stick).

I am making some progress BUT I am concluding that either the S6 has a very peculiar / non standard comms input issue, or a HW/SW bug, or my particular Inverter has a fault. Scope signal waveforms are very different and look wrong compared to when connected to a 4G. I have a ticket with Solis support but response is slow. So far I ve only found evidence of people having comms problems on the S6.

It would be really good to know:-

HAS ANYONE GOT A DIRECT RS485 MODBUS CONNECTION WORKING ON A SOLIS S6?

Are you able to scope signals on A and B both differentially and also wrt the S6 0V? At power up with no other connections I see 3.3V on the A line wrt the 0V pin and 0V on B (appears to be Hi Z floating around ground). The differential waveforms may look like they meet the RS485 +200 and -200mV logic thresholds but when measured single ended relative to the S6 0V it can look like inputs are becoming clamped or distorted.

Cheers
Steve

Hi Steve

Mines a 3.6k hybrid inverter.

I have followed a lot of advice from @Biscuit here and elsewhere and will be rewiring my inverter to modbus/ethernet connector with a terminating resistor.

Unlike you I know little about modbus, but will persist until I have a stable link between my inverter and home assistant.

Tony

This did it for me. Old wifi stick, no modification. Scan interval 60 sec by default.
Now I have both, Web and local solution. Coming days I will test if I get data when there is no solis - cloud connection.

Solved ?

1 Like

Hi All.

I have 5KW Solis Hybrid. LAN stick also.

I’ve been trying to integrate with Victor’s VRM via their colour controller.

Far better data insight and free!

I put a T I to the cantus cable to the batteries and this worked. By Victron clearly shows all the needed data of the batteries. (Pylontech)

Where I’m falling down is my AC side. I don’t really want to spend hundreds on additional sensors.

I was hoping I could get the victron to fetch data via modbus. Apparently works with standard solar, but not apparent with the hybrid. Has anyone had any luck with this integration?

It’s almost like MODBUS is not working on the stick.

On version 2022xxx firmware. The first firmware they sent bricked my stick. Which solis sent me a free replacement.

Any tricks appreciated.

Hi @honikos, can you share your configuration for that integration please? I’ve got the same setup (40… WiFi stick) and tried setting up that integration but all sensors kept showing Unavailable.

I also tried the Omnik integration with HTML scraping which also works reasonably well, except the total production is reported in whole kWhs only.

I feel your frustration. I have a Solis S6-GR1P(2.5-6)K inverter and tried the Solarman integration in Hacs. But it failed so far, even with a custum library.
Anyways, I wanted to share this issue with you for doc: SN 40..... and old WIFI Stick works also. Solis Inverter RHI-3P K-HVES-5G · Issue #121 · StephanJoubert/home_assistant_solarman · GitHub
were Honikos sen me some pointers. Maybe it’s of any use for you. I didn’t have time to figure it out yet. But seems he has it working.

same here, unavailable, did you get any further?

I gave an instruction on GitHub:

I hope it works for you.

Maybe this small python script is the door opener (enables the wifi - logger to give answers from the modbus requests) ?