Wil je graag makkelijk lokaal je growatt omvormer uitlezen en vind je niet erg dat growatt jouw data ook krijgt?
Check Grott van @Johan_meijer op https://github.com/johanmeijer/grott inclusief de bijbehorende wiki: https://github.com/johanmeijer/grott/wiki
Jeltel in "Growatt Omvormer uitlezen via proxy"
Bekijk zelf welke je fijn vind
Check Grott van @Johan_meijer op https://github.com/johanmeijer/grott inclusief de bijbehorende wiki: https://github.com/johanmeijer/grott/wiki
Jeltel in "Growatt Omvormer uitlezen via proxy"
Bekijk zelf welke je fijn vind

Waarschuwing:
het lijkt erop alsof Growatt een nieuwe firmware langzaam uitrolt naar de inverters. Sinds zojuist krijg ik geen berichten meer door die het script kan verwerken. Helaas is dat bij 2 van de 3 systemen van
GAEvakYD ook zo. Indien mogelijk wordt het script aangepast.
Tussen door de afgelopen dagen een proxy opgezet om mijn Growatt omvormer lokaal uit te lezen.
Grootste werk zit in de code van @GAEvakYD Hulde
Zijn code staat op github: https://github.com/RualdOrdelman/growatt-proxy-and-upload
Ik heb het zelf op mijn nuc gezet waar ubuntu 18.04 op staat en ook Home assistant op is geïnstalleerd. Het was niet heel makkelijk, maar ik ben eruit gekomen en nu wordt de data via MQTT naar Home Assistant gestuurd. Die stuurt het vervolgens weer op naar PV Output. Via nodered doe ik dat, maar via een Shell_command en een automation kan het ook.
Wat heb je nodig
Een server waar linux opdraait en je de volgende software hebt geinstalleerd:
* Perl (installeren met sudo apt-get install perl)
* YAML::XS (installeren met 'cpan' en dan install YAML::XS)
* Data::Hexify (installeren met 'cpan' en dan install Data::Hexify)
* PHP-cli (installeren met sudo apt-get install php7.2-cli sudo apt-get install -y php-yaml)
Mocht je tegen problemen aanlopen bij het installeren van de perl modules, doe dat met de user waarmee je het script gaat draaien (ik doe het niet met root). Zie je deze error:
code:
1 2 3 4 5 6 7 8 cpan[6]> install YAML::XS Running install for module 'YAML::XS' TINITA/YAML-LibYAML-0.81.tar.gz Has already been unwrapped into directory /root/.cpan/build/YAML-LibYAML-0.81-1 TINITA/YAML-LibYAML-0.81.tar.gz Has already been prepared TINITA/YAML-LibYAML-0.81.tar.gz Could not make: Unknown error
Dan is 'make' niet geinstaleerd. Te fixen met:
code:
1 apt-get install make
Zie je:
code:
1 /bin/sh: 1: x86_64-linux-gnu-gcc: not found
Dan is gcc niet geinstalleerd. Te fixen met
code:
1 apt-get install gcc
Installatie
Download de bestanden van de github: https://github.com/RualdOrdelman/growatt-proxy-and-upload
Kopieer settings.yaml.example naar settings.yaml en pas de instellingen aan.
Het is mogelijk om 3 omvormers uit te lezen. ik heb er maar één en heb dus alleen inverter1 entries aangepast.
MQTT instellingen zijn handig om de data snel naar Home Assistant te krijgen (of een andere software dat met MQTT om kan gaan. Meer over MQTT)
En voer je PVoutput ApIkey in en het id van je systeem om naar PV Output direct te communiceren. (Zelf doe ik het dus niet zo, dus heb dit niet getest)
Pas in beide scripts (run_proxy.sh en run_upload.sh) het pad aan naar de folder waar je bestanden staan.
Draaien van de proxy en uploader
Vervolgens kun je de proxy en uploader gaan opstarten.
sh run_proxy.sh
sh run_upload.sh
Beide in een aparte terminal om te testen.
Configuratie Shine Wifi stick
Zorg ervoor dat de Wifi stick naar het IP van je server kijkt:
[url="https://www.4blue.nl/media/wysiwyg/ShineWiFi-S-internal-webserver-guide.pdf"]PDF handleiding/url]
Je kunt ook de time interval aanpassen. Ik heb hem nu op 1 minuut staan. Zelfde als wat DSMRreader over de MQTT gooit.
Herstart de wifi stick en kijk in de terminal of je data binnen ziet komen.
Werkt het?
Zo ja? Tof!
Check ook je MQTT server, werkt dat? Mooi kun je sensoren toevoegen aan Home Assistant: MQTT Sensor Home Assistant
En dan PVOutput testen.
Zo niet, tja bughunten! Ik moest even het IP van de server toevoegen aan de settings.yaml voor toegestane IP's
PV Output
Versturen naar PV Output kan dus via het script (zelf niet getest), maar kan ook zelf via de API. Of via Home Assistant.
Home assistant twee manieren:
* Maak een shell_command:
code:
1 2 shell_command: pvoutputcurl: 'curl -d "d={{now().strftime("%Y%m%d")}}" -d "t={{now().strftime("%H:%M")}}" -d "v1={{states.sensor.growatt_total_lifetime_energy_output.state|multiply(1000)|round(0)}}" -d "v2={{states.sensor.growatt_total_output_power.state|round(0)}}" -d "v5={{states.sensor.buitentemperatuur_nijmegen_2.state}}" -d "v6={{(states.sensor.growatt_input_2_voltage.state)}}" -d "c1=1" -H "X-Pvoutput-Apikey: PVOutputAPIKey" -H "X-Pvoutput-SystemId: SystemID" https://pvoutput.org/service/r2/addstatus.jsp'
Vervang je sensoren voor jouw sensoren en de APIkey en System ID.
En roep deze elke 5 minuten aan via een automation
* Via Nodered:
Kopieer onderstaande flow:
code:
1 [{"id":"4ae12532.a9bc04","type":"api-current-state","z":"76a9818d.1d533","name":"Total Solar (kWh)","server":"9f19cfb7.40b16","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.elektra_opgewekt_totaal","state_type":"num","state_location":"payload","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":170,"y":180,"wires":[["956f05f7.85a3c8"]]},{"id":"ca648094.082098","type":"join","z":"76a9818d.1d533","name":"","mode":"custom","build":"object","property":"payload","propertyType":"msg","key":"topic","joiner":"\\n","joinerType":"str","accumulate":false,"timeout":"2","count":"7","reduceRight":false,"reduceExp":"","reduceInit":"","reduceInitType":"","reduceFixup":"","x":730,"y":100,"wires":[["aa713740.331ce8"]]},{"id":"956f05f7.85a3c8","type":"change","z":"76a9818d.1d533","name":"V1","rules":[{"t":"set","p":"topic","pt":"msg","to":"v1","tot":"str"},{"t":"set","p":"payload","pt":"msg","to":"$string($number(payload)*1000)","tot":"jsonata"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":180,"wires":[["ca648094.082098"]]},{"id":"f2de5edc.18f44","type":"api-current-state","z":"76a9818d.1d533","name":"Total Solar Power (Watts)","server":"9f19cfb7.40b16","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.vermogen_opwekking_totaal","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":190,"y":240,"wires":[["88ecd6df.5a8af8"]]},{"id":"53568be6.945d3c","type":"api-current-state","z":"76a9818d.1d533","name":"Daily Consumed (Watt hours)","server":"9f19cfb7.40b16","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.daily_consumed_energy_wh","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":210,"y":300,"wires":[["849fce46.cf9428"]]},{"id":"ea58b0bc.d10938","type":"api-current-state","z":"76a9818d.1d533","name":"Consumed Power (Watts)","server":"9f19cfb7.40b16","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.total_consumed_power","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":190,"y":360,"wires":[["8b64f57c.fec4c"]]},{"id":"7d6d099b.1955b","type":"api-current-state","z":"76a9818d.1d533","name":"Temperature","server":"9f19cfb7.40b16","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.temperatuur_omvormer","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":150,"y":420,"wires":[["bceb54fc.6e0188"]]},{"id":"3185c5ae.be7d52","type":"api-current-state","z":"76a9818d.1d533","name":"Volts","server":"9f19cfb7.40b16","version":1,"outputs":1,"halt_if":"","halt_if_type":"str","halt_if_compare":"is","override_topic":false,"entity_id":"sensor.voltage_mptt_2","state_type":"str","state_location":"payload","override_payload":"msg","entity_location":"","override_data":"none","blockInputOverrides":false,"x":130,"y":480,"wires":[["ed46fad1.56d048"]]},{"id":"88ecd6df.5a8af8","type":"change","z":"76a9818d.1d533","name":"V2","rules":[{"t":"set","p":"topic","pt":"msg","to":"v2","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":240,"wires":[["ca648094.082098"]]},{"id":"849fce46.cf9428","type":"change","z":"76a9818d.1d533","name":"V3","rules":[{"t":"set","p":"topic","pt":"msg","to":"v3","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":300,"wires":[["ca648094.082098"]]},{"id":"8b64f57c.fec4c","type":"change","z":"76a9818d.1d533","name":"V4","rules":[{"t":"set","p":"topic","pt":"msg","to":"v4","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":360,"wires":[["ca648094.082098"]]},{"id":"bceb54fc.6e0188","type":"change","z":"76a9818d.1d533","name":"V5","rules":[{"t":"set","p":"topic","pt":"msg","to":"v5","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":420,"wires":[["ca648094.082098"]]},{"id":"ed46fad1.56d048","type":"change","z":"76a9818d.1d533","name":"V6","rules":[{"t":"set","p":"topic","pt":"msg","to":"v6","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":480,"wires":[["ca648094.082098"]]},{"id":"aa713740.331ce8","type":"function","z":"76a9818d.1d533","name":"Set API key here 1","func":"msg.action = msg.payload;\nmsg.headers = { \n 'X-Pvoutput-Apikey': 'APIKEY-HERE',\n 'X-Pvoutput-SystemId': 'SUSTEM-ID-HERE',\n 'Content-Type': 'application/x-www-form-urlencoded'\n};\n\nreturn msg;","outputs":1,"noerr":0,"x":970,"y":140,"wires":[["35b7d041.841c58"]]},{"id":"35b7d041.841c58","type":"function","z":"76a9818d.1d533","name":"Set up data","func":"msg.action = msg.payload;\n\nmsg.url = \"http://pvoutput.org/service/r2/addstatus.jsp\";\n\n\n\nreturn msg;\n\n","outputs":1,"noerr":0,"x":970,"y":200,"wires":[["2a9de5b1.430fd2"]]},{"id":"2a9de5b1.430fd2","type":"http request","z":"76a9818d.1d533","name":"Post","method":"POST","ret":"txt","paytoqs":false,"url":"","tls":"","persist":false,"proxy":"","authType":"","x":970,"y":260,"wires":[["147649cc.a4930e"]]},{"id":"147649cc.a4930e","type":"debug","z":"76a9818d.1d533","name":"headercheck","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"true","targetType":"full","x":970,"y":320,"wires":[]},{"id":"d1a4e4b7.ff6888","type":"moment","z":"76a9818d.1d533","name":"Date","topic":"d","input":"","inputType":"date","inTz":"Europe/Amsterdam","adjAmount":0,"adjType":"days","adjDir":"add","format":"YYYYMMDD","locale":"C","output":"payload","outputType":"msg","outTz":"Europe/Amsterdam","x":550,"y":100,"wires":[["ca648094.082098"]]},{"id":"b93532f8.852408","type":"moment","z":"76a9818d.1d533","name":"Time","topic":"t","input":"","inputType":"date","inTz":"Europe/Amsterdam","adjAmount":0,"adjType":"days","adjDir":"add","format":"HH:mm","locale":"C","output":"payload","outputType":"msg","outTz":"Europe/Amsterdam","x":550,"y":140,"wires":[["ca648094.082098"]]},{"id":"30a5150.655eaec","type":"change","z":"76a9818d.1d533","name":"C1","rules":[{"t":"set","p":"topic","pt":"msg","to":"c1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":550,"y":540,"wires":[["ca648094.082098"]]},{"id":"cc8be4c3.27d368","type":"change","z":"76a9818d.1d533","name":"Set Cumulative Flag","rules":[{"t":"set","p":"payload","pt":"msg","to":"1","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":180,"y":540,"wires":[["30a5150.655eaec"]]},{"id":"83b2e29a.ac30b8","type":"inject","z":"76a9818d.1d533","name":"Every 5 Minutes","topic":"","payload":"","payloadType":"date","repeat":"300","crontab":"","once":true,"onceDelay":0.1,"x":170,"y":100,"wires":[["d1a4e4b7.ff6888","b93532f8.852408","4ae12532.a9bc04","f2de5edc.18f44","7d6d099b.1955b","3185c5ae.be7d52","cc8be4c3.27d368"]]},{"id":"9f19cfb7.40b16","type":"server","z":"","name":"Home Assistant"}]
* vul daarin de apicode en system-id in.
* Pas de sensoren aan
* pas eventueel de cumulative flag aan
* Tel het aantal zaken datje meestuurt (kolom met date time en V1-c1) en voer dat aantal in bij de join Node onder: "Send the message: After a number of message parts' Om ervoor te zorgen dat het bericht niet nodeloos staat te wachten op en input
@Goof2000 Ter info
[Voor 75% gewijzigd door Jeltel op 24-05-2020 16:55]