Growatt Wifi Module (via Raspberry Pi) automatische upload naar PVoutput

Het is me uiteindelijk gelukt om de data van mijn Growatt 3600MTL omvormer automatisch te uploaden naar PVOutput. Hiervoor gebruik ik een Growatt Wifi Module en een Raspberry Pi. Zie hier:

http://pvoutput.org/intraday.jsp?sid=19577

De volledige procedure hoe dit op te zetten op de Raspberry Pi staat hieronder stap voor stap uitgelegd:

Growatt Wifi Module via Raspberry Pi to PVOutput v2.3.pdf

De bijbehorende scripts kun je hier downloaden:

growattwifi_to_pvoutput_v2.3.2.tar

Graag hoor ik eventuele feedback, verbeteringen en suggesties van jullie.

edit 20150709/22:45: Versie 2.3.x van het pdf document en de scripting toegevoegd.

Vorige versie v2.1 - 20150709/22:45:

Growatt Wifi Module via Raspberry Pi to PVOutput v2.1.pdf 
growattwifi_to_pvoutput_v2.1.tar

Vorige versie v2.0 - 20140614/13:30:
Growatt Wifi Module via Raspberry Pi to PVOutput v2.0.pdf
growattwifi_to_pvoutput_v2.0.tar

Note: Er zijn nu vier firmware versies van de Growatt Wifi Module bekend. Versie 4.0.0.0 en 3.0.0.0 werken met dezelfde instellingen als voor versie 2.0.0.0

Weergaven: 23345

Opmerking

Je moet lid zijn van Energie Community om reacties te kunnen toevoegen!

Word lid van de community van Energie Community

Reactie van Joris op 3 September 2018 op 20.31

Ok, laatste bericht hierover: het werkt. Ik was vergeten process_growatt_pvoutput.sh executable te maken met sudo chmod +x process_growatt_pvoutput.sh

Eerst kon cron het script niet runnen, nu wel. Tenminste logfiles zien er hoopgevend uit, het runt nu, en hoop dus vanaf morgen mijn output naar pvoutput.org te streamen!

Reactie van Joris op 3 September 2018 op 19.58

Sorry de cron lines hieronder zijn trouwens uit de sudo crontab -e file. Anders had de username (root) er nog tussen gemoeten

Reactie van Joris op 3 September 2018 op 19.35

Thanks Menno. Volgens mij gaat er iets niet goed in de instructies die ik aan cron geef, maar ik snap nog niet helemaal wat er mis gaat:

  • sudo bash process_growatt_pvoutput.sh werkt prima en data komt in mijn pvoutput.org terecht
  • nano /var/log/syslog laat zien dat cron elke 5 minuten runt. Voorbeeld van logline: Sep 3 19:25:01 raspberrypi CRON[20023]: (root) CMD (/home/pvoutput/scripts/process_growatt_pvoutput.sh >/dev/null 2>&1)
  • nano ../logs/growatt_process.log laat echter alleen log entries zien van de process_growatt_pvoutput.sh die ik vanaf de command line aangeroepen heb, en dus niet van de cron job elke 5 minuten
  • conclusie: mijn cron job runt wel, maar kan de instructie niet uitvoeren, en er gebeurt dus niks
    • dit klopt conceptueel ook met dat ik eerder ook geen output op server.growatt.com had. Het process_growatt_pvoutput.sh script ververst elke keer de iptables en na de eerste keer handmatig runnen had mijn growatt server weer data, maar daarvoor was mijn iptables config leeg omdat ik mijn pi gisteravond had gereboot (en blijkbaar werkt dat terugzetten van settings toch niet helemaal goed). Maar dat had natuurlijk elke keer moeten gebeuren dat het script via de cron job aangeroepen werd. Oftewel: de cron job werkt niet

Kan iemand me helpen te debuggen wat er mis gaat in mijn cronjob? Ik heb de instructies al vanaf /etc/cron.d/growatt_pvoutput naar de standaard sudo crontab -e gebracht omdat ik dacht dat het daar misschien beter zou gaan, maar no luck. Hieronder mijn cron instructies:

  • # Run the main processing script every 5 minutes
  • */5 * * * * /home/pvoutput/scripts/process_growatt_pvoutput.sh >/dev/null 2>&1
  • # Remove - correctly processed files - older then 7 days
  • 30 0 * * * find /home/pvoutput/processed -name "growatt*ok" -type f -mtime +7 -exec rm {} \;
  • # Remove - original capture files, which split into new files - older then 30 days
  • 30 0 * * * find /home/pvoutput/processed -name "growatt*split" -type f -mtime +30 -exec rm {} \;
  • # Remove - files not correctly uploaded - older then 30 days
  • 30 0 * * * find /home/pvoutput/processed -name "growatt*badupload" -type f -mtime +30 -exec rm {} \;
  • # Remove - original capture files that were to small - older then 30 days
  • 30 0 * * * find /home/pvoutput/processed -name "growatt*size" -type f -mtime +30 -exec rm {} \;

