Growatt inverter monitor
Growatt inverters can send performance and status metrics (log data) to the Growatt company servers. The inverters rely on either a ShineWIFI module or a ShineLAN box to relay the data to Growatt. The metrics stored on the Growatt servers then can be viewed on the Growatt website or using the ShinePhone mobile app.
The purpose of Grott is to read, parse and forward the raw metrics as they are sent to Growatt servers. This means other applications can consume the raw Growatt metrics without relying on the Growatt API and servers and without delay.
Grott can intercept the inverter metrics in two distinct modes:
Grott can forward the parsed metrics to:
The program is written in python and runs under Linux, Windows. It can run:
ghcr.io/rany2/grott:master
for this fork.And is tested, but not limited to, inverter models:
*Experimental in latest 2.6 branch
The Docker images are tested RPI(arm32), Ubuntu and Synology NAS
If Grott is running in proxy mode the ShineLAN box or ShineWIFI module needs to be configured to send data to Grott instead of the Growatt server API. Please see the Wiki for further information and installation details.
see issue https://github.com/johanmeijer/grott/issues/81/ https://github.com/johanmeijer/grott/issues/82/ https://github.com/johanmeijer/grott/issues/85: add invtype=tl3 in grott.ini [Generic] section (or use ginvtype="tl3" environmental variable e.g. for docker ledidome/grott:2.6.1f)
see issue https://github.com/johanmeijer/grott/issues/42/ https://github.com/johanmeijer/grott/issues/46: add invtype=spf in grott.ini [Generic] section (or use ginvtype=spf environmental variable e.g. for docker)
see issue https://github.com/johanmeijer/grott/issues/34: add invtype=sph in grott.ini [Generic] section (or use ginvtype=sph environmental variable e.g. for docker)
see issue https://github.com/johanmeijer/grott/issues/47: data will be processed automatically and send to MQTT, InfluxDB and PVOutput.org
see issue https://github.com/johanmeijer/grott/issues/79, pull request https://github.com/johanmeijer/grott/pull/91. More information can be found in the wiki: https://github.com/johanmeijer/grott/wiki/Extensions
Improved dynamic data processing and dynamic generation of output allowing:
see: https://github.com/johanmeijer/grott/wiki/Grott-advanced-(customize-behaviour) Added new outout values to mqtt and influxDB to support 3 phase grid connection (actual information on voltage, current and power delivered), total active worktime (in 0.5 S) and energy generation per PV string (day and total)
Improve environmental processing for mqtt/influxDB/growatt ip and port definitions
Introduce possibility to add extensions for additional (personalized) processing. ,br. see: https://github.com/johanmeijer/grott/wiki/Extensions
Direct output to inlfuxdb (v1 and v2) see: https://github.com/johanmeijer/grott/wiki/InfluxDB-Support
Mulitiple inverter (multiple system id's) support in PVOutput.org see: https://github.com/johanmeijer/grott/wiki/PVOutput.org-support
This file is deleted from the grott default directory to simply github installation (not overwrite your settings). It is advised to copy this file into the Grott default directory (and customise it) during first time installation
Limited .ini configuration needed (inverterid, encryption, offset and record layout is automaticially detected)
Specify pvoutput = True and apikey and systemid in .ini file to enable it.
2 docker containers are created (ghcr.io/rany2/grott:master
)
See issue 4 and 15 on how to use it (wiki will be updated soon)
If date/time is available in the data (inserted by the inverter) this will be used. In this way buffered records will be sent with the original creation time (in the past). If date/time is not available in the data record the server time will be used (as it was originally). In the mqtt message the key buffered is added (yes/no) which indicates that the message is from the buffer (past) or actual.
In sniff mode (default and compatable with older Grott versions) IP sniffering technology is used (based on: https://github.com/buckyroberts/Python-Packet-Sniffer). In this mode the data needs to be "re-routed" using linux IP forwarding on the device Grott is running. In this mode Grott "sees" every IP package and when a Growatt TCP packages passes it will be processed and a MQTT will be sent if inverter status information is detected.
With the proxy mode Grott is listening on a IP port (default 5279), processes the data (sent MQTT message) and routes the original packet to the growatt website.
The proxy mode functionality can be enabled by:
Pro / Cons:
sniff mode
+ Data will also be routed to the growatt server if Grott is not active
- All TCP packages (also not growatt) need to be processed by Grott.
This is more resource (processor) intesive and can have a negative impact on the device performance.
- Configure IP forwarding can be complex if a lot of other network routing is configured (e.g. by Docker).
- Sudo rights necessary to allow network sniffering
proxy mode:
+ Simple configuration
+ Only Growatt IP records are being analysed and processed by Grott
+ Less resource intensive
+ No sudo rights needed
+ Blocking / Filtering of commands from the outside is possible
- If Grott is not running no data will be sent to the Growatt server
The adivse is to use the proxy mode. This mode is strategic and will be used for enhanced features like automatic protocol detection and command blocking filtering. Sniff mode is not supported under Windows In sniff mode it is necessary to run Grott with SUDO rights.
The following modules are needed the use Grott: