Programmatically read data from your Solar Inverter (Voltronic, Axpert, Mppsolar PIP, Voltacon, Effekta etc) and interface with Home Assistant via MQTT - Works with RS232 & USB!

Thank you @ned-kelly, I appreciate all the work you have done.

1 Like

@Lee1 - Could you post what the two firmware versions you’re running for the SCC and the Inverter also?

It would also be nice to work out what the additional 6 bytes at the end of QPIRI (000 1) refers to - Do you have multiple inverters in parallel perhaps?

Your QPIWS also is reporting some sort of error - compared to my 5KVA 48V PWM version

                Errors?
                ↓    ↓
PIP5048MK :     100001000000000000000000000000000000
5KVA 48V PWM :  00000000000000000000000000000000

Hello @ned-kelly, I will need to get myself some better measuring equipment. Unfortunately we are not allowed to purchase anything at the moment in our lockdown.

Yeah I have a small setup here as it is mostly just for handling the rolling blackouts we have here in South Africa (Loadshedding!!!).

Is the power factor of 0.8 already factored into readings with the 4048 units? Hopefully I will be able to get my USB-Serial adaptor back from work today so that I can sort out my firmware upgrade on the inverter and after that I will be able to start playing with reading the data from the BMS.

Hopefully I can use my friends Essential Serviced Contractors permit to purchase some items I need to finish things off.

I am very new to this but have done some programming here and there. So it is great to learn. I am also sure that if I look hard enough online I will find some people that have worked with the BMS unit I have.

Also I don’t know what you have running for a plex server but my unit only uses like 5% of the load on my system at home. Have around 24TB of usuable storage.

12 posts were split to a new topic: Solar Inverter with ICC software

Hi @ned-kelly,

Thanks for your advices but you see that most peoples who used these inverters is not experts in Linux. From this reasons your advices is not very helpfull.

I read for a 5x your readme file from there: https://github.com/ned-kelly/docker-voltronic-homeassistant/commit/e517950a8765d5d128b691c6283543f70fd5f227

but there is not writed very clear all steps and missing more informations…

About my private case understand from you that I can dezinstall watch tower but I must repair voltronic MQTT to be healthy.
Ok. Please tell me steps to "set your “ MQTT server’s IP/Host Name, Port, Credentials, HA topic, and name of the Inverter that you want displayed in Home Assistant "

I didn’t find it anywhere these steps…

Like I said above, and which you completely ignored, and I quote directly from the readme on Ned’s github

vi config/mqtt.json
1 Like

Hello Ned, my firmware versions are:

  1. Main CPU version: 71.80
  2. Secondary CPU version: 02.00
  3. Bluetooth version: 00.21
  4. SSC version: 01.10
  • From the manual I have: https://www.fve-mp.cz/data/blob/product-application_pdf-20190724092401-8519-pip-gk-mk-protocol.pdf last values are “Max. charging time in C.V. stage”, and “Operation Logic”

  • So far I’m using standalone (not parallel) mode but plan to install 2xPIP5048MK parallel version this summer so could share then.

  • But I have PIP5048GK model also so I’ll play with that today and will share later today.

  • Regarding warnings - first one is due to no PV I guess and second one is due to missing AC from DS (most of time inverter is not connected to outside electricity provider) I did a short test - connected AC and now also sun is shining so no errors anymore - please see below:

root@raspberrypi:/home/pi# docker exec -it voltronic-mqtt bash -c '/opt/inverter-cli/bin/inverter_poller -d -1'
Thu Apr 30 09:00:08 2020 INVERTER: Debug set
Thu Apr 30 09:00:09 2020 INVERTER: Current CRC: 49 C1
Thu Apr 30 09:00:09 2020 INVERTER: QMOD reply size (5 bytes)
Thu Apr 30 09:00:09 2020 INVERTER: QMOD: 5 bytes read: (B
Thu Apr 30 09:00:09 2020 INVERTER: QMOD query finished
Thu Apr 30 09:00:09 2020 INVERTER: Current CRC: B7 A9
Thu Apr 30 09:00:10 2020 INVERTER: QPIGS reply size (110 bytes)
Thu Apr 30 09:00:10 2020 INVERTER: QPIGS: 110 bytes read: (243.8 50.0 226.0 50.0 1830 1820 036 392 56.80 000 076 0028 0015 116.2 57.08 00020 00010110 00 00 00861 110
Thu Apr 30 09:00:10 2020 INVERTER: QPIGS query finished
Thu Apr 30 09:00:10 2020 INVERTER: Current CRC: F8 54
Thu Apr 30 09:00:10 2020 INVERTER: QPIRI reply size (104 bytes)
Thu Apr 30 09:00:10 2020 INVERTER: QPIRI: 104 bytes read: (230.0 21.7 230.0 50.0 21.7 5000 5000 48.0 50.0 49.0 57.2 57.2 2 60 090 1 2 3 9 01 0 0 51.0 0 1 000 1
Thu Apr 30 09:00:10 2020 INVERTER: QPIRI query finished
Thu Apr 30 09:00:10 2020 INVERTER: Current CRC: B4 DA
Thu Apr 30 09:00:10 2020 INVERTER: QPIWS reply size (40 bytes)
Thu Apr 30 09:00:10 2020 INVERTER: QPIWS: 40 bytes read: (000000000000000000000000000000000000
Thu Apr 30 09:00:10 2020 INVERTER: QPIWS query finished
INVERTER: ampfactor from config is 1.00
INVERTER: wattfactor from config is 1.01
{
  "Inverter_mode":4,
  "AC_grid_voltage":243.8,
  "AC_grid_frequency":50.0,
  "AC_out_voltage":226.0,
  "AC_out_frequency":50.0,
  "PV_in_voltage":116.2,
  "PV_in_current":15.0,
  "PV_in_watts":864.8,
  "PV_in_watthour":57.6508,
  "SCC_voltage":57.0800,
  "Load_pct":36,
  "Load_watt":1820,
  "Load_watthour":121.3333,
  "Load_va":1830,
  "Bus_voltage":392,
  "Heatsink_temperature":28,
  "Battery_capacity":76,
  "Battery_voltage":56.80,
  "Battery_charge_current":0,
  "Battery_discharge_current":20,
  "Load_status_on":1,
  "SCC_charge_on":1,
  "AC_charge_on":0,
  "Battery_recharge_voltage":50.0,
  "Battery_under_voltage":49.0,
  "Battery_bulk_voltage":57.2,
  "Battery_float_voltage":57.2,
  "Max_grid_charge_current":60,
  "Max_charge_current":90,
  "Out_source_priority":2,
  "Charger_source_priority":3,
  "Battery_redischarge_voltage":0.0,
  "Warnings":"000000000000000000000000000000000000"
}
Thu Apr 30 09:00:10 2020 INVERTER: All queries complete, exiting loop.
1 Like

Hello

So finally I added now also PIP5048GK inverter from same company MPP Solar
Firmware versions:

  1. Main CPU version: 20.66
  2. Secondary CPU version: 01.21
  3. Secondary Bluetooth version: 00.21

Correct buffer setup:

qpiri=98
qpiws=40
qmod=5
qpigs=110

log - just for the record:

root@raspberrypi:/opt/ha-inverter-mqtt-agent_GK# docker exec -it voltronic-mqtt_GK bash -c '/opt/inverter-cli/bin/inverter_poller -d -1'
Thu Apr 30 13:52:20 2020 INVERTER: Debug set
Thu Apr 30 13:52:21 2020 INVERTER: Current CRC: 49 C1
Thu Apr 30 13:52:21 2020 INVERTER: QMOD reply size (5 bytes)
Thu Apr 30 13:52:21 2020 INVERTER: QMOD: 5 bytes read: (B
Thu Apr 30 13:52:21 2020 INVERTER: QMOD query finished
Thu Apr 30 13:52:22 2020 INVERTER: Current CRC: B7 A9
Thu Apr 30 13:52:22 2020 INVERTER: QPIGS reply size (110 bytes)
Thu Apr 30 13:52:22 2020 INVERTER: QPIGS: 110 bytes read: (000.0 00.0 239.7 50.0 0072 0025 001 450 57.20 000 090 0019 00.0 378.8 00.00 00001 00010110 00 00 00004 110
Thu Apr 30 13:52:22 2020 INVERTER: QPIGS query finished
Thu Apr 30 13:52:22 2020 INVERTER: Current CRC: F8 54
Thu Apr 30 13:52:23 2020 INVERTER: QPIRI reply size (98 bytes)
Thu Apr 30 13:52:23 2020 INVERTER: QPIRI: 98 bytes read: (240.0 21.6 240.0 50.0 21.6 5200 5200 48.0 50.0 48.0 57.0 57.0 2 02 080 0 2 3 1 01 0 0 51.0 0 1
Thu Apr 30 13:52:23 2020 INVERTER: QPIRI query finished
Thu Apr 30 13:52:23 2020 INVERTER: Current CRC: B4 DA
Thu Apr 30 13:52:23 2020 INVERTER: QPIWS reply size (40 bytes)
Thu Apr 30 13:52:23 2020 INVERTER: QPIWS: 40 bytes read: (000001000000000000000000000000000000
Thu Apr 30 13:52:23 2020 INVERTER: QPIWS query finished
INVERTER: ampfactor from config is 1.00
INVERTER: wattfactor from config is 1.01
{
  "Inverter_mode":4,
  "AC_grid_voltage":0.0,
  "AC_grid_frequency":0.0,
  "AC_out_voltage":239.7,
  "AC_out_frequency":50.0,
  "PV_in_voltage":378.8,
  "PV_in_current":0.0,
  "PV_in_watts":0.0,
  "PV_in_watthour":0.0000,
  "SCC_voltage":0.0000,
  "Load_pct":1,
  "Load_watt":25,
  "Load_watthour":0.8333,
  "Load_va":72,
  "Bus_voltage":450,
  "Heatsink_temperature":19,
  "Battery_capacity":90,
  "Battery_voltage":57.20,
  "Battery_charge_current":0,
  "Battery_discharge_current":1,
  "Load_status_on":1,
  "SCC_charge_on":1,
  "AC_charge_on":0,
  "Battery_recharge_voltage":50.0,
  "Battery_under_voltage":48.0,
  "Battery_bulk_voltage":57.0,
  "Battery_float_voltage":57.0,
  "Max_grid_charge_current":2,
  "Max_charge_current":80,
  "Out_source_priority":2,
  "Charger_source_priority":3,
  "Battery_redischarge_voltage":0.0,
  "Warnings":"000001000000000000000000000000000000"
}
Thu Apr 30 13:52:24 2020 INVERTER: All queries complete, exiting loop.
1 Like

@nickrout

I said two days ago that I found the parameters there but I can not make changes or I do not know how…
As you will see in the image, this is READ ONLY…

See picture attached.

Mqtt config failed

Hello @tcapanna
I’m fighting now with the same issue to make responses from inverters more faster in order to use it in home assistant automation.
Do you have any progress please? If it’s possible can you please share your corrected sources so I could may be proceed with optimization?
Thanks in Advance

settings for single or parallel mpp solar 5048mg

  1. Main CPU version: 71.71 & 71.80 (works on both firmwares)
  2. Secondary CPU version: n/a

Correct buffer setup:

qpiri=102
qpiws=36
qmod=5
qpigs=110

log - just for the record:

Thu Apr 30 17:40:32 2020 INVERTER: Debug set
Thu Apr 30 17:40:32 2020 INVERTER: Current CRC: 49 C1
Thu Apr 30 17:40:32 2020 INVERTER: QMOD reply size (5 bytes)
Thu Apr 30 17:40:32 2020 INVERTER: QMOD: 5 bytes read: (B
Thu Apr 30 17:40:32 2020 INVERTER: QMOD query finished
Thu Apr 30 17:40:32 2020 INVERTER: Current CRC: B7 A9
Thu Apr 30 17:40:33 2020 INVERTER: QPIGS reply size (110 bytes)
Thu Apr 30 17:40:33 2020 INVERTER: QPIGS: 110 bytes read: (243.9 50.0 230.0 50.0 0184 0129 003 364 52.00 000 056 0031 0000 211.3 00.00 00001 00010010 00 00 00131 010
Thu Apr 30 17:40:33 2020 INVERTER: QPIGS query finished
Thu Apr 30 17:40:33 2020 INVERTER: Current CRC: F8 54
Thu Apr 30 17:40:33 2020 INVERTER: QPIRI reply size (102 bytes)
Thu Apr 30 17:40:33 2020 INVERTER: QPIRI: 102 bytes read: (230.0 21.7 230.0 50.0 21.7 5000 5000 48.0 49.0 46.2 57.4 57.3 2 60 060 1 2 1 9 01 0 1 54.0 0 0 000
Thu Apr 30 17:40:33 2020 INVERTER: QPIRI query finished
Thu Apr 30 17:40:34 2020 INVERTER: Current CRC: B4 DA
Thu Apr 30 17:40:34 2020 INVERTER: QPIWS reply size (36 bytes)
Thu Apr 30 17:40:34 2020 INVERTER: QPIWS: 36 bytes read: (00000000000000000000000000000000
Thu Apr 30 17:40:34 2020 INVERTER: QPIWS query finished
INVERTER: ampfactor from config is 1.00
INVERTER: wattfactor from config is 1.01
{
  "Inverter_mode":4,
  "AC_grid_voltage":243.9,
  "AC_grid_frequency":50.0,
  "AC_out_voltage":230.0,
  "AC_out_frequency":50.0,
  "PV_in_voltage":211.3,
  "PV_in_current":0.0,
  "PV_in_watts":0.0,
  "PV_in_watthour":0.0000,
  "SCC_voltage":0.0000,
  "Load_pct":3,
  "Load_watt":129,
  "Load_watthour":4.3000,
  "Load_va":184,
  "Bus_voltage":364,
  "Heatsink_temperature":31,
  "Battery_capacity":56,
  "Battery_voltage":52.00,
  "Battery_charge_current":0,
  "Battery_discharge_current":1,
  "Load_status_on":1,
  "SCC_charge_on":1,
  "AC_charge_on":0,
  "Battery_recharge_voltage":49.0,
  "Battery_under_voltage":46.2,
  "Battery_bulk_voltage":57.4,
  "Battery_float_voltage":57.3,
  "Max_grid_charge_current":60,
  "Max_charge_current":60,
  "Out_source_priority":2,
  "Charger_source_priority":1,
  "Battery_redischarge_voltage":2491115406634245724841431969824768.0,
  "Warnings":"00000000000000000000000000000000"
2 Likes

Hi @gry2000, firstly regarding your comment about many people using these inverters who are not competent with Linux - If you’re not planning on integrating this with Home Assistant (which is the whole point of the project on Github & this forum thread that you’re posting on) I suggest you just use the Windows Watchpower app - this is what such “non competent linux users” do - You may also find the ASN forums more suitable for your general (non home-assistant related) questions.

Next (and to answer your question) as @nickrout stated - and the readme states, you need to edit the config/mqtt.json file & configure MQTT to suit your environment – If you’re having issues writing/saving the file perhaps you are trying to edit it using your pi’s default (non root) user or a user account that does not have permissions to modify the file - you could try and sudo nano config/mqtt.json - Short of that, you might be best posting a question (such as how to use Vim or Nano what Sudo does etc) on one of the Stackexchange sites where they generally cover these ‘how to use linux’ topics…

Best of luck :slight_smile:

I think the next thing we need to do in this project is make some sort of ‘warning’ parser and then return an array of errors and error codes? (if any) so HA can display them in the UI rather than a long string of numbers…

Happy to accept PR’s :wink:

2 Likes

Haha problem is not the load (I also only sit around 25-30% on Avg) - it’s running the load for 12-13hrs sustained without sun overnight… I’m running a Dual Xeon CPU’s Server setup (so it’s pretty power hungry) with 100TB of disk (There’s 3 Synology Nas’s) :smiley: - Great for transcoding 10+ streams at once and recording local TV, but not exactly lean on the juice … Yes pretty serious setup - It sits in it’s own ‘shed’ out the back of the house - unfortunately power is expensive in AU hence the need for good solar - it’s like $0.22-25c per kw/hr.

1 Like

Yes definitely it will be good to have warning parser. Many thanks for all your work.

Hello @ned-kelly,

No idea why you need so many streams of so much content. Your profile picture appears to indicate you are active and enjoy wakeboarding. I enjoy wakeboarding too. I have a nice mini-itx Lian-Li chassis with 10 hot-swap drive bays and inside I have ASUS Strix B450 with a Ryzan 3 2200g, 16GB ram, 256gb SSD for OS, GTX1060 ITX, RocketRaid 2722 (on a m.2 pci-e adaptor) and a collection of 3 TB WD RED, 4TB RED PRO and some 5TB drive as well. Can handle like 4 to 6 transcodes pretty easily. Will upgrade it to a Ryzen 5 or 7 at some point. Unfortunately this lockdown in South Africa has killed our economy and destroyed businesses. I have been lucky to still have some salary and a job (all be it 50% of each).

On to a question, which files would I need to go into to edit the json discovery config message to include a better friendly name? Or is it best to do the friendly name change from a customize.yaml file in HA?

Do you know of anyone that has done some work with RS485 to MQTT for integrating a purchased BMS to HA? I am seriously struggling to even locate the protocol required to communicate with the BMS. Hoping my supplier actually provides me with some usable information.

Last one is trying to understand the Grafan, HA, InlfuxDB and MariaDB connections. I see that InfluxDB is more meant as a supplement to the HA environment as it does a good job for recording timestamped events but it is not a replacement for the likes of MariaDB (MySQL). Do you use the embedded HA database and have InfluxDB for recording the data of the power system and all other HA data only in the embedded database? Just curious what is the best route to move forward as I need to learn how to do everything from scratch, so having the optimum route forward is useful.

Also are you using the MQTT broker via to Supervisor or have you installed the broker on a seperate machine?

Again thank you for the help and efforts. That goes to all the contributors.

Regards

Wazza

Hello @ned-kelly
This is regarding speed performance improvement.

I just put some additional lprintf comments to main() function in order to identify speed bottleneck and it seems to me that main huge delay is introduced by shell command invoke itself. For example command:

  • docker exec -it voltronic-mqtt bash -c ‘/opt/inverter-cli/bin/inverter_poller -1’
    will introduce 5s till I could see first lprintf message which is placed at the beginning of main() function - right after the curly bracket. All next code output is then provided within 2 seconds including qpigs request to inverter

  • docker exec -it voltronic-mqtt bash -c ‘/opt/inverter-cli/bin/inverter_poller -2’
    This command will invoke inverter_poller just once and then repeatedly (inside the while()) call qpigs to inverter. And this is pretty fast! ~ 2s.

Conclusion/question:

  • I have an idea to implement mqtt commands directly in c++ sources and avoid any other shell scripts except entrypoint.sh of course
  • is there some reason why this solution is based on combination of C++ & shell please? (I hope that reason is that c++ sources were just more-less reused from manio’s skymax)

I’m now going to study how to compile some linux mqtt c++ library and how to compile, include to docker and use. I have no idea/experiences so far if there is some showstopper hence I’m asking here.
additional notes:

  • I’m using Raspberry pi1 model B+
  • in the test above I’m asking inverter just qpigs

Thanks for any comment / advice.

Hello @ned-kelly

First of all many thanks for your excellent work!

I managed to get all of my Axpert duo 3KVA / 24v inverter data in my home assistant except for the topic “Battery_redischarge_voltage”. Response of inverter_poller is below.

Fri May 1 19:41:34 2020 INVERTER: Debug set
Fri May 1 19:41:34 2020 INVERTER: Current CRC: 49 C1
Fri May 1 19:41:34 2020 INVERTER: QMOD reply size (5 bytes)
Fri May 1 19:41:34 2020 INVERTER: QMOD: 5 bytes read: (L
Fri May 1 19:41:34 2020 INVERTER: QMOD query finished
Fri May 1 19:41:34 2020 INVERTER: Current CRC: B7 A9
Fri May 1 19:41:34 2020 INVERTER: QPIGS reply size (110 bytes)
Fri May 1 19:41:34 2020 INVERTER: QPIGS: 110 bytes read: (234.9 50.0 234.9 50.0 0399 0341 014 344 23.92 000 067 0041 0000 000.0 00.00 00000 10010000 00 00 00000 010
Fri May 1 19:41:34 2020 INVERTER: QPIGS query finished
Fri May 1 19:41:34 2020 INVERTER: Current CRC: F8 54
Fri May 1 19:41:35 2020 INVERTER: QPIRI reply size (102 bytes)
Fri May 1 19:41:35 2020 INVERTER: QPIRI: 102 bytes read: (230.0 13.0 230.0 50.0 13.0 3000 2400 24.0 22.5 21.0 30.6 29.2 2 30 040 0 2 3 0 11 0 0 24.5 0 1 080
Fri May 1 19:41:35 2020 INVERTER: QPIRI query finished
Fri May 1 19:41:35 2020 INVERTER: Current CRC: B4 DA
Fri May 1 19:41:35 2020 INVERTER: QPIWS reply size (36 bytes)
Fri May 1 19:41:35 2020 INVERTER: QPIWS: incorrect start/stop bytes. Buffer: (0000000000000000000000000000000000B0 24.0 22.5 21.0 30.6 29.2 2 30 040 0 2 3 0 11 0 0 24.5 0 1 080
INVERTER: ampfactor from config is 1.00
INVERTER: wattfactor from config is 1.01
{
“Inverter_mode”:3,
“AC_grid_voltage”:234.9,
“AC_grid_frequency”:50.0,
“AC_out_voltage”:234.9,
“AC_out_frequency”:50.0,
“PV_in_voltage”:0.0,
“PV_in_current”:0.0,
“PV_in_watts”:0.0,
“PV_in_watthour”:0.0000,
“SCC_voltage”:0.0000,
“Load_pct”:14,
“Load_watt”:341,
“Load_watthour”:11.3667,
“Load_va”:399,
“Bus_voltage”:344,
“Heatsink_temperature”:41,
“Battery_capacity”:67,
“Battery_voltage”:23.92,
“Battery_charge_current”:0,
“Battery_discharge_current”:0,
“Load_status_on”:1,
“SCC_charge_on”:0,
“AC_charge_on”:0,
“Battery_recharge_voltage”:22.5,
“Battery_under_voltage”:21.0,
“Battery_bulk_voltage”:30.6,
“Battery_float_voltage”:29.2,
“Max_grid_charge_current”:30,
“Max_charge_current”:40,
“Out_source_priority”:2,
“Charger_source_priority”:3,
“Battery_redischarge_voltage”:2508860039157362365701836016451584.0,
“Warnings”:""

As you can see, “QPIWS: incorrect start/stop bytes…” appears in the result along with battery discharge voltage some junk value. Except for QPIRI all values are default. QPIRI had to be 102 to get it working. I tried to publish payload “26” to battery_redischarge_voltage_conf without success. Any suggestion?

Anyone else experience this issue?

Another request to fellow members is, if anyone willing to share Grafana dashboard exports for this project, please let me know. I have some basic ones going but not quite satisfied.

Regards

Hello People,

Does anyone else have any issues that when you restart HA you lose your connection to the voltronic MQTT? Is there something I should do like adding a scripti or service call on HA startup?

I currently have to go to the MQTT integration after restart and select update for it to recognise all the sensors. Then after 30 seconds the data is back again.

Regards

Wazza

Hello @rejishkr

I guess that you have to correct qpiws value to see all correctly. But as I have no 3kva inverter I can just advise you to try value 38. (if still *incorrect start/stop bytes* issue observed, please try values 40 and 39). in case you will make it working then it will be good to share your exact

- inverter firmware versions, 
- final correct buffers values and 
- *inverter_poller* log 

(for others if @ned-kelly will agree)

1 Like