mirror of
https://github.com/alexhopeoconnor/SunGather.git
synced 2026-10-14 23:21:30 +10:00
283 lines
11 KiB
Markdown
283 lines
11 KiB
Markdown
<div id="top"></div>
|
|
|
|
[![Contributors][contributors-shield]][contributors-url]
|
|
[![Forks][forks-shield]][forks-url]
|
|
[![Stargazers][stars-shield]][stars-url]
|
|
[![Issues][issues-shield]][issues-url]
|
|
[![GPL3 License][license-shield]][license-url]
|
|
|
|
<br />
|
|
<div align="center">
|
|
|
|
<h2 align="center">SunGather</h3>
|
|
|
|
<p align="center">
|
|
Collect data from Sungrow Inverters using ModbusTcpClient, <a href="https://github.com/rpvelloso/Sungrow-Modbus">SungrowModbusTcpClient</a> or <a href="https://github.com/bohdan-s/SungrowModbusWebClient">SungrowModbusWebClient</a> and export to various locations.
|
|
<br />
|
|
<br />
|
|
<a href="https://github.com/bohdan-s/SunGather/issues">Report Bug</a>
|
|
·
|
|
<a href="https://github.com/bohdan-s/SunGather/issues">Request Feature</a>
|
|
</p>
|
|
</div>
|
|
|
|
<!-- ABOUT THE PROJECT -->
|
|
## About The Project
|
|
Access ModBus data from almost any network connected Sungow Inverter.
|
|
|
|
On first connection the tool will query your inverter, retrieve the model and return the correct registers for your device. No more searching registers or creating model files.
|
|
|
|
Register information based on official documentation: <a href="https://github.com/bohdan-s/Sungrow-Inverter/blob/main/Modbus%20Information/Communication%20Protocol%20of%20PV%20Grid-Connected%20String%20Inverters_V1.1.37_EN.pdf">Communication Protocol of PV Grid-Connected String Inverters</a> and <a hreh="https://github.com/bohdan-s/Sungrow-Inverter/blob/main/Modbus%20Information/communication-protocol-of-residential-hybrid-inverterv1.0.20-1.pdf">Communication Protocol of Residential Hybrid Inverters</a>
|
|
|
|
Has multiple export locations out of the box:
|
|
* Console - Log directly to screen
|
|
* MQTT - Load into MQTT, and optionally Home Assistance Discovery
|
|
* PVOutput - Load into PVOutput.org
|
|
* Simple webserver showing collected data
|
|
* and more coming....
|
|
|
|
I have borrowed HEAVILY from the following projects, THANK YOU
|
|
* [solariot](https://github.com/meltaxa/solariot)
|
|
* [modbus4mqtt](https://github.com/tjhowse/modbus4mqtt)
|
|
* [ModbusTCP2MQTT](https://github.com/TenySmart/ModbusTCP2MQTT)
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
## TO DO
|
|
* Better Home Assistant Support
|
|
* Prometheus / Grafana support
|
|
|
|
|
|
## Updates
|
|
**0.1.1**
|
|
* Added docker image
|
|
* Added simple http web server
|
|
* Improved recovery when errors (See: SungrowModbusWebClient 0.2.6)
|
|
|
|
**0.1.0**
|
|
Initial build
|
|
|
|
### Built With
|
|
|
|
* [Python3](https://www.python.org/)
|
|
|
|
### Requires
|
|
* [paho-mqtt>=1.5.1](https://pypi.org/project/paho-mqtt/)
|
|
* [pymodbus>=2.4.0](https://pypi.org/project/pymodbus/)
|
|
* [SungrowModbusTcpClient>=0.1.6](https://pypi.org/project/SungrowModbusTcpClient/)
|
|
* [SungrowModbusWebClient>=0.2.6](https://pypi.org/project/SungrowModbusWebClient/)
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
<!-- GETTING STARTED -->
|
|
## Getting Started
|
|
# Local
|
|
```sh
|
|
git clone https://github.com/bohdan-s/SunGather.git
|
|
cd SunGather
|
|
pip3 install --upgrade -r requirements.txt
|
|
```
|
|
Copy config-example.py to config.py, change values as required (see comments in file)
|
|
```sh
|
|
copy config-example.py config.py
|
|
```
|
|
Run SunGather:
|
|
```sh
|
|
python3 sungather.py
|
|
```
|
|
|
|
# Docker
|
|
```sh
|
|
docker pull bohdans/sungather
|
|
docker run -v {path to}/config.yaml:/config/config.yaml -e TZ=Australia/Sydney --name sungather bohdans/sungather
|
|
```
|
|
or if using the http export
|
|
```sh
|
|
docker run -v {path to}/config.yaml:/config/config.yaml -e TZ=Australia/Sydney -p 8080:8080 --name sungather bohdans/sungather
|
|
```
|
|
Note: replace Australia/Sydney with relevant timezone
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
|
|
<!-- USAGE EXAMPLES -->
|
|
## Usage
|
|
|
|
See config-example.py it contains default options and comments.
|
|
|
|
If you want to use the new Energy section in Home Assistant, follow the Home Assistant setup below.
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
### Commandline Arguments
|
|
usage: python3 sungather.py [options]
|
|
|
|
Commandline arguments override any config file settings
|
|
**-c config.yaml** - Specify config file.
|
|
**-v 30** - Logging Level, 10 = Debug, 20 = Info, 30 = Warning (default), 40 = Error
|
|
**--runonce** - Run once then exit
|
|
**-h** - print this help message and exit (also --help)
|
|
|
|
Example:
|
|
```sh
|
|
python3 sungather.py -c /full/path/config.yaml
|
|
```
|
|
|
|
## Exports
|
|
|
|
A collection of exports are available:
|
|
|
|
* console: Output information to console, useful for troubleshooting
|
|
* http: Output to a simple website, default http://localhost:8080 or http://\<serverip\>:8080
|
|
* mqtt: Output to a pre-existing MQTT server, needed for Home Assistant integration
|
|
* pvoutput: Output to PVOutput.org, requires account and solar is set up on website first.
|
|
|
|
## Registers
|
|
|
|
This tool should be able to access most registers exposed.
|
|
Set the following in config.yaml under inverters section.
|
|
* level: 1 - This is the most useful data for day to day
|
|
* Level: 2 - This should be everything your inverter supports
|
|
* Level: 3 - This will try every register, you will get lots of 0/65535 responses for registers not supported.
|
|
|
|
* smart_meter: True - Set to true if you have a smart reader installed, this will return power usage at the meter box, without it you can not calculate house power usage.
|
|
|
|
### Useful Registers:
|
|
This is just a brief list of registers I have found useful
|
|
|
|
**daily_power_yields** - Total Power in kWh generated today
|
|
**total_power_yields** - Total Power in kWh generated since inverter install
|
|
**total_running_time** - Total Hours inverter has been powered on since install
|
|
**internal_temperature** - Internal temperature of the Inverter
|
|
**total_active_power** - Current power being generated by the inverter in Watts
|
|
**meter_power** - Power usage at the meter box, needs a smart meter installed. +ve means consuming from the grid, -ve means exporting to the grid
|
|
**load_power** - Power being consumed in total
|
|
**export_to_grid** - How much being currently exported to the grid. This is calculated from meter_power if -ve value, returned as a positive value
|
|
**import_from_grid** - How much being currently imported from grid. This is calculated from meter_power if +ve value
|
|
**timestamp** - Last time data was collected, based on Inverters clock by default
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
## Home Assistant setup
|
|
|
|
In the SunGather config.yaml you need to set the smart_meter if you have one;
|
|
|
|
```
|
|
smart_meter: True
|
|
```
|
|
|
|
HA sensors created by the MQTT auto-discovery;
|
|
```
|
|
sensor.inverter_active_power
|
|
sensor.inverter_daily_generation
|
|
sensor.inverter_export_to_grid
|
|
sensor.inverter_import_from_grid
|
|
sensor.inverter_load_power
|
|
sensor.inverter_meter_power
|
|
```
|
|
|
|
Put the following into your sensors.yaml
|
|
```
|
|
sensor:
|
|
- platform: integration
|
|
source: sensor.inverter_active_power
|
|
- platform: integration
|
|
source: sensor.inverter_export_to_grid
|
|
- platform: integration
|
|
source: sensor.inverter_import_from_grid
|
|
```
|
|
|
|
The additional sensors then setup in HA are the following with Wh unit of measurement for the Energy platform.
|
|
|
|
```
|
|
sensor.sensor_inverter_active_power_integral
|
|
sensor.sensor_inverter_export_to_grid_integral
|
|
sensor.sensor_inverter_import_from_grid_integral
|
|
```
|
|
|
|
You need to utilise the customize.yaml manual method to get some friendly names and icons. Add the following;
|
|
```
|
|
sensor.sensor_inverter_active_power_integral:
|
|
icon: mdi:solar-power
|
|
friendly_name: Solar Generation
|
|
sensor.sensor_inverter_export_to_grid_integral:
|
|
icon: mdi:transmission-tower-export
|
|
friendly_name: Grid Export
|
|
sensor.sensor_inverter_import_from_grid_integral:
|
|
icon: mdi:transmission-tower-import
|
|
friendly_name: Grid Import
|
|
```
|
|
Restart Home Assistant for the sensors.yaml and customize.yaml to be loaded.
|
|
Make sure SunGather is running, wait 5 minutes for initial data to populate.
|
|
Navigate to the Energy platform (Configuration > Energy). Add these sensors to the following areas:
|
|
|
|
Electricity Grid > Grid Import - sensor.sensor_inverter_import_from_grid_integral
|
|
Electricity Grid > Grid Export - sensor.sensor_inverter_export_to_grid_integral
|
|
Solar Panels > Solar Production - sensor.sensor_inverter_active_power_integral
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
## Tested
|
|
* SG7.0RT with WiNet-S Dongle
|
|
* SG10RT with WiNet-S Dongle and Ethernet (Credit: @rark-ha)
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
## Supported
|
|
### PV Grid-Connected String Inverters
|
|
SG30KTL, SG10KTL, SG12KTL, SG15KTL, SG20KTL, SG30KU, SG36KTL, SG36KU, SG40KTL, SG40KTL-M, SG50KTL-M, SG60KTL-M, SG60KU, SG30KTL-M, SG30KTL-M-V31, SG33KTL-M, SG36KTL-M, SG33K3J, SG49K5J, SG34KJ, LP_P34KSG, SG50KTL-M-20, SG60KTL, SG80KTL, SG80KTL-20, SG60KU-M, SG5KTL-MT, SG6KTL-MT, SG8KTL-M, SG10KTL-M, SG10KTL-MT, SG12KTL-M, SG15KTL-M, SG17KTL-M, SG20KTL-M, SG80KTL-M, SG111HV, SG125HV, SG125HV-20, SG30CX, SG33CX, SG36CX-US, SG40CX, SG50CX, SG60CX-US, SG110CX, SG250HX, SG250HX-US, SG100CX, SG100CX-JP, SG250HX-IN, SG25CX-SA, SG75CX, SG3.0RT, SG4.0RT, SG5.0RT, SG6.0RT, SG7.0RT, SG8.0RT, SG10RT, SG12RT, SG15RT, SG17RT, SG20RT
|
|
|
|
### PV Grid-Connected String Inverters Gen 2
|
|
SG5K-D, SG8K-D
|
|
|
|
### Residential Hybrid Inverters
|
|
SH5K-20, SH3K6, SH4K6, SH5K-V13, SH5K-30, SH3K6-30, SH4K6-30, SH5.0RS, SH3.6RS, SH4.6RS, SH6.0RS, SH10RT, SH8.0RT, SH6.0RT, SH5.0RT
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
|
|
## Building
|
|
```sh
|
|
docker build --no-cache --rm -t bohdans/sungather:latest -t bohdans/sungather:v<version> .
|
|
docker push bohdans/sungather:v<version>
|
|
docker push bohdans/sungather:latest
|
|
```
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
<!-- LICENSE -->
|
|
## License
|
|
|
|
Distributed under the GPL3 License. See `LICENSE.txt` for more information.
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
|
|
<!-- CONTACT -->
|
|
## Contact
|
|
|
|
Project Link: [https://github.com/bohdan-s/SungrowModbusWebClient](https://github.com/bohdan-s/SungrowModbusWebClient)
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
|
|
<!-- ACKNOWLEDGMENTS -->
|
|
## Acknowledgments
|
|
|
|
* [solariot](https://github.com/meltaxa/solariot)
|
|
* [modbus4mqtt](https://github.com/tjhowse/modbus4mqtt)
|
|
* [ModbusTCP2MQTT](https://github.com/TenySmart/ModbusTCP2MQTT)
|
|
|
|
<p align="right">(<a href="#top">back to top</a>)</p>
|
|
|
|
|
|
|
|
<!-- MARKDOWN LINKS & IMAGES -->
|
|
<!-- https://www.markdownguide.org/basic-syntax/#reference-style-links -->
|
|
[contributors-shield]: https://img.shields.io/github/contributors/bohdan-s/SunGather.svg?style=for-the-badge
|
|
[contributors-url]: https://github.com/bohdan-s/SunGather/graphs/contributors
|
|
[forks-shield]: https://img.shields.io/github/forks/bohdan-s/SunGather.svg?style=for-the-badge
|
|
[forks-url]: https://github.com/bohdan-s/SunGather/network/members
|
|
[stars-shield]: https://img.shields.io/github/stars/bohdan-s/SunGather.svg?style=for-the-badge
|
|
[stars-url]: https://github.com/bohdan-s/SunGather/stargazers
|
|
[issues-shield]: https://img.shields.io/github/issues/bohdan-s/SunGather.svg?style=for-the-badge
|
|
[issues-url]: https://github.com/bohdan-s/SunGather/issues
|
|
[license-shield]: https://img.shields.io/github/license/bohdan-s/SunGather.svg?style=for-the-badge
|
|
[license-url]: https://github.com/bohdan-s/SunGather/blob/main/LICENSE.txt |