I don’t know Growatt cloud but if they have some kind of API to export data it would be possible to write a service that get data there and send it to PVOuput.
Regarding my setup, I can’t take credit, I took the idea from here and modified the script a little bit for my needs but it works as it is there. One think I really dislike in the original script is that it reports total generation on every iteration. This sometimes (speacially early in the morning or late in the afternoon) causes the average power to be zero in one interation and 1200W on another iteration (and keep swinging until sun give more power - midday - or dark makes inverter turn off). It happens because Growatt (or at least my version) report generation in increments of 100watts and, early in the morning, with a power input of say 300 watts or less, in 5 minutes it will not produce 100W, hence, for pvoutput thinks zero power was generated and 0 avg power. After some chunks of 5 minutes, the power generated in a day will raise 100W and pvoutput would calculate 100w delta over the last chunk of 5 minutes resulting in average power spike of 1200W (0,1KWh / (5/60 minutes) = 1,2KWh). I solved this by make python a long running script (instead of oneshot like it is the site) and memorizing latest energy total for the day, if it has no change, report only power and not total energy to PVOutput.
Another thing you might face is python script fail to communicate with inverter on the first attempt, if you retry (once or twice) it does. I could not figure out if this is due low quality of my USB/RS232 cable (really cheap one) or due my RaspberryPI terrible USB performance (PI model B is known by its inability to supply good voltage to USB devices) or due to python library or a fault of the inverter itself. I took the
quick n dirty approach by intercepting exception and retry until it works or threshold of attempts be reached… I still don’t sleep well not knowing what causes the bug but it works.
All that said, this Canadian inverter (growatt clone???) is installed at my mother’s place, she lives almos 600Km from here. I went to visit her in a weekend and put everything together as quick as possible so I can come back and still monitor her production. To assemble the Pi, wire it to inverter and network, and test python script took me no more than 4 hours. One or two changes to meet her needs and voi la. The thing is running for 1 month without my mom or me having to put hands on it.
I have some ideas to try out:
switch the USB cable with a MAX232 board (a chip that converts TTL 3v3 signals into RS232 signals) and wire it direct to RPi GPIOs (Pi has serial TTL). This way I get ridge of cheap cable and RPi crap USB in one single shot. But this needs me to solder wires in place, hence this will happen someday during vacations at mom’s home. Until there, cheap USB will do the trick
here at my place I have an ABB inverter (former Aurora PowerOne). Today I interface with its RS485 using a small Moteino (arduino variant with a 433MHz radio attached). It reads inverer every one minute and sends results over RF to my central raspberry far away inside home; also, do same with my energy meter at home entrance. Both arduinos are runnning over a year without one single issue. However those 433MHz radios need a gateway attached to the Pi inside home. My idea, almost complete by now, is to user a ESP01 or ESP12 instead of the Moteinos. This way I have wifi conectivity direct and enough computational power to send data directly from ESP to the PvOutput.
If this works well here, I will do the same at my mom’s inverter because the only difference between her Inverter and my smart energy meter is the physical interface (inverter is RS232 and smartmeter is RS485) but protocol is Modbus for both. Once correct implmented ESP code, it does not matter the serial converter I would use underneath.
Don’t get me wrongly, RPi does a wonderful job there at my mom’s but the environment is not the best one to keep the RPi and waste that much power just to read the inverter really bugs me.
I will share my version of the python script as soon as I can get back to my mom’s place because later changes I did directly in the RPi and forget to transfer back to my laptop. Also, as you can see here, my modifications about power average worked on test stage and I, sleepy, forgot to merge it back on RPi production version. (also I noticed the time is shifted by 3 hours, am I sending local time instead of UTC or vice versa? Need to check there, I can’t remeber ahahaha)
If you need any other information or face an issue I can help, please let me know.