PVdiary - Zonne-energie monitoren

Op vele daken liggen zonnepanelen. Tegelijk met de zonnepanelen worden omvormers geïnstalleerd om de gegenereerde stroom om te zetten naar 230v/60Hz. De leveranciers van omvormers leveren daar ook software voor mee, zodat je kunt kijken hoeveel er gegenereerd is.

 

 Je hebt daarvoor een Windows-pc nodig met een Bluetooth-verbinding. Maar eigenlijk zou je op gezette tijden de data uit de omvormer willen halen en deze willen publiceren op een website. Laat dat nu net iets te veel gevraagd zijn voor deze Windows-software.

 

Maar geen nood; er is een mooie oplossing realiseerbaar met open source-software. En al zeg ik het zelf, qua schoonheid zeker niet de mindere vergeleken bij de meegeleverde software. En qua functionaliteit mag de meegeleverde software niet in de schaduw staan. Genoeg gepraat, aan de slag!


1 Het dashboard van PVdiary

 

Fundering
Het boodschappenlijstje ziet er als volgt uit: een servetje met Bluetooth ondersteuning en voorzien van een Linux-distributie (in dit geval openSUSE 12.3). Geïnstalleerd moeten zijn: Apache, PHP, PHP-zip, gcc, gcc-c++, bluez-devel, libcurl-devel en make. De eerste hindernis is: hoe krijg ik de gegevens uit de omvormer? Het antwoord hierop is SMAspot. Dit is een stukje software dat via Bluetooth de omvormer uitleest. Helaas is hier nog geen pakketje van gemaakt, dus moet je de source downloaden, make(1) uitvoeren en je krijgt de gewenste executable. Plaats deze executable op een logische plaats (/usr/local/bin is een mooie locatie). Om SMAspot goed te laten werken moet nog een configuratiebestand aangemaakt worden, maar dat gaan we straks maken.

PVdiary
Nu we de mogelijkheid hebben om gegevens binnen te kunnen lepelen, moeten we er zorg voor dragen dat deze nog weergegeven kunnen worden via het Web. Dit doe je met PVdiary.

 

Voordat we hieraan gaan beginnen, configureren we eerst Apache. PVdiary bestaat uit twee elementen, een dashboard (alleen voor intern gebruik) en een publicatie-interface. Om deze twee interfaces te bedienen vanuit Apache maak je twee virtuele directories, een /solardashboard voor het dashboard en /solar voor de publicatie:

 

Alias /solar "/srv/www/solar"

<Directory "/srv/www/solar/">

    Options None

    AllowOverride None

    Order allow,deny

    Allow from ALL

</Directory>

Alias /solardashboard "/srv/www/solardashboard"

<Directory "/srv/www/solardashboard">

    Options None

    AllowOverride None

    Order allow,deny

    Allow from 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.1

</Directory>

Plaats dit bestand (solar.conf) in de Apache conf.d-directory en herstart Apache.

 

We gaan nu PVdiary installeren. Open de link naar het setupbestand (een zip-file) van PVdiary en extract haar naar een directory waar je met je browser toegang toe hebt (/srv/www/htdocs). Het zip-bestand bevat twee bestanden, PHP_setup.hta en PHP_setup.php.

Open met je browser het PHP_setup.php-bestand (http://localhost/PHP_setup.php). Je browser laadt nu de setup-interface. Tijdens het laden wordt er tevens een nieuw bestand gecreëerd naast PHP_setup.php, te weten PHP_set.ini. Aangezien dit via de webinterface gebeurt, wordt dit effectief gedaan door de gebruiker waaronder Apache draait. Zorg er dus voor dat /srv/www/htdocs beschrijfbaar is voor deze gebruiker. Vervolgens klik je op PVdiary om PVdiary Versie 2 te installeren.

De paden die gevraagd worden zijn wat cryptisch; de installatiefolder is de directory waar PVdiary geïnstalleerd moet worden (/opt/pvdiary2). De DATA-, BACKUP- en LOG-folders zijn daar weer subdirectories van. De HTTPD-folder is de directory waar het dashboard geïnstalleerd moet worden (/srv/www/solardashboard). De HTTPD URL is de URL naar de webinterface van je dashboard, http://localhost/solardashboard. De WWW-folder is de plek waar de software van je publieke website geplaatst wordt (/srv/www/solar).

Ook hiervoor geldt dat alles wordt uitgevoerd door de gebruiker waaronder Apache runt. Voordat je op Install klikt, is het verstandig de diverse paden te controleren voor toegangsrechten.

De volgende stap is PVdiary configureren. In /opt/pvdiary2 staat een pvdiary2.cfg config file; open deze met je editor en lees haar aandachtig door om je juiste aanpassingen te maken. Het config-bestand is uitgebreid gedocumenteerd, dus hier zul je weinig problemen tegenkomen. Het enige waar je echt op moet letten, is bij de sectie [cl_SB5000TL] “Omvormers”. Aangezien we de data straks via SMAspot gaan uitlezen, moet je de plug-in ‘Dummy’ configureren; merk op dat deze geen plugin_data heeft. Maak tevens van de regel met RIPday= commentaar.

Bij de sectie [programs] is duidelijk te zien dat dit programma ontsprongen is in de Windows-wereld. Maak commentaar van de instellingen voor Windows-tools en verwijder het commentaarteken bij de Linux-tools (en pas ze eventueel aan, mochten deze tools niet jouw smaak zijn).

In de templates directory zijn twee tools te vinden, pvdiary2 en tlbn_terminal. Kopieer deze naar een directory die reeds opgenomen is in je PATH (bijvoorbeeld /usr/local/bin). Vergeet niet de twee tools het xbitje te geven (chmod +x). In deze directory staat ook g_pvdiary_cfg.php_template; kopieer deze naar /usr/share/php5/g_pvdiary_cfg.php (dus zonder _template).

Demo Data

We kijken of alles werkt, stuur je browser naar:

 

http://localhost/solardashboard/pvdiary_dashboard.php

Deze zal je de melding geven dat er geen database is. Geen probleem. Ga naar de tab Database en klik op Initial Load.

 

Klik op Demo CSV om demobestanden te genereren; vervolgens klik je op Import CSV om deze bestanden in te lezen. Controleer de bestanden door op CSV files checken te klikken, waarna je de database kunt initialiseren met Database initialiseren. Als laatste stap lezen we alle data in door op Alle DATA laden te toetsen. Vervolgens ga je terug naar de Welkom-tab, en zie daar… demo-data.

De laatste stap is dat de data nu zichtbaar gemaakt moeten worden op de publieke website. Vink info, expected en top aan en selecteer all-data. Toets op de knop Export om deze data beschikbaar te maken. Op naar de publieke website http://localhost/solar/index.htm (inderdaad zonder l!!) en je vindt daar de data.

Ga ook eens met de cursor over de grafiek. Dit zal heel veel achtergrondinformatie laten zien. De data die je ziet, zijn wel demo-data, maar komen wel uit een ‘echte’ zonnepanelenopstelling.

SMAspot
Voor het ophalen va de gegevens uit de omvormer hebben we SMAspot. Om dit automatisch te laten verlopen kunnen we de autorun-functie van PVdiary gebruiken. Ik heb echter gekozen om dit te gaan doen met cron(1), straks meer hierover. Eerst gaan we SMAspot configureren. Een template config file is te vinden op /opt/smaspot/SMAspot.cfg. Copieer deze naar een logische plaats (/etc/SMAspot.cfg). Het bestand zelf is voorzien van meer dan voldoende commentaar, dus het is eenvoudig om deze aan te passen naar je eigen omgeving.

 

Automatiseren
Het ophalen van de gegevens uit de omvormer en deze inlezen in PVdiary moet nu nog geautomatiseerd worden. PVdiary zelf heeft een AutoRun functie. Maar aangezien we op Linux zitten, kunnen we daar net zo goed, of misschien wel beter, cron(1) voor gebruiken. Dit automatiseren kan het beste uitgevoerd worden door een klein scriptje te schrijven dat we dan in de cron(1) hangen. Op deze manier kun je ook fouten gaan ondervangen, en als alles goed loopt gebeurt dit gewoon stilletjes in de achtergrond. Een voorbeeld van zo’n script ziet er als volgt uit:

 

MY_NAME=`basename $0`

SYSLOG="logger -t $MY_NAME --"

DARK=0

PVDIARY=/usr/local/bin/pvdiary

SMASPOT=/usr/local/bin/SMAspot

SMASPOTOPTS="-cfg/etc/SMAspot.cfg -am0 -v5 -d5"

OUTPUT=/tmp/getsolardata$$

OUTPUT2=/tmp/getsolardata2$$

 

${SYSLOG} INFO: Entering

# get the data

${SMASPOT} ${SMASPOTOPTS} 2>${OUTPUT} 1>${OUTPUT}

RC=$?

if [ ${RC} -ne 0 ] ; then

{

  echo "Return code of ${SMASPOT} ${SMASPOTOPTS} was ${RC} instead of 0"

  echo "Output of ${SMASPOT} ${SMASPOTOPTS}"

  echo "======================================================"

  cat ${OUTPUT}

  ${SYSLOG} ERROR: Return code of ${SMASPOT} ${SMASPOTOPTS} is ${RC}

}

fi

 

# If it is not dark then import/export into pvdiary

grep "^Nothing to do" ${OUTPUT} 2>/dev/null 1>/dev/null

NOTDARK=$?

if [ ${NOTDARK}  -eq 0 ] ; then

{

  ${SYSLOG} INFO: Its dark nothing to do

}

else

{

  ${SYSLOG} INFO: Import and export into pvdiary

  ${PVDIARY} --import --export –sync

}

fi

 

rm -f ${OUTPUT}${OUTPUT2}

${SYSLOG} INFO: Leaving

exit 0

Sla dit script op in het bestand /usr/local/bin/getsolardata en configureer de cron, zodat tijdens zonuren (neem deze ruim) dit script wordt uitgevoerd. Omvormers bemonsteren ongeveer om de 5 minuten; hou hier rekening mee tijdens het configureren van de cron job.

 

Raspberry Pi
Voor de liefhebbers, waarom een (grote) Linux-server nemen als een Pi het ook zou moeten kunnen? Een Pi kan het inderdaad ook prima. Op het forum vind je alle info die je nodig hebt om het geheel aan de praat te krijgen.

 

Dropbox
Er kunnen van allerlei redenen zijn dat je de publieke website niet zelf wilt of kunt hosten. Een alternatief zou zijn dat je een domein bij een provider aanschaft. Dit wordt volledig door PVdiary ondersteund; via FTP kun je automatisch uploaden naar je eigen website. Maar er is nog een makkelijker manier: Dropbox.

 

Dropbox kent een zogenaamde Public folder. Echter sinds oktober 2012 staat deze feature niet meer standaard aan. Geen nood, via https://www.dropbox.com/enable_public_folder kun je je eigen Public folder aanzetten (mocht je die nog niet hebben).

Met in het achterhoofd dat je Dropbox Public folder /home/arjan/Dropbox/Public is, kopieer nu de solar directory met al haar inhoud naar /home/Arjan/Dropbox/Public/solar. Via Dropbox zoek je nu het bestand Public/solar/index.htm op; selecteer het en toets op Copy public link. Deze geeft een pop-up met de link naar dit bestand (iets in de geest van https://dl.dropboxusercontent.com/u/187689081/Solar/index.htm). Onthoud deze! Deze link is de link naar je publieke site die door iedereen (ook niet-Dropbox-users) gebruikt kan worden .

Nu moet het configuratiebestand pvdiary.cfg nog aangepast worden. In pvdiary.cfg zetten we static_ftrans op file:///home/arjan/Dropbox/Public/solar/ (vergeet niet de laatste /) en url_extranet op https://dl.dropboxusercontent.com/u/198312622/solar/index.htm (dit is de public link die je onthouden moest).

De volgende keer als het bovenstaande script weer door cron(1) gerund wordt, zullen deze data geüpdatet worden en Dropbox zorgt ervoor dat de (nieuwe) data toegankelijk worden via de public link.

Eigen data
Nu de PVdiary-software werkt, gaan we een stap verder: je eigen data gebruiken. Verwijder alle .json-bestanden in /srv/www/solar/data en lager. Verwijder de database /opt/pvdiary2/data/pvdiary_demo.sqlite. Verwijder alles onder /opt/pvdiary/data/daily en maak in deze directory een nieuwe directory aan genaamd 2013.

 

De configuratiefile pvdiary.conf moet je nu aanpassen naar je eigen omgeving. Nadat de configuratie is aangepast, maak je ook een nieuwe database aan. Ga naar het dashboard (http://localhost/solardashboard/pvdiary_dashboard.php). Dit zal melden dat er geen database is. Ga naar de Database-tab en klik op Initial Load. Vervolgens toets je op Database initialiseren om een lege database te creëren.

Als de cron nu langs komt en het script runt, zullen de data uit de omvormer gelezen worden, de data in de database gebracht worden en de publieke website geüpdatet worden. Maar dit kun je natuurlijk ook de eerste keer met de hand doen. Op die wijze weet je ook of alle toegangsrechten correct staan.

Pimpen
Mocht je niet erg enthousiast zijn van het kleurgebruik in het dashboard en de publieke website, dan geen nood. Het dashboard kun je dusdanig configureren dat je eigen CSS style sheet kunt gaan gebruiken. Het pvdiary.conf-bestand kun je hiervoor aanpassen. Voor de publieke site is het een tikkeltje moeilijker, want daar zit de CSS in index.htm. Echter, met een beetje HTML-kennis plak je er een mooi plaatje achter.

 

Pvoutput.org
Er is nog een site waar heel veel zonnepanelen hun output aanbieden. Kijk eens op pvoutput.org. Dit is een site met een overzicht van heel veel installaties. Nu we toch zover zijn dat we onze data op onze eigen site kunnen laten zien, kun je de data ook aanbieden aan pvoutput.org. Registreer je hiervoor eerst op de site. Onder de link Settings vind je al je instellingen. De CSV-bestanden die reeds uit je omvormer zijn gekomen, kun je ook uploaden. Klik hiervoor op Add Output. Onder aan deze pagina vind je hiervoor de bulk loaders. Met de diverse bulk loaders kun je je CSV-bestanden uploaden. Maar het doel is om dit automatisch te laten verlopen. Dus op zoek naar een upload tool. Bij de Settings-pagina vindt je een API-sectie; klik op de Help-link (achter API Access). Deze brengt je naar een helppagina; scrol naar beneden en daar vindt je een overzicht van vele tools die je omvormer uitlezen en de data verzenden naar pvoutput.org.

 

Maar het kan nog makkelijker, SMAspot. De tool die we al gebruiken! In de config file van SAMspot (/etc/SMAspot.cfg) hoef je alleen nog Pvoutput op 1 te zetten en je Site-ID (PVOutput_Sid) en API-Key (PVOutput_Key) in te vullen. SMAspot zal nu de gegevens ook naar Pvoutput.org zenden.

Voor de site-ID en de API-Key ga je naar de Settings-pagina van pvoutput.org. Onder API Settings enable je API Access; vervolgens klik je op New Key. Deze genereert een key voor je. Deze key is je PVOutput_Key. Onderaan de Settings-pagina staan onder het kopje Registered Systems al je geregistreerde systemen. Het getal onder System ID is PVOutput_Sid.


2 De webinterface

 

Links

SMAspot
https://code.google.com/p/sma-spot

 

PVdiary
www.zonstraal.be/wiki/PVdiary
http://users.telenet.be/aps11tl/downloads/PHP_setup.zip
http://zonstraal.forumup.be/search.php?mode=results&mforum=zonstraal

 

PVdiary op Pi
http://zonstraal.forumup.be/viewtopic.php?t=16854&highlight=pvdiary+raspberry&mforum=zonstraal

 

Dropbox
www.dropbox.com/enable_public_folder

 

Pvoutput.org
http://pvoutput.org

 

NEDLINUX FORUM

Het nederlandse linuxforum
Voor beginners en pro’s

 

 

 

 

E-mailadres



 

 

Nieuwste editie:

Linuxmag op Facebook

@linuxmagnl op Twitter

linuxmagNL Linux Nieuws: @SUSE bestaat 25 jaar en trakteert! Maak kans op entreeticket voor #SUSECON in Praag, zie link!… https://t.co/ENJKDvyZQ8
linuxmagNL De nieuwe editie van Linux Magazine is weer uit! Thema: bescherm jezelf tegen hackers met Linux. Veel leesplezier a… https://t.co/Zcy3Zdjb90
linuxmagNL Ook de Red Hat Forum BeNeLux 2017 mag je dit jaar niet missen. 10 oktober 2017, zet het in je agenda! https://t.co/niY9UdK3Ov