Zonnepanelen uitlezen in Domoticz

Gepubliceerd door Robot One op

Dak huis met zonnepanelen

Eindelijk echte data over de elektriciteit die je opwekt

Update 24 april 2020

Heb je zonnepanelen? Dan is de kans groot dat je ook al een slimme meter in je meterkast hebt. Eén groot nadeel heeft die wel: hij laat niet zien hoeveel je zonnepanelen precies opwekken.

Het is vreemd dat slimme meters wel laten zien hoeveel stroom er in totaal is gebruikt en geleverd, maar niet de actuele stand van zaken tonen. Als je op een bepaald moment meer zonnestroom levert dan gebruikt, staat de waarde van Gebruik op 0 en de waarde van Levering op een positief getal. Als je meer energie gebruikt dan levert, staat de waarde van Levering op 0 en is de waarde van Gebruik een positief getal. Met andere woorden: de meter laat alleen het verschil tussen gebruik en levering zien en splitst dat uit in twee waardes die allebei niet negatief kunnen worden.

Onduidelijk is waarom ooit voor deze merkwaardige opzet is gekozen, want op deze manier kun je nooit realtime zien hoeveel je zonnepanelen daadwerkelijk leveren, of hoeveel energie je nou werkelijk gebruikt in huis, los van waar de stroom vandaan komt.

Om dat te kunnen meten in Domoticz, moeten we de gegevens van de inverter rechtstreeks in Domoticz inlezen. Gelukkig bieden de meeste fabrikanten van inverters deze mogelijkheid aan via een API (web-interface). En die is in Domoticz met een scriptje goed in te lezen. Voor vier van de meest populaire invertermerken heeft programmeur Sándor Incze het werk al voor ons gedaan: Goodwe, SMA (SunnyPortal), Growatt en Omnik. Passende scripts zijn allemaal te downloaden op Github (een website voor open source code).

Proef op de som: Growatt uitlezen

Zelf heb ik een Growatt inverter, type 4200 en daarmee heb ik het script getest. Wat je hiervoor allereerst nodig hebt, is een inlogcode voor de Shinephone app of website van Growatt. Sommige leveranciers of verhuurders van zonnepanelen bieden je een eigen app aan als laag over de Growatt server heen, waarbij je dus andere inloggegevens krijgt. In dat geval moet je echt even vragen naar de juiste gegevens; het gaat om jouw data en die mag niet geheim worden gehouden.

Vervolgens download je het script growatt-inverter.php. Open dit bestand in een een tekstverwerker of code editor. Je zult zien dat in het commentaar al instructies staan om dit te installeren. Zo moet er in Domoticz zelf iets worden aangepast, maar ook rechtstreeks op de Raspberry Pi. Bovendien moet een aantal gegevens in het script zelf worden ingevuld. Omdat er wel wat valkuilen zijn (weet ik uit ervaring), lopen we de instructies een voor een door.

Stap 1: aanpassingen in Domoticz

Als eerste moeten we een ‘meter’ aanmaken in Domoticz: een zogeheten virtueel apparaat waarop je kunt zien hoeveel stroom er wordt geleverd. Virtueel betekent in dit geval dat het apparaat zijn data via software krijgt en niet rechtstreeks is gekoppeld aan hardware die aan je Domoticz-server hangt. Om zo’n apparaat te kunnen toewijzen, moeten we in Domoticz eerst de hardware daarvoor ‘faken’:

Virtuele hardware schermafdruk
  • Ga in Domoticz naar Instellingen > Hardware. Je ziet het bovenstaande veld. Vul onderaan bij Naam: een willekeurige maar duidelijke naam in. Ik noem de mijne VIRTUAL. Kies bij Type: voor Dummy (Does nothing, use for virtual switches only). Klik op toevoegen. Je hebt nu de mogelijkheid om vanuit de hardware-lijst een virtuele sensor aan te maken.
Create virtual sensor schermafdruk
  • We maken nu het virtuele apparaat aan. Klik in de hardware-lijst op Maak virtuele sensoren. Vul in de popup de naam in, bijvoorbeeld Zonnepanelen. Kies als type Elektra (Actueel + Teller) en klik op OK.
Virtueel apparaat schermafdruk
  • Ga naar Instellingen > Apparaten en bekijk welk identificatienummer (Idx) je apparaat heeft gekregen. In dit voorbeeld is het 290. Noteer dit.
  • Ga nu naar Instellingen > Instellingen en scroll naar halverwege de pagina tot het vakje Lokale netwerken (geen gebruikersnaam/wachtwoord). Hier moet je het eerste gedeelte van je lokale netwerk-adres opgeven. Zit Domoticz bijvoorbeeld op 192.168.0.99, dan vul je in het veld Netwerken: 192.168.0.* in. Dit betekent dat verbindingen op je lokale netwerk met Domoticz kunnen communiceren zonder een login en wachtwoord op te geven.

Stap 2: aanpassingen in het PHP-script

Open het script growatt-inverter.php met een tekst-editor (kladblok, Notepad++, nano, Sublime, het maakt niet uit als het maar geen Word is, want we willen geen opmaakcodes in de tekst).

In regel 43 vul je het lokale adres + poortnummer van Domoticz in, bijvoorbeeld:

define('domoticz','http://192.168.0.99:8080/');

In regel 49 vul je je inlognaam van Growatt in. Bijvoorbeeld M. Naam:

define('USERNAME', 'M. Naam'); 

Let op het gebruik van hoofletters en spaties! Als je inlognaam M. Naam is (met spatie ertussen), werkt het niet als je hier M.Naam (zonder spatie) invult, heb ik door schade en schande ondervonden.

In regel 50 vul je je Growatt password in:

define('PASSWORD', 'mijnPassword2020');

In regel 65 vul je het devicenummer (Idx) van Domoticz in die je in Stap 1 hebt genoteerd

define('DOMOTICZDEVICE', '290');

Sla het bestand op en sluit de editor.

Stap 3: aanpassingen op je Raspberry Pi

Log in op de terminal van je Raspberry Pi: rechtstreeks als je er een monitor aan hebt hangen, of op afstand, met een Telnet-client zoals PuTTY.

Update voor de zekerheid de software naar de laatste versie:

sudo apt-get update && sudo apt-get upgrade

Installeer de nieuwste versie van PHP 7 voor het geval die er nog niet op staat:

sudo apt-get install php7.3 php7.3-curl php7.3-gd php7.3-imap php7.3-json php7.1-mcrypt php7.3- php7.3-cli

Het valt op dat in deze lijst overal versie 7.3 wordt gebruikt, behalve bij php7.1-mcrypt. Dit onderdeel bevat cryptografie-routines en wordt niet meer verder ontwikkeld. De laatste versie is dus 7.1.

Nog een opmerking: mocht bovenstaande regel niet werken, dan komt dat waarschijnlijk doordat de installer tussendoor wil vragen om een Ja/Nee reactie en dus niet alles ineens kan installeren. Installeer de afzonderlijke onderdelen in dit geval een voor een:

sudo apt-get install php7.3
sudo apt-get install php7.3-curl
sudo apt-get install php7.3-gd
 …etc...

Ga naar de map scripts en maak daar een nieuwe map aan:

cd /home/pi/domoticz/scripts
mkdir pass2php
cd pass2php

Kopieer het in Stap 2 aangepaste bestand naar deze map. Dat kan simpel met FTP.

Test nu of het bestand geen fouten bevat:

php /home/pi/domoticz/scripts/pass2php/growatt-inverter.php

In Domoticz kun je in de log kijken naar wat er is uitgevoerd. Als alles goed is gegaan, zie je zoiets als onderstaande regels:

2020-01-13 11:25:02.670 Status: --->> Cookie File: /home/pi/domoticz/scripts/pass2php/growatt.cookie exists!
2020-01-13 11:25:02.672 Status: --->> Cookie File: /home/pi/domoticz/scripts/pass2php/growatt.cookie is writable!
2020-01-13 11:25:02.784 Status: --->> Growatt Inverter: 1682.6 for domoticz: 1682.6;1400

Nu gaan we ervoor zorgen dat dit script periodiek wordt herhaald. Dat kan met de Linux-app ‘cron’. Deze gebruikt een tabel met instructies die op bepaalde tijdstippen of om de zoveel tijd moeten worden uitgevoerd. We maken zo’n lijst aan (of kunnen hem aanpassen) met het commando:

sudo crontab -e

De eerste keer vraagt crontab welke editor je bij voorkeur wilt gebruiken. Default is 2 (nano).

Voeg in het geopende bestand de hele volgende regel toe:

*/5 * * * *   php /home/pi/domoticz/scripts/pass2php/growatt-inverter.php

Wat hier staat is dat het genoemde script (van de ingelogde gebruiker) iedere 5 minuten moet worden uitgevoerd. Vijf minuten is een goed compromis. Vaker meten kan, maar zorgt voor een hogere serverbelasting. Schrijf het bestand weg en sluit de editor.

Vanaf nu moet je in Domoticz om de vijf minuten updates kunnen zien van je nieuwe apparaat Zonnepanelen.

Wellicht ten overvloede deze laatste tip: test dit script overdag, want ‘s nachts ‘slaapt’ je inverter!

Meer weten over het meten van gas, water en elektriciteit? In volgende artikelen zal ik diepe ingaan op het draadloos uitlezen van de slimme meter en de watermeter.

€ 100 bonus bij Zelfstroom

Ga zelf stroom opwekken! Goed voor het milieu én voor je portemonnee. Laat Zelfstroom kosteloos een vrijblijvende berekening maken voor jouw huis en krijg een bonus € 100 als je je via onderstaande knop aanmeldt. Daarmee stimuleer je bovendien de verdere ontwikkeling van deze website!

Bekijk op Zelfstroom

36 reacties

John · 14 januari 2020 op 09:36

Top artikel!

Jos · 9 februari 2020 op 13:16

waarom geeft hij fout aan Bij PHP bestand bij regel 73?

    Robot One · 14 februari 2020 op 16:11

    Dag Jos,

    In regel 73 wordt CURL aangeroepen. Heb je dat geinstalleerd? Probeer eens in de terminal (Putty) te kijken welke versie je hebt:
    $ curl –version

Cees · 16 februari 2020 op 09:40

Geweldig dat ik dit vond voor mijn Growatt 3600MTL-S omvormer, precies wat ik nodig had en het werkt!
Paar opmerkingen:
Installatie van PHP werkt bij mij met
sudo apt install php7.3-curl

Daarna is nodig de Curl verbinding met PHP te verzorgen:
sudo apt install php7.3-curl

De cronjob heeft de aanwijzing root niet nodig want door de cron aan te roepen met sudo maak je jobs aan die door root worden uitgevoerd.

Verder staat er nog een foutje in de regel die het lokale ip bereik aangeeft.

Maar alle lof, het werkt voortreffelijk, bedankt!

    Robot One · 27 februari 2020 op 16:28

    Bedankt voor je kritische blik! Ik zie alleen bij zowel het installeren van PHP als bij het verbinden met CURL twee keer dezelfde instructie staan: sudo apt install php7.3-curl.

Jos · 16 februari 2020 op 12:59

Robot One,

Bedankt voor de tip !
het is gelukt met command: sudo apt-get install php-curl
Toen was het op gelost en werkt!

    Robot One · 26 maart 2020 op 10:22

    Wijzigingen van je gebruikersnaam het beste doorgeven via de installateur van je zonnepanelen, zodat deze ook aan de juiste installatie wordt gekoppeld.

Fred · 25 maart 2020 op 17:45

Hoi, volgens mij een tikfoutje… er staat **** in regel 56 aanpassen, moet regel 65 zijn 😉 . In de php-file . Ik zal het binnenkort eens proberen….
Andere vraag. Ze hebben een paar letters van mijn naam verkeerd ingetikt bij de gebruikersnaam… kan ik niet wijzigen, maar zou ik een nieuw account kunnen aanmaken bij growatt/ shine?

Groet,
Fred

Fred · 25 maart 2020 op 19:13

Nog even… volgens mij heb ik alles goed ingevuld, maar ik zie niets in de log-file….

    Fred · 25 maart 2020 op 19:21

    Gevonden…. ik had een 9 ingetikt ipv een 8 bij het ip-adres

      Fred · 25 maart 2020 op 19:25

      Ik zie dit nu….
      2020-03-25 19:21:33.530 (Hue) Light/Switch (Woonkamer beweging)
      2020-03-25 19:21:33.117 Status: —>> Cookie File: /home/pi/domoticz/scripts/pass2php/growatt.cookie exists!
      2020-03-25 19:21:33.125 Status: —>> Cookie File: /home/pi/domoticz/scripts/pass2php/growatt.cookie is writable!
      2020-03-25 19:21:33.676 Status: —>> Growatt Inverter: 0 for domoticz: 0;8900
      2020-03-25 19:21:33.708 Status: —>> (udevice) | 46 => 0,0;8900

      Is dit correct?

        Robot One · 26 maart 2020 op 10:26

        De waarde 0 zou kunnen kloppen aangezien je hebt gemeten om 19:21 uur. In het donker dus en dan is de opbrengst nul. Kijk maar eens als de zon schijnt. Bij mij staat er nu :
        2020-03-26 10:20:04.719 Status: —>> Growatt Inverter: 3456 for domoticz: 3456;8500
        Dit betekent dat er op dit moment 3456 watt wordt opgewekt, tot nu toe 8500 Watt vandaag.

          Fred · 31 maart 2020 op 19:54

          Bedankt, Ik heb ondertussen mijn domoticz kaartje in een 3b gestopt ipv de 1b. Wat ik toch blijf zien, is dat de Procedure in crontab niet altijd wordt uitgevoerd. Als ik dan de php handmatig uitvoer, dan werkt ie een aantal keren weer.

