Zonnepanelen uitlezen in Domoticz

Gepubliceerd door Robot One op

Dak huis met zonnepanelen

Eindelijk echte data over de elektriciteit die je opwekt

Update 4 maart 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 * * * *   root    php /home/pi/domoticz/scripts/pass2php/growatt-inverter.php

Wat hier staat is dat het genoemde script van gebruiker ‘root’ 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

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

Geef een reactie

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