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: 25033

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 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

Reactie van Johan Vromans op 22 Augustus 2018 op 8.29

Je zou kunnen overwegen mijn proxy server aanpak te proberen. Wellicht werkt die wel, of levert cruciale inzichten.

https://www.vromans.org/software/sw_growatt.html

Reactie van Kees Rozenberg op 20 Augustus 2018 op 23.11

Mmm, encryptie geloof ik niet in, dat druist tegen elk Chinees gevoel in :) En daarbij is in jouw bestand duidelijk dat e repeterend "Growatt" staat, waarbij de veranderende digits informatie lijkt te bevatten. Wellicht kan je door een berg van die cap bestanden te vergelijken ontdekken wat de informatie betekent, zeker als je die kunt vergelijken met die van de Growatt site. En dan een kwestie van het zodanig ombouwen dat je een datagram kunt maken zoals de mijne. Mocht je nog willen testen met een ShineWAN (een WiFi versie met een AH nummer), ik heb er nog één spare liggen die je best een tijdje mag lenen, kan je in ieder geval even kijken wat het doet...

Reactie van Menno Regts op 20 Augustus 2018 op 22.30

@ Kees. Op je vraag en nu is het antwoord hoofdpijn ;) :) Jouw cap.split file komt hier keurig door het script heen. Het is bij mij inderdaad waar ik al bang voor was een totaal anders telegram met misschien wel een encryptie er overheen. Op de site van Growatt komt de data wel goed aan. Wat mij betreft gaat dit project de ijskast in en zie dit als een mooie leerschool om om te gaan met de pi. Het uiteindelijke doel om de data van de zonnepanelen in Domoticz samen met de data van de slimme meter in te zien gaat hier helaas over. In ieder geval bedankt voor je hulp.

Reactie van Kees Rozenberg op 20 Augustus 2018 op 17.34

Dat is er één van mij Menno (heb er even .cap achter geplakt voor het gemak), die ziet er toch wel HEEL anders uit qua payload. Deze scheelt 2 bytes in payload-lengte met die van jou. Ik heb nog zo'n ShineLan WiFi ding liggen die ik niet gebruik, mocht je die even willen vasthouden, laat maar weten ...

Tja, en nu ...

growatt_20180810_09_39.cap.split.cap

Reactie van Kees Rozenberg op 20 Augustus 2018 op 17.17

Ik kijk even mee Menno ... :)

Reactie van Menno Regts op 20 Augustus 2018 op 13.10

Bij deze heb ik de beloofde files geplaatst. het sn van de inverter is QJB1812053. ik kom er namelijk niet verder mee. Heeft iemand een idee wat er anders is aan deze .cap files dan normaal?

Recente activiteiten

Pascal heeft gereageerd op blogbijdrage Binnenkort gaat onze nieuwe community live! van Vereniging Eigen Huis
"Zelf reageer ik niet zoveel op dit forum, om verschillende redenen. Lees meestal en vaak niet de behoefte om te reageren, en andere reden, die al eerder is genoemd, is de VEH zich vaak in zwijgen hult, ook met simpele vragen. Zou jammer zijn als…"
9 uur geleden
Femke - Community Manager heeft gereageerd op blogbijdrage Binnenkort gaat onze nieuwe community live! van Vereniging Eigen Huis
"Het is opgelost @Johan. Dank voor het signaleren."
Donderdag
Femke - Community Manager heeft gereageerd op blogbijdrage Binnenkort gaat onze nieuwe community live! van Vereniging Eigen Huis
"Dag Johan. ik merk dit ook. Ik ga dit even uitzoeken. bedankt!"
Donderdag
J. van Duin heeft gereageerd op blogbijdrage Growatt Wifi Module (via Raspberry Pi) automatische upload naar PVoutput van Sander Plug
"Na verder experimenteren bleek het, zoals Johan zei, dat mijn dumpfiles versleuteld zijn. Eerdere aanroep van het python decodeerscript werkte niet. Maar toen ik probeerde het python script vanaf de command line aan te roepen leek er wel een…"
Maandag

© 2019   Gemaakt door Vereniging Eigen Huis.   Verzorgd door

Banners  |  Een probleem rapporteren?  |  Algemene voorwaarden