On a high note: het lijkt er dus wel op dat mijn python script en aanpassingen aan process_growatt_pvoutput.sh werken, omdat handmatig runnen dus wel werkt!

Reactie van Menno Regts op 3 September 2018 op 15.31

Edit laatste bericht,Joris het lijkt er meer op dat je Pi van je router een ander ip adres heeft gekregen. Het beste kan je het goede ip adres reserveren in de instellingen van je router.

Reactie van Menno Regts op 3 September 2018 op 12.12

Joris, zou het kunnen dat de port forward-ingen in de Pi na een reboot weer terug gezet zijn? Het koste mij het nodige zoekwerk in Google om dat goed te krijgen.

Reactie van Joris op 3 September 2018 op 9.32

Update: ok, misschien is het omdat het erg bewolkt is vandaag, maar ik heb nu zowel geen output meer op de growatt server als op pvoutput.org. Dus misschien nog even wachten met die scriptjes van mij implementeren :-|

Reactie van Joris op 2 September 2018 op 20.41

LET OP: doe het onderstaande alleen als de standaard methode van Sander Plug niet werkt, en je in je TCPdump output vaak het woord "Growatt" ziet. Je hebt dan een versie van de Growatt module die de verstuurde data een beetje versleutelt. Als je dit toepast op een onversleutelde versie van de data dan versleutel je het juist en wordt het onbruikbaar.

OK, dit is hoe het nu bij mij werkt. Garanties tot de deur. Laat weten als het niet werkt, misschien kan ik helpen.

Hoe je kan testen of het werkt:

  • Optie 1: run op command line gewoon sudo bash -x process_growatt_pvoutput.sh
  • Optie 2: test het script op een bestaande .cap.split file die je tot nu toe niet hebt kunnen lezen
    • Run op command line (in map /pvoutput/scripts) sudo python3 remove_growatt_mask.py ../processed/<filename>.cap.split <serial_number van je inverter>
    • Run op command line (in map /pvoutput/scripts) sudo bash view_growatt_data.sh ../processed/<filename>.cap.split

Zoals je hierboven ziet moet je het serial number van de inverter meegeven naar het python script. Dit is omdat het script nooit helemaal zeker weet wanneer het goed gedecode is, tot hij het serial number kan lezen. Stel je voor dat je tcpdump 10 bytes zou zijn, dan zou je het growatt mask kunnen toepassen als xxxgrowatt, of als xxgrowattx, of als xgrowattxx, of als growatxxx. Het script doet dus een aantal iteraties om te bepalen wanneer hij het mask goed over de message heengelegd heeft, en gebruikt het serial number om dit te bepalen. 

Een mogelijke toekomstige verbetering van het script zou zijn om vooraf te kunnen bepalen waar het bitmask zou moeten beginnen, zodat deze iteraties niet meer nodig zijn.

Daarnaast: de '.cap.split' files die weggeschreven worden in het process_growatt_pvoutput.sh script, worden nu nog niet gedecode. Mocht je dat willen dan moet je het script dus even aanpassen dat de decodering op een andere plek gebeurt. Of gewoon handmatig decoderen door vanaf de commandline het python script aan te roepen natuurlijk.

Hoop dat dit helpt, ben benieuwd of dit de zaken ook voor andere mensen oplost of dat ik iets in elkaar gespaghetti'd heb wat alleen bij mij werkt!

Reactie van Kees Rozenberg op 31 Augustus 2018 op 21.47

Petje af Joris! Ook ik ben niet zo'n programmeer crack, maar wat je kunt doen is een shellscript maken waarin je je python script aanroept. Of dat kan je ook doen vanuit het shellscript van Sander. Heb even lopen zoeken, in een shellscript op bitniveau gaan XOR'ren gaat hem niet gelijk worden denk ik, je vervalt al snel naar iets in Perl, PHP of Python. En hoe luidt die uitspraak ook alweer? "If it looks stupid but it works, it aint stupid"'. Om na een dergelijk Python script jezelf nog af te durven schilderen als Linux nono doe mij in angst afvragen waar ik dan ergens zit op diezelfde schaal :) Ik zeg: Top gedaan!!!

Reactie van Menno Regts op 31 Augustus 2018 op 21.29

Goed om te horen dat Joris verder is gekomen dan ik had durven dromen. Ik had alle hoop al opgegeven en ben overgestapt op een Shine Lan. Wat het programmeren ben ik minder ver dan de leerlingen die nu op school zitten. Het enige waar ik ooit wel eens aan gesnuffeld heb was basic (if or and en goto) en het aanpassen van de config.sys en autoexec.bat. Dus Linux etc is voor mij helemaal nieuw. Maar ik blijf dit zeker volgen. En ook gebruiken als het helemaal werkt (ik kom Lan poorten te kort op de router).

