Skip to content

Growatt Solar Inverter Modbus Data to MQTT Gateway

License

Notifications You must be signed in to change notification settings

smoerijf/growatt2mqtt

 
 

Repository files navigation

Growatt Solar Inverter Modbus Data to MQTT Gateway

This sketch runs on an ESP8266 and reads data from Growatt Solar Inverter over RS485 Modbus and publishes the data over MQTT. This code can be modified for any Gorwatt inverters, it has been tested on 1 phase, 2 string inverter version such as my MIN 3000 TL-XE, MIC 1500 TL-X, MIC 600 TL-X. You find attached to this repo the documentation I used to get data out of the inverter.

In addition it supports an AHT10, AHT15, AHT20 sensor family temperature sensor. A web interface for monitoring and controlling the inverter is also available.

Setup

This sketch publishes the following information from the holding registers that store device configuration data. More on these please refer to the modbus PDF documentation. This is sent once at startup: Enable state, SaftyFuncEn, Inverter Max output active power percent, Inverter max output reactive power percent, Normal work PV voltage, Firmware version, Control Firmware version, Serial number, Grid voltage low and high limit protect, Grid frequency low and high limit protect

The sketch also publishes the live statistics every 4 seconds. These are stored in the input registers: Inverter run state, Input power, PV1 and PV2 voltage current and power, Output power, Grid frequency, Energy generated today and total and these for both PV1 and PV2, 3 temperatures, Inverter output PF now, Derating mode, Fault and warning codes.

Install

Download this repository and build and flash your ESP. As I said the code works for 1 phase 2 string inverters, if you have a 3 phase inverter, or more strings the code will still work, but you will not see all the data in the device. For BOM and PCB scroll down for the relevant sections below. You need an Arduino IDE with ESP8266 configuration added. You need a few additional libraries (see below). And before you build open the settings.h and set your credentials. I think they are self explanatory. Compile and upload.

Wiring

For MIN solar inverters, you need to use the SYS COM port on the underside of the unit. The special connector is supplied with the inverter.

Port

Disassemble the connector (see instructions in the user manual) and use PIN3 and PIN4 for the modbus connection. It is PIN3 for RS485A1 and PIN4 for RS485B1. The pin numbers are clearly labeled on the connector inside. RS485A1 connects to the A pin (green screw terminal) on the RS485toTTL board and RS485B1 connects to B. I used a pair of thin wires from a CAT5 network cable.

Pins

Libraries

The following libraries are used beside the "Standard" ESP8266 libraries:

  • ModbusMaster by Doc Walker
  • ArduinoOTA
  • SoftwareSerial
  • AHT10 (Performance20: added support of AHT10 temperature+humidity sensor used in my hardware implementation)
  • ESPConnect

Wifi

If Wifi ist not configured, ESP starts in AP mode and a captive portal will be provided using http://192.168.4.1 as URL in your Browser. Connect to the AP (SSID: Growatt2MQTT, no passsword), select your SSID and enter password. SSID and Password will be stored in eeprom. To reset the Wifi credentials, change minimum one of the numbers in globals.h (EE_INIT_PATTERN), compile and load firmware again.

Topic

the topicroot can be changed in the settings.h file (default is growatt).

BREAKING CHANGE: now data and settings values are provided as individual topics (earlier versions provided the data as one json oject)

topic direction value function
topicroot/status publish send status of the ESP8266
topicroot/data publish send power state of the growatt as single data tracks
topicroot/error publish send error state
topicroot/connection publish send connection state of the ESP8266 uses the last will of the broker
topicroot/settings publish send settings from growatt as single data tracks
topicroot/write/getSettings subscribe ON initializes the resending of the settings
topicroot/write/setEnable subscribe ON/OFF enable/disable the output of the growatt
topicroot/write/setMaxOutput subscribe 0-100 set the output level of the growatt in percent
topicroot/write/setStartVoltage subscribe set the minimum voltage oft the MPPT tracker
topicroot/write/setModulPower subscribe HEX change the type of inverter. see chapter ModulPower command
topicroot/writeconfig/setStatusUpd subscribe 1- 65535 status meassage send period in sec
topicroot/writeconfig/setWifiCheck subscribe 1- 65535 check if wifi is connected, period in sec
topicroot/writeconfig/setModbusUpd subscribe 1- 65535 read register values via modbus, period in sec

ModulPower command

Read or change the type of inverter. e.g. MIC 600TL-X to MIC 1000TL-X.

Make sure that the data sheets of the two devices match, then it is probably the same hardware.

Value Powerstage
06 600W
07 750W
0A 1000W
0F 1500W
14 2000W
19 2500W
1E 3000W

Danger! Can lead to the destruction of the inverter.

In order to be able to execute SetModulPower, must be add #define useModulPower 1 in settings.h.

PCB

Board

I designed a custom PCB for this board (for a previous project), you can order if from here: https://www.pcbway.com/project/shareproject/ESP8266_Modbus_board.html

These are the components you need to build this. I purchased most of them a long time ago. I don't have the original listing, so I included a similar Aliexpress listing.

With these two components you can power the board using the micro USB on the Wemos D1 mini. My PCB includes components for mains supply:

For a different Modbus project, I have designed a slightly different board: Board2

The difference of this board:

  • Components for the mains input removed (Hi-Link power supply, fuse, varistor) and it has a +5V input from an external power course, or a footprint for a small DC-DC buck converter if powered from more 9-25V.
  • Added a specific pad for a neopixel modul for visual feedback.

Rest is the same.

To make this project work (modbus communnication and the web bits (MQTT, HTTP) you can use both of my version 1 (https://www.pcbway.com/project/shareproject/ESP8266_Modbus_board.html) and version 2 (https://www.pcbway.com/project/shareproject/Modbus_to_MQTT_board_version_2_338ed64e.html) modbus PCB modules as well. I explained the differences between them in the version 2 PCBWay project page and also in the video. Feel free to order and of the modules and the same code will work on both.

And if you want to wire them yourself, these are the connections:

Wemod D1 mini (or other ESP)            TTL to RS485
D0                                      DE
D7                                      RE
D5                                      RO
D6                                      DI
5V                                      VCC
G(GND)                                  GND

Wemod D1 mini (or other ESP)            AHT Temperature Sensor
D1                                      SCL
D2                                      SDA


Please adapt the Pin Definitions in the settings.h

Webinterface List of URLs

GET/POST URL Description
GET / Inverter Status and Settings
GET /modbus last readout of Modbus Input and Holding Registers
GET /api/limit/percent get active power Limit of Inverter
POST /api/limit/percent set active power Limit of Inverter to Values between 1 and 100 %
GET /api/onoff get Inverter power state (0-off, 1-on)
POST /api/onoff set Inverter power state (0-off, 1-on)

Web API Inverter Control Examples

In general: If you dont want to control your inverter through the webAPI, remove line #define ENABLE_WEBAPI_POST in settings.h

Command curl request
Limit Inverter to 50% curl -v http://<yourIPAdress>/api/limit/percent -d '50'
Switch Inverter on curl -v http://<yourIPAdress>/api/onoff -d '1'
Return Code Description
200 Operation successful
404 Wrong request i.e. parameter out of range or not provided
500 failed to set Value

Videos

I have a few videos covering the development of this project:

Prototype

Code almost complete

Solar Integration

About

Growatt Solar Inverter Modbus Data to MQTT Gateway

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 89.5%
  • C 6.5%
  • Svelte 1.2%
  • JavaScript 0.8%
  • Processing 0.8%
  • Ruby 0.7%
  • Other 0.5%