Bert · 29 maart 2020 op 19:24

Hoi,
Goede uitleg van het geheel. Bij kreeg ik het niet aan de praat. Dit kwam doordat het getoonde idx (bij mij 10) niet overeen kwam met de aangemaakte dummy bij het tabblad Overig. Toen ik op Aanpassen klikte kreeg ik een veel hoger nummer te zien (3042). Na het wijzigen in het growatt-inverter.php bestand werden de gegevens geladen.
Bedankt en succes verder

Fred · 2 april 2020 op 17:50

Ik heb in de regel van de crontab nu gebruiker Root weggelaten…. nu draait de crontab zonder problemen.

Fred · 8 april 2020 op 08:13

Nog een laatste vraag, maar ik denk dat het een domoticz foutje is. Ik zie nu, 8 April om 08:00 uur, dat ik al 16,5 kWh heb opgewekt. Bij “woe” staat nu al een staafje. Kijk ik in de database, dan zie ik in de tabel meter-calendar voor 8 april nog niets staan. Wel komt de energie opgewekt gisteren overeen met wat ik vandaag zie. Heeft iemand een oplossing cq. Idee… domoticz v4.1017

    Willem · 18 april 2020 op 00:07

    Door de crontab aan te passen naar */5 1-22* * * *, leest hij de site uit tussen 1am en 23pm. Hierdoor leest hij niet de opgewekte waarde uit van rond 12 uur ‘s nachts.

      Robot One · 18 april 2020 op 10:47

      Dat is mogelijk, maar als het goed is staat je converter om 12 uur ‘s nachts gewoon uit en is hij alleen tussen zonsopgang en zonsondergang actief.

        Willem · 18 april 2020 op 12:24

        Leek te mooi om waar te zijn. Na middernacht keurig 0 opgewekt. Vanmorgen toch weer de waarde van gisteren.

          Willem · 22 april 2020 op 13:33

          Domoticz vult gewoon de database om de 5 minuten en oude waarden, ook al worden ze niet opgehaald van de site.
          Daarom het PHP script aangepast.:
          Regel 143 aangepast naar: if ((date(‘Hi’) > 0030) and (date(‘Hi’) <= 2355)) { $str=( $nowpower.';'. $todaypower * 1000 );}
          Regel 144 toegevoegd: else $str=( $nowpower.';'. 0 );
          Nu wordt buiten de tijden 00:30 en 23:55 de waarde $todaypower op "0" gezet.

          Robot One · 24 april 2020 op 09:52

          Ik heb even het devicelog bekeken, maar zie geen waarden die niet te verklaren zijn. Tussen zonsondergang en zonsopgang staat in de kolommen Energie opgewekt en Vermogen gegenereerd toch echt 0.

Willem · 24 april 2020 op 13:58

Als je in de database van Domoticz kijkt bij “meter” bij het idx nummer (DeviceRowID) van je zonnepanelen, zie je dat de waarden (Value) rond en na 00:00 gevuld worden met de waarde van de vorige dag. Ik zie boven dat ik een = teveel mee gekopieerd heb in “<= 2355", dit moet zijn "< 2355" (Sorry). Bij mij nu al een aantal dagen een keurige opbouw in het dagelijks opgewekte vermogen.

    Robot One · 25 april 2020 op 15:42

    Er zit nog een fout in je code. Hiermee wordt de totaalwaarde namelijk overdag op 0 gezet. Ik heb het volgende ervan gemaakt:
    if (date(‘Hi’) == '0000') { $str=( $nowpower.';'. 0 );} else $str=( $nowpower.';'. $todaypower * 1000 );
    Bij mijn weten wordt deze waarde echter om middernacht gewoon al op 0 gezet. Ik heb dit vandaag gecheckt en kan bevestigen dat er bij mij geen probleem mee zijn. Zowel in Domoticz als op de Growatt server (https://server.growatt.com/) gaat de waarde om middernacht netjes naar 0.

Rob · 25 april 2020 op 14:21

Dank hiervoor; werkt prima. Voor mensen die dit in combinatie met Domoticz op een Synology NAS willen gebruiken: vergeet dan ook niet (1) de regel waar COOKIE_FILE defined wordt te veranderen (bij mij “/usr/local/domoticz/var/scripts/pass2php/growatt.cookie”) en (2) zet in de Synology Task Scheduler als run command “php70 /usr/local/domoticz/var/scripts/pass2php/growatt-inverter.php” en (als je 24 uur updates per minuut wilt hebben): zet “First run time” op 0:00, “Last run time” op 23:59 en “Frequency” op “Every minute”.

    Jacob · 3 juni 2020 op 16:45

    Ik heb deze idd nu op mijn Synology NAS gezet adhv de tips van Rob.
    Bleek dat mijn actieve php versie nog op 5.6.1 stond wat resulteerde in php script errors.
    http://community.synology.com/enu/forum/1/post/130490
    Na dit gefixed te hebben gecheckt of versie goed was. Daarna gecheckt of php werkte zonder errors. Voila.
    Vervolgens ook de taak kunnen toevoegen.
    Helaas geen info op Domoticz scherm. Laatste update van 3 uur terug (installatietijd). Wat gaat er mis? In verschillende logs zie ik ook geen foutmelding of connectiestap.

      Robot One · 3 juni 2020 op 17:26

      Geef in de pass2php map op je server eens handmatig het commando: php growatt-inverter.php
      Wordt de waarde dan wel geüpdated? Als dat wel zo is, werkt er waarschijnlijk iets niet goed in je cron job. Lukt handmatig updaten ook niet, dan zit de fout in het php-bestand.

Jan Michielsen · 13 mei 2020 op 11:56

Beste Robot One, dank voor je heldere uitleg! Het lukt me om alles te installeren, maar op een cruciaal punt gaat het mis. In de log van Domoticz krijg ik dit te zien als ik het php-script draai:

2020-05-13 11:45:02.882 Error: Error parsing http request.
2020-05-13 11:45:02.884 Error: Error parsing http request.
2020-05-13 11:45:03.085 Error: Error parsing http request.
2020-05-13 11:45:03.087 Error: Error parsing http request.
2020-05-13 11:45:03.089 Error: Error parsing http request.

Verder werkt Domoticz goed, gegevens van de slimme meter worden netjes ingelezen. Ik heb gecheckt of ik de aanpassingen in het script goed heb gedaan, dat is volgens mij het geval (username, password, idx). Bestand “growatt.cookie” is ook aangemaakt in pass2php-map. Inverter werkt ook gewoon (gecheckt door in te loggen bij server.growatt.com). Kun je op basis van mijn log-berichten iets zeggen over wat er niet goed gaat, of waar ik de fout moet zoeken? Heb ik iets over het hoofd gezien? Alvast dank voor je reactie.

    Robot One · 15 mei 2020 op 08:47

    Het betekent dat Domoticz iets in het http request niet herkent en dit betekent vermoedelijk dat dit request in het php-script niet goed wordt opgebouwd. Misschien een aanhalingsteken ergens vergeten of een spatie te veel geplaatst?

      Jan Michielsen · 22 mei 2020 op 13:35

      Dank voor je reactie!

Paul · 28 mei 2020 op 20:34

Goedenavond,

Weet iemand ook een script t.b.v. een Zeversolar inverter?

Alvast bedankt

Mike · 4 juni 2020 op 20:56

Hi

Weet er iemand hoe je dit aan de praat krijgt met SMA inverter?

Abo · 14 juni 2020 op 10:44

Mede dankzij deze pagina het geheel aan de praat gekregen met een Growatt inverter. Dank daarvoor. Nu heb ik echter 2 inverters in 1 plant en ik wil ze eigenlijk apart uitlezen. Script van deze pagina zorgt voor de totalen worden opgehaald.
Als ik naar de growatt website ga zie ik andere api’s die de totalen per inverter ophalen (getdevicesbyplant bijvoorbeeld), maar ik krijg het niet voor elkaar om die aan te roepen met een succesvol resultaat. Is er iemand die dit onder handen heeft gehad?

Bryan · 15 juni 2020 op 19:30

Hoi,

Ik heb dit script al een tijdje draaien en werkt eigenlijk prima. Maar nu komt het; bij het dag totaal heb ik opeens waardes staan van rond de 10.000 KWh (dit staat ook niet in verhouding met wat ik daadwerkelijk heb opgebracht die dag).

Iemand een suggestie?

    Robot One · 15 juni 2020 op 21:24

    Kijk eens naar mijn berichtenwisseling met ‘Willem’ van 18 t/m 25 april. Bij hem werden er ook ‘s nachts vreemde waarden geregistreerd. Misschien is zijn oplossing ook de oplossing voor jouw probleem?

Dick · 25 juni 2020 op 14:29

Heeft iemand een kant en klaar script voor een Fronius inverter om uit te lezen in Domoticz?

BVD

Geef een reactie

Het e-mailadres wordt niet gepubliceerd. Vereiste velden zijn gemarkeerd met *