Reactie van Joris op 29 Augustus 2018 op 22.12

Hallo allemaal,

New to the party. Recent 3kW Growatt omvormer met Growatt ShineWifi-S Wifi Module geinstalleerd. Ook aan de gang met deze scripts. Super werk Sander e.a., geweldig gedocumenteerd, en goed te volgen voor een totale linux nono als ik. 

Had qua decoden van de .cap file wel exact hetzelfde probleem als Menno. Gelukkig is oplossing vrij eenvoudig. Growatt heeft databericht wel "encrypted" maar met een bijzonder simpele sleutel. Ze hebben het woord "Growatt" als bitmask gebruikt om de data te versleutelen. Daarom zie je ook zo vaak "Growatt" terug komen in screenshot van Kees. Om originele data terug te krijgen heb ik het volgende gedaan:

  1. Zoals te zien in screenshot onder is het "data" stuk van het bericht 225 bytes lang. Dit is 1 startbyte 0x00 en daarna het bericht (224 bytes) met daar overheen 224/7 = 32x het woord Growatt
  2. Ik ben geen bijster goede programmeur dus ik heb (ongetwijfeld vrij omslachtig) een python script geschreven wat (1) "Growatt" omzet in een 8-bits binary representatie (7 bytes dus), (2) de .cap message ook omzet in 8-bits binary representatie (224 bytes dus), (3) per byte een bit-wise XOR uitvoert, (4) bytes weer terug aan elkaar geplakt en omgezet in hex data (en dit dus 32 keer om door de hele message heen te loopen)
  3. Vervolgens de originele hex data in de .cap file overschreven met de nieuwe data, en dit door view_growatt_data.sh getrokken en.... het werkt! Met OFFSETCORRECT=6, dus GROWATTMODULEVER 2.0.0.0 bijvoorbeeld. Verder is het volledige format van de file hetzelfde en staan bijv. de registers op dezelfde plekken, en kan het volledige sh script dus gebruikt worden

Ik zal mijn script, voorbeeldfile, etc. wel hier posten een dezer dagen. Nadat ik het een beetje opgeschoond heb.

1 vraag waar ik ontzettend mee geholpen zou zijn: ik had tot eergisteren nog nooit van .sh scripts gehoord, en kan daar dus ook werkelijk helemaal niks in. Is er iemand die het een leuke uitdaging zou vinden om deze bitmask operatie in het process_growatt_pvoutput.sh script te verwerken? Dat zou veel praktischer zijn dan een apart python script te runnen om specifiek dit te doen (plus dat ik geen idee zou hebben hoe ik dat aan zou moeten roepen :-)).

Zie uit om dit nog wat verder te brengen!

Vriendelijke groet, Joris

Recente activiteiten

Matthijs heeft gereageerd op blogbijdrage Kwaliteit Martervolt Sunmaster omvormer van bosco1971
"Dit is bij meerdere mensen een bekend probleem. Kijk maar in het draadje "Status voortgang n.a.v. faillisement Oskomera?" Mijn ES3.6TL heeft het op 13 juli na iets meer dan 5 jaar in gebruik te zijn geweest begeven met de melding…"
58 seconden geleden
Willem posted a blog post

Ervaring met infrarood panelen in de badkamer?

Besten,Heeft iemand ervaring met infrarood panelen in de badkamer?Omdat onze badkamer centraal in het huis ligt staat de centrale verwarming daar in de winter minimaal aan.Mijn idee is om de radiator bij de komende verbouwing weg te halen en te vervangen door een infrarood paneel aan de muur of het plafond. Het paneel hoeft alleen aan als je gebruikt maakt van douche of bad. Misschien is het nodig om het paneel iets eerder aan te zetten.De badkamer is ongeveer 6m2 dus volgens mij is 200~300…See More
Zondag
Willem is nu lid van Energie Community
Zondag
bosco1971 posted a blog post

Kwaliteit Martervolt Sunmaster omvormer

Nadat bij mij in dec 2012 zonnepanelen zijn geplaatst met een ES3.6TL sunmaster omvormer, is deze na 2,5 jaar dienst door mastervolt onder garantie vervangen door een ES4.6TL omvormer.Het probleem "relay fail" zou volgens hun veroorzaakt kunnen zijn omdat de omvormer net te klein was voor de 16 panelen.Wat schets mijn verbazing:Nu na weer 2,5 jaar hetzelfde probleem??Moet nu weer mastervolt aan gaan schrijven, maar ben benieuwd of er nog meer leden zijn die kwaliteit problemen ondervinden bij…See More
Zaterdag

© 2018   Gemaakt door Vereniging Eigen Huis.   Verzorgd door

Banners  |  Een probleem rapporteren?  |  Algemene voorwaarden