PVdiary installatie op Raspberry Pi

Uit Pv en zonneboiler wiki
Ga naar: navigatie, zoeken

13 mei 2014: Enphase installatie compleet, security zaken gemeld, virtual hosts files uitgebreid met ServerName
27 oktober 2013: Kostal/Powerstocc installatie compleet
26 oktober 2013: SMAspot installatie compleet
3 oktober 2013: configuratiescripts virtual hosts en site-enabling aangepast!


De komende wekenmaanden ga ik op deze plaats de installatiemanual van PVdiary op Raspberry Pi maken. Stukje bij beetje, dus niet meteen gaan mailen dat 't niet af is ...

grtz,

marcelr

Vereisten[bewerken]

  • Een raspberry pi met voeding (5V, 1A)
  • Een lege SD-kaart van minimaal 2GB (meer is beter)
  • Een bekabelde ethernetverbinding voor je raspberry pi
  • Een computer met ssh client, OF
  • USB toetsenbord, muis, HDMI monitor en -kabel
  • Voor SMA inverters: een Bluetooth USB adapter. Let op, niet alle BT-adapters werken even goed, kijk hier voor goed werkende types.
  • Een paar uurtjes tijd

Waarom eigenlijk?[bewerken]

PVdiary is een gratis datalogging pakket, toegespitst op PV installaties. Anders dan de meeste van dit soort softwarepakketen is het geschreven in PHP en daarom toepasbaar op de meest uiteenlopende hardware- en software platforms. Raspberry pi is een hardware platform, ontwikkeld aan Cambridge University (UK), met als doelstelling het onderwijs op het gebied van ICT te bevorderen. Een van de vereisten was de lage prijs; een raspberry pi kost nog geen 35 euro. Daardoor heeft de verkoop een veel hogere vlucht genomen dan was voorzien; iedereen die weleens wat met computerhardware zit te knutselen is op dit platform gedoken.

Een bijkomend voordeel is dat het Operating Systeem (OS) van raspberry pi een (licht aangepaste) versie van Debian is; een van de meest gebruikte linux distributies wereldwijd. Voor dit open source OS is veel programmatuur beschikbaar en door het open karakter is zelf code maken voor dit platform ook erg gemakkelijk. Dit alles heeft ertoe geleid dat nu voor een reeks van PV inverters data-acquisitie software beschikbaar is die op een raspberry pi draait, en gemakkelijk aan PVdiary te koppelen is. Op deze manier wordt de Raspberry Pi een aantrekkelijk alternatief voor de (veel duurdere) commercieel verkrijgbare dataloggers voor PV installaties.

Bovendien heb je veel meer controle over wat er met je data gebeurt. Het ding gebruikt ook nog eens veel minder energie dan de gemiddelde laptop computer, die nu door veel mensen voor PVdiary gebruikt wordt. Daardoor kan je 'm met een gerust hart dag en nacht aan laten staan, en dan heb je geen externe webhosting meer nodig om ook buitenshuis de prestaties van je PV-installatie te kunnen volgen.

Waar te koop?[bewerken]

Particulieren kunnen een raspberry pi (met evt. toebehoren) bestellen via o.a. Element14. Ik heb zelf naast de raspberry pi ook een bijbehorende voeding en een omkasting gekocht. Micro-USB voedingen voor bijvoorbeeld telefoons of fotocameraatjes zijn meestal te zwak voor gebruik met een raspberry pi.

Preparatie van de SD-kaart[bewerken]

De raspberry pi is een mini-computer die alle functionaliteit van een gewone desktop computer heeft, alleen een disk, monitor, toetsenbord en muis moet je er nog zelf aan hangen. De "harddisk" van een raspberry pi is een SD-kaart, de zowel het OS als de software voor PVdiary moet gaan bevatten. Je kunt bij je raspberry pi een SD-kaart kopen met OS erop, maar het kost weinig moeite om er zelf een samen te stellen.

De SD-kaart voor de raspberry pi wordt in drie stappen klaargemaakt voor gebruik.

Stap 1: OS image downloaden en uitpakken[bewerken]

Download het gecomprimeerde image door op deze link te klikken. Op het moment van schrijven werkt deze link, maar natuurlijk wordt dit image regelmatig geupdate. Ga dan naar http://www.raspberrypi.org/downloads voor de laatste versie. Als je het gecomprimeerde image uitpakt krijg je een file van ca. 1.8GB, 2013-02-09-wheezy-raspbian.img. Dit is het SD-kaart OS-image voor je raspberry pi.

Stap 2: OS image naar de SD-kaart overbrengen[bewerken]

Het OS image moet vervolgens overgebracht worden op de SD kaart. Aangezien je raspberry pi van deze kaart moet opstarten (booten), kun je niet simpelweg het image kopieren naar de SD-kaart. De kaart moet vanaf de allereerste byte opnieuw beschreven worden. Afhankelijk van de soort machine die je gebruikt zijn daar verschillende programma's voor.

Windows[bewerken]

Als je Windows gebruikt ga je als volgt te werk: Download Win32DiskImager-vxx-binary.zip van http://sourceforge.net/projects/win32diskimager en pak 'm uit.

Om te testen of je SD kaart deugt kun je 'm eerst formatteren (maar dat hoeft niet per se), via de windows-verkenner (FAT-32). Zet vervolgens met Win32DiskImager het uitgepakte image 2013-02-09-wheezy-raspian.img op de SD kaart. Dit kost behoorlijk wat tijd. Geduld, dus.

Linux[bewerken]

Open een terminal, ga naar de directory waar je SD-kaart image staat (met het commando cd) en voer het volgende commando uit (als root):

dd if=2013-02-09-wheezy-raspbian.img of=/dev/mmcblk0 bs=64k

(ervan uitgaande dat /dev/mmcblk0 je SD-kaart is, dit is te checken met het commando dmesg).

Na verloop van tijd is het schrijven klaar en zegt dd:

29600+0 records in

29600+0 records out

1939865600 bytes (1.9 GB) copied, 981.676 s, 2.0 MB/s

Let op de tijdsduur, ruim een kwartier. Geduld is dus wenselijk.

Stap 3: OS-instellingen op de SD-kaart initialiseren[bewerken]

Stop de SD-kaart (met labelzijde naar beneden) in de raspberry pi, verbind de ethernetkabel en sluit de voeding aan. De raspberry pi start nu op.

Voor eerste gebruik moeten een paar aanpassingen gedaan worden aan het vers geinstalleerde OS. Als je je raspberry pi aan een monitor hebt verbonden krijg je het hierbeneden aangegeven menu bij opstarten. Als je je raspberry pi benadert via een terminal en ssh geef je het volgende commando: sudo raspi-config Je krijgt dan het volgende menugestuurde configuratietool:

Raspi-config
info Information about this tool expand_rootfs Expand root partition to fill SD card overscan Change overscan configure_keyboard Set keyboard layout change_pass Change password for 'pi' user change_locale Set locale change_timezone Set timezone memory_split Change memory split overclock Configure overclocking ssh Enable or disable ssh server boot_behaviour Start desktop on boot? update Try to upgrade raspi config
<Select> <Finish>

De belangrijkste items die aangepast moeten worden zijn:

  • expand_rootfs: past de diskruimte aan aan de grootte van de SD-kaart, doen.
  • change pass: stelt een nieuw password in voor user pi, dit zeker doen.
  • change_timezone: Kies Europe, en daarna Brussels of Amsterdam, naar gelang je voorkeur. Voor de systeemtijd maakt 't geen barst uit, zolang je maar een plaats kiest in dezelfde tijdzone met de goede zomertijd/wintertijd regeling.
  • memory_split: geeft het geheugengebruik voor de GPU aan. Aangezien de raspberry pi headless (zonder toetsenbord, muis en monitor) gebruikt gaat worden, dit zo laag mogelijk instellen (16).
  • ssh: ssh toegang aan of uit. AAN laten staan, anders kom je je raspberry pi niet meer in.
  • boot_behaviour: Wel of geen grafische desktop bij opstarten. Mag uit, omdat de raspberry pi headless gebruikt gaat worden.

Als alle instellingen gedaan zijn, reboot je raspberry pi om alles te activeren.

Safety first![bewerken]

Een van de wat mindere eigenschappen van raspbian is de beperkte aandacht voor internet veiligheid. Op zich niet zo gek, want de raspberry pi is niet ontwikkeld met webhosting en andere publiek toegankelijke services in gedachten. Het gevolg is dat elke gebruiker standaard root privileges krijgt via het sudo-commando. Daar gaan we wat aan doen.

Allereerst heeft root (Vergelijkbaar met Administrator onder windows) een eigen password nodig. Dit maak je met 't volgende commando:

sudo passwd

Er wordt gevraagd om een password. Zorg dat dit een sterk password is, dus: minimaal 8 karakters, Hoofdletters/kleine letters, cijfers, haken etc gebruiken. Zorg dat het GEEN bestaand woord is, of iets dat daarop lijkt.

Verderop gaan we ook nog sudo voor een paar gewone users uitschakelen, maar nu nog niet.

Keyboard aanpassing[bewerken]

Als je een niet-QWERTY toetsenbord aan je raspi hebt hangen (of aan je ssh client) is het handig om de toetsenbord instellingen op je raspi aan te passen. Login als root en ga naar /etc/default:

cd /etc/default

Edit de file keyboard:

nano keyboard

of

vi keyboard

en verander de regel

XKBLAYOUT="gb"

(voor Belgisch AZERTY) in:

XKBLAYOUT="be"

N.B. nano en vi zijn platte tekst editors, vi is een klassieker, maar is iets meer gedoe dan nano. Manuals voor beide zijn te vinden op 't net, ga ik hier niet uitleggen. Als je wat vaker met linux systemen werkt is het aan te raden om je vi eigen te maken, ELKE distributie, rescue disc en live cd heeft 'm. Nano is er niet altijd.

Installatie van de http-server, sqlite en PHP[bewerken]

PVdiary is geschreven in PHP, en slaat data op in een sqlite database. De grafische weergave gebeurt via een website. Dientengevolge heb je software nodig om dat te bewerkstelligen.

Voor installatie van software gebruikt rasbian het programma apt. Log in als root, of:

sudo bash

Dit geeft je een root shell (vergelijkbaar met het cmd.exe window in Windows. In de rest van dit verhaal gebruik ik de term shell voor zo'n window), en dan hoef je niet elke keer sudo in te tikken.

Update[bewerken]

Allereerst wordt de software op je raspberry geupdate. Dit is nodig omdat de packages (pakketten) die je nodig hebt om PVdiary te draaien alleen in hun laatste versie aangeboden worden.

apt-get update

Dit update de package database van je raspberry pi, en zorgt ervoor dat versienummers van te installeren softwarepakketten kloppen.

De webserver, apache2[bewerken]

Als eerste installeren we apache, dit is de meest gebruikte webserver wereldwijd. Letterlijk het halve internet draait erop.

apt-get install apache2 apache2-utils

Meteen na installatie wordt de server gestart, maar daar hebben we nu nog niks aan.

sqlite[bewerken]

Vervolgens de database software.

apt-get install sqlite3

PHP[bewerken]

En als laatste PHP (PersonalHomePage), de scripttaal waarin PViary grotendeels geschreven is.

apt-get install php5 php5-sqlite php5-cli libapache2-mod-php5

Alle software nodig voor PVdiary is nu geinstalleerd.

Configuratie van de http-server[bewerken]

Apache is een webserver met een schier oneindige hoeveelheid opties en instelmogelijkheden. Tot nu toe ben ik nog geen GUI tegengekomen om die allemaal in te stellen, dat moet dus met het handje, met een tekst editor gebeuren. Op een raspberry pi zijn er in elk geval twee beschikbaar: vi en nano. Vi is -de- klassieke editor voor UNIX systemen, maar heeft een zeer typische bediening. Nano is wat moderner, en iets intuitiever. Als je flexibel wilt zijn en onder alle omstandigheden iets aan je systeem wilt kunnen doen is het handig om je vi aan te leren, zelfs in de meest simpele installatie van linux zit 't ding in.

Communicatie met servers loopt over zg. service poorten. Elk communicatieprotocol heeft z'n eigen servicepoort. Apache gebruikt standaard poort 80 (http protocol), maar de makers van PVdiary hebben besloten om dat anders te doen. PVdiary gebruikt twee servicepoorten, 8081 en 8082, voor resp. de wereldwijd zichtbare website en het dashboard. Het dashboard is een aparte website om instellingen aan PVdiary te kunnen doen. Die heb je niet per se nodig, maar als je geen zin hebt in command-line teksten intikken is het een uitkomst.

In het verloop van dit verhaal zal ik alles aan de hand van de commandline interface uitleggen.

Aangezien de twee poorten niet standaard zijn moet dat in de apache configuratie veranderd worden.

De tweede wijziging betreft de gebruiker van apache. Standaard is dat apache.apache (user apache, group apache), maar het is handiger om daar pvdiary2 van te maken, dat is nl. de default gebruiker zoals ingesteld in PVdiary.

Dat vergt dus ook een wijziging van de apache configuratie, en bovendien de aanmaak van een nieuwe gebruiker, want die pvdiary2 bestaat standaard niet.

Aanmaken van gebruiker pvdiary2[bewerken]

Login op je raspberry pi en open een root shell (als je als root inlogt heb je die vanzelf, als je als pi inlogt krijg je die met sudo bash). Tik in:

adduser pvdiary2

Nu wordt de user pvdiary2 aangemaakt, in group pvdiary2, met homedirectory /home/pvdiary2 Als je wilt kun je nog wat persoonlijke gegevens meegeven (niet erg relevant voor een webserver). Kies als password ook weer een sterk password, minimaal 8 karakters (meer is beter), hoofdletters/kleine letters/ cijfers, haken etc.

root@raspberrypi:/home/pi# adduser pvdiary2
Adding user `pvdiary2' ...
Adding new group `pvdiary2' (1002) ...
Adding new user `pvdiary2' (1001) with group `pvdiary2' ...
Creating home directory `/home/pvdiary2' ...
Copying files from `/etc/skel' ...
Enter new UNIX password: 
Retype new UNIX password: 
passwd: password updated successfully
Changing the user information for pvdiary2
Enter the new value, or press ENTER for the default
	Full Name []: 
	Room Number []: 
	Work Phone []: 
	Home Phone []: 
	Other []:
Is the information correct? [Y/n] Y

Configuratie van de apache user[bewerken]

Open de file /etc/apache2/envvars met een editor en verander de volgende twee regels:

export APACHE_RUN_USER=www-data
export APACHE_RUN_GROUP=www-data

in:

export APACHE_RUN_USER=pvdiary2
export APACHE_RUN_GROUP=pvdiary2

en sla de file op.

Configuratie van de server poorten 8081 en 8082[bewerken]

Aangezien apache twee websites gaat serveren, moeten er twee zg. virtual hosts aangemaakt worden. Dat gebeurt in twee stappen, nl. server:poort adressen aanmaken en de DocumentRoot van deze twee virtual hosts opgeven. De server:poort adressen staan in /etc/apache2/ports.conf. verander in deze file

NameVirtualHost *:80
Listen 80

in:

NameVirtualHost aaa.bbb.ccc.ddd:8081
NameVirtualHost aaa.bbb.ccc.ddd:8082
Listen aaa.bbb.ccc.ddd:8081
Listen aaa.bbb.ccc.ddd:8082

met aaa.bbb.ccc.ddd het (vaste!) IP-adres van je raspberry pi. De instelling van de DocumentRoot gebeurt in twee aparte files (een voor elke virtual host).

Virtual hosts worden per stuk aangemaakt in de directory /etc/apache2/sites-available Het handigste is om de default site twee keer te kopieren, naar de files pvdiary-dashboard en pvdiary-www

cd /etc/apache2/sites-available

cp default pvdiary-dashboard
cp default pvdiary-www

Edit dan deze files als volgt: het vet gedrukt aanpassen, (aaa.bbb.ccc.ddd is telkens het IP-adres van je raspi)

pvdiary-dashboard:

<VirtualHost aaa.bbb.ccc.ddd:8081>
        ServerAdmin webmaster@localhost
        ServerName pvdiary-dashboard

        DocumentRoot /home/pvdiary2/httpd
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/pvdiary2/httpd/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        #ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        #CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

pvdiary-www:

<VirtualHost aaa.bbb.ccc.ddd:8082>
        ServerAdmin webmaster@localhost
        ServerName pvdiary-www

        DocumentRoot /home/pvdiary2/httpd/www
        <Directory />
                Options FollowSymLinks
                AllowOverride None
        </Directory>
        <Directory /home/pvdiary2/httpd/www/>
                Options Indexes FollowSymLinks MultiViews
                AllowOverride None
                Order allow,deny
                allow from all
        </Directory>

        ScriptAlias /cgi-bin/ /usr/lib/cgi-bin/
        <Directory "/usr/lib/cgi-bin">
                AllowOverride None
                Options +ExecCGI -MultiViews +SymLinksIfOwnerMatch
                Order allow,deny
                Allow from all
        </Directory>

        #ErrorLog ${APACHE_LOG_DIR}/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        #CustomLog ${APACHE_LOG_DIR}/access.log combined
</VirtualHost>

Om de site te activeren, dienen in de directory /etc/apache2/sites-enabled twee symbolic links naar de pvdiary virtual hosts gemaakt te worden. Ga naar /etc/apache2/sites-enabled en voer het volgende commando uit:

a2ensite pvdiary-dashboard pvdiary-www

Voordat de webserver herstart kan worden, moeten de paden naar de (nog niet bestaande) websites aangemaakt worden:

mkdir -p /home/pvdiary2/httpd/www

De rechten juist zetten (vergeet het * niet)

cd /home/pvdiary2/
chown -R pvdiary2.pvdiary2 *

Herstart de webserver:

service apache2 restart

Als het niet lukt om de webserver te hertsarten, reboot dan het systeem.

reboot

Als alles goed gegaan is kun je nu met je webbrowser naar je raspberry pi:

http://aaa.bbb.ccc.ddd:8081

met aaa.bbb.ccc.ddd het IP-adres van je raspberry pi, en krijg je iets te zien in de trant van "It works!"

Installatie van PVdiary[bewerken]

Eerst en vooral heb je de PVdiary software nodig om PVdiary te kunnen gebruiken. Je kunt de software downloaden van de webpagina's van Leslie: Log in op je raspberri pi (als pvdiary2), ga naar /home/pvdiary2/httpd en geef het volgende commando:

 wget http://users.telenet.be/aps11tl/downloads/PHP_setup.zip

Dit downloadt de PVdiary installer en plaatst die in de directory waar je nu bent. Pak de installer uit met

unzip PHP_setup.zip

Dat geeft twee files: PHP_setup.hta en PHP_setup.php. De laatste heb je nodig, de andere is de windows installer (kun je niks mee op een raspi).

Ga nu met je browser naar de webpage waar je PHP_setup.php hebt neergezet:

http://aaa.bbb.ccc.ddd:8081/PHP_setup.php

Als 't goed is krijg je een scherm dat er ongeveer zo uitziet:

startscherm voor PVdiary installatie

Klik op "PVdiary" om de installatie te starten. De installer downloadt de PVdiary-software van Leslie's site en installeert die. Op 't einde krijg je de melding "Version 2.0.zz.0j installed OK".

Onderdeel van de installatie is de aanmaak van de file g_pvdiary_cfg.php_template in /home/pvdiary2. Voor een goede werking van PVdiary moet deze file (afhankelijk van je php-installatie) verplaatst worden naar /usr/share/php of /usr/share/php5. Deze directories zijn onderdeel van het php include_path. Check dit pad met het volgende:

php -i | grep include_path

Je krijgt nu het php include path te zien:

pvdiary2@raspberrypi ~ $ php -i | grep include_path
include_path => .:/usr/share/php:/usr/share/pear

Bij deze wordt het dus /usr/share/php. Maar bij mijn versie van PHP (geinstaleerd begin maart 2015) bestaat /usr/share/php niet, dus maken we hem aan met:

mkdir /usr/share/php

Verplaats en rename de file nu met:

mv /home/pvdiary2/g_pvdiary_cfg.php_template /usr/share/php/g_pvdiary_cfg.php

Nu zorgen dat de gebruiker pvdiary2 de files mag lezen:

chmod a+r /usr/share/php
chmod a+r /usr/share/php *

De commandline interface van pvdiary bestaat uit een php script (pvdiary.php) dat vindbaar moet zijn. Direct na installatie staat deze file in /home/pvdiary2/templates. Kopieer de file naar /usr/local/bin:

cp /home/pvdiary2/templates/pvdiary /usr/local/bin/

Nog wat rechten juist zetten :

cd /home/pvdiary2
chown –R pvdiary2.pvdiary2 *
cd /usr/local/bin
chmod +x pvdiary

Herstart webserver :

service apache2 restart

en test of 't werkt:

pvdiary

Dat geeft een beknopte handleiding van pvdiary, als 't goed is. Alle software die nodig is om pvdiary (nog zonder logging software!) te laten werken staat nu op de goede plaats.

Door nu naar de publieke website van PVdiary te gaan (http://aaa.bbb.ccc.ddd:8082), krijg je het framework van je PVdiary site te zien. Je kunt nu PVdiary gaan configureren.

Configuratie van PVdiary[bewerken]

PVdiary wordt geconfigureerd via de configuratiefile pvdiary.cfg, in /home/pvdiary2. Direct na installatie ziet die file er zo uit:

; laatste update: 2012-12-12 
;   *********  Template configuration file voor pvdiary       ************
;
;   Belangrijk : Geen spaties na het einde van een definitie van een variable, dus na de laatste double quote
;     Vanaf PVdiary 2.1 zijn de parameter path_data, path_log en path_backup verwijderd uit de config
;     en vastgelegd met constanten in g_pvdiary_cfg.php
;   Tip: Laat steeds de originele lijn staat voorafgegaan met ;
;        Indien je twijfelt, laat de originele setting staan!!
;      
;   Elke rubriek moet afgesloten worden met een lijn die ";EOS" bevat
;   Sommige parameters zijn nog niet uitgetest, deze zijn aangeduid met "optioneel".
;
;   plant_id: unieke naam voor bepalen van Pvdiary database naam
;       - om problemen te vermijden, geen spaties of speciale letters gebruiken in je plantnaam
;       - liefst minder dan 15 karakters
;       - heeft niets te maken met de plant gebruikt in Sunny Explorer
;
 plant_id = "demo"
;
[pv_info]
;*******************************************************************************
;   Algemene PV info
;       - longitude, latitude worden gebruikt voor het berekenen van de gele lijn
;       - location: wordt weergegeven op je website in menu "Info"
;       - contact: je hebt drie mogelijkheden
;               - "zonstraal:NUMMER" : om pb's te kunnen ontvangen via het zonstraalforum vul je zonstraalNUMMER in
;               - "iframe:webadres" : als je zelf een contactformulaar wilt aanmaken
;               - "email:naam@provider.com" : om een emailadres te tonen
;       - show_max: geeft aan of de grijze lijnen voor "Max vermogen +-7 dagen" getoond moet worden, zet op 0 indien niet
;       - refresh: aantal minuten om de webpage te refreshen. Set op 0 als je geen auto-refresh wilt.
;       - colors: 
;            - moet beginnen en eindigen met een " , en tussen de kleuren een komma 
;            - de 7 kleuren zijn (in deze volgorde): achtergrond pagina, achtergrond grafieken & navigatie & header & footer,
;              tekstkleur, geselecteerd bar, werkelijk-vermogen bar, 7-dagen-max bar & chart assen, clear-sky-opbrengst lijn
;
 longitude = 4.385
 latitude = 51.134
 location = "Demoland"
 contact = "zonstraal:00000"
 show_max = 7
 refresh = 5 
; colors = "#8E0000,#FFE6E6,#5C0000,#5C0000,#8E0000,#FFCECE,#6A1B1B"
;EOS
;
[gs_GSC]
;*******************************************************************************
;  GSC meters
;         - gsc_day1 , stand van de meter bij installatie
;         - gsc_initial, stand van de meter bij keuring, wordt gebruikt als trigger voor gsc
;         - gsc_reference,  afgelezen stand van de meter en datum, tijd in formaat JJJJ-MM-DD hh:mm gescheiden door " at "
;                voorbeeld "167.3 at 2012-03-01 13:00"   = Op 1 maart 2012 13:00 was de afgelezen stand 167,3 kWh
;                   belangrijk, geen komma maar een punt gebruiken in de kWh  !!
;         - gsc_correction, correctiefactor (1000 = geen afwijking tussen omvormer en GSCmeter)
;                voorbeeld
;                Wanneer de GSC-meter 1% meer geeft dan de omvormer(s), specifieer dan 1010.
;                Voor 0,5% minder, specifieer 995 
;                              
 gsc_day1 = 0
 gsc_initial = 0
 gsc_reference = "8061.15 at 2011-06-09 12:00"
 gsc_correction = 998.6
;
;EOS
;
[cl_SB5000TL]
;*******************************************************************************
;   OMVORMERS
;
;   Informatie over je omvormers
;       - je kunt de naam kiezen, maar gebruik geen spaties en geen speciale letters, moet beginnen met "cl_"
;       - import_params = "CSV flags csv serial plugin plugin_data"
;                           CSV ....... geeft aan dat het gaat om een CSV file 
;                           flags ..... normaal 0, op 3 zetten voor omvormers zonder geheugen
;                                bit_0 : if set, only safe_inserts in db allowed
;                                bit_1 : if set, force always import of today
;                                bit_6 : if set, make a copy of the csv after the import
;                                bit_7 : if set, CSV format is not SunnyExplorer compatible - Use CSV_params en CSV_time 
;                           csv ........ eerste deel van de csv-file, meestal gelijk aan sx2_file voor SunnyExplorer
;                           serial ..... verplicht voor safe_inserts, op 0 zetten indien onbelangrijk
;                           plugin ..... programma dat verbinding maakt met omvormer.
;                                      SunnyExplorer, OpenSunny, Dummy, Download  
;                           plugin_data ... plugin afhankelijke settings
;                                    voor SunnYExplorer geeft hier de .sx2 file zonder pad
;                   
;
;           Voorbeelden:
;                 import_params =  "CSV 0 plant0001 0 SunnyExplorer plant0001.sx2"
;       - gsc_name, verwijzing naar de GSC-meter (gs_xxxxx moet opgezet worden)
;       - day1 : dag wanneer de omvormer in gebruik werd genomen in formaat YYYYMMDD
;       - RIPday : dag wanneer omvormer uit dienst is genomen, in commentaar zetten indien nog in gebruik.
;       - use_dlst : CSV file bevat tijden in zomer/winter(=1), op 0 plaatsen indien geen zomer-winter tijdsprong
;                    indien niet gespecifieerd wordt 1 (zomer/winter uur) aangenomen. 
;       - gsc_cost: waarde van een GSC in Euro
;       - ele_cost: prijs in Euro per kWh elektriciteit
;       - kg_co2_kWh, co2_km: laat dit staan, is voor de "Milieuberekening"
;
 import_params = "CSV 0 demo1 0 SunnyExplorer demo1.sx2"
 gsc_name = "GSC"
 day1 = "20101206"
 RIPday = "20120718"
 use_dlst = 1
 gsc_cost = 300
 ele_cost = 0.18
 kg_co2_kWh = 0.5
 co2_km = 0.1
;
; HIER EVENTUEEL DE VOLGENDE OMVORMER. PAS OP MET DE NAMEN [cl_Omvormer2]  ...
;EOS
;
[pv_string_1]
;*******************************************************************************
;   STRINGS
;
;   Informatie over de strings van je pv
;       - naam doorlopend pv_string_1, pv_string_2, pv_string_3 ...
;       - cl_name: aan welke omvormer hangt die string? Dit moet overeenkomen met de naam van de omvormer boven [cl_SB5000TL]
;       - pv_watt: peakwatt van deze string in Watt
;       - estim_kwh: verwachte opbrengst per maand volgens jrc of PVcalc
;       - pv_az: orientatie van je pv: noord=0,oost=90,zuid=180,west=270
;       - pv_roof: dakhelling tussen 0 graden en 90 graden
;       - pv_temp_coeff: wordt gebruikt voor de gele lijn. Je vind dit terug in je datablad van je panelen als "delta P"
;         met als eenheed "% per Graad Celsius". Als je dit niet weet, laat -0.48 staan, dit is zowat het gemiddelde.
;       - panels: beschrijving die op je website verschijnt bij "Info" 
;       - generator: beschrijving die op je website verschijnt bij "Info" 
;
; 
 cl_name = "SB5000TL"
 pv_watt = 5500
 estim_kwh = "162,231,372,502,589,570,589,548,420,313,177,125"
 pv_az = 232
 pv_roof = 45
 pv_temp_coeff = -0.48
 panels = "22 x Mage Powertek Plus 250/5 MR"
 generator = "SMA SB5000TL-20"
;
; string2 - optioneel - als je nog een tweede string hebt op deze omvormer met een andere orientatie/dakhelling
;
; HIER EVENTUEEL DE VOLGENDE STRING. PAS OP MET DE NAMEN [pv_string_2] ...
;EOS
;
;*******************************************************************************
[web]
; nog een aantal pv-parameters die nodig zijn voor de goede werking ...
;
;   static_ftrans: je hebt twee opties, ofwel ftp ofwel dropbox
;       - ftp: adres van je Internetprovider (aanpassen met je eigen ftp-adres, gebruikersnaam en passwoord)
;       - dropbox: pad naar je publieke dropbox folder voorafgegaan met "file:///"
 static_ftrans = "ftp://USERNAME:PASSWORD@users.skynet.be/pvdiary/"
; static_ftrans =  "file:///D:\Documents\Thomas\Dropbox/Public/pvdiary/"
;
;   ftp_flags : flags voor ftp transfer
;               1 = "passive mode"
ftp_flags = 0
;
;
;   OPTIONEEL: url_extranet - voor debugging (vervang met je eigen webadres)
 url_extranet = "http://users.skynet.be/betberge/pvdiary/"
; url_extranet = "http://dl.dropbox.com/u/29535048/pvdiary/index.htm"
;
;   url_local - adres lokale webserver ( normaal niet wijzigen )
;      default value "/www/index.htm"
 url_local = "/www/index.htm"
;
;   http://www.php.net/manual/en/datetime.formats.relative.php (strtotime)
;   expected_str2time = geeft aan wanneer de 7-dagen-max berekend moet worden. 
;   Best op "today" laten staan dan gebeurt dit een keer per dag
 expected_str2time = "today"
;
;   data_dir = pad naar de folder waarin je json-files zullen opgeslagen worden (lokaal en op je website)
;   dit is een subdirectory van "static_dir" - deze moet je niet wijzigen !
;   default value "data/"
 data_dir = "data/"
;
;   zonstraal = formatstring om te posten op het zonstraal form - maandelijkse opbrengsten (optional) 
 zonstraal = ":arrow:  zonneman: %.1f kWh = %.1f kWh/kWp of %.2f kWh/kWp/dag (H:35°, O:175° , Demoland)"
;
;EOS
;*******************************************************************************
[programs]
;  programs: geeft aan welke tools gebruikt moeten worden in het dashbord
;  OPTIONEEL: BEST NIET WIJZIGEN TENZIJ JE WEET WAT JE DOET !
 explore = "explorer"
 edit = "notepad"
;
; for linux zijn volgende settings beter ...
; edit = "gedit"
; explore = "nautilus"
;EOS
;*******************************************************************************
[cleanup]
; cleanup: geef hier aan welke files deleted worden bij een --cleanup
;          en of de cleanup operatie default in "test" modus werkt
;   Wanneer je pvdiary automatizeert met --interval,
;    loopt de cleanup automatisch 1 x per dag
;
;  elke lijn bestaat uit 3 veldjes, gescheiden met een spatie
;     files[] = "id file_met_joker tijd_string"
;   id kan zijn 
;     LOG ...... files in LOG directory
;     BACKUP ... files in BACKUP directory
;     DATA ..... files in DATA directory  *** Oppassen ***
;   Indien je andere folders wenst op te geven, moet je bijkomende id's hier aangeven
;   bv.
;      TMP = "C:\Temp\
;      files[] = "TMP pvdiary/*.tmp now-1day"
;
;   De tijdstring is een string zonder spaties die voor de functie strtotime OK is
;   Hierbij maak je best gebruik van now (= huidige dag en tijd)
;      en today (= huidige dag om 00:00) of yesterday
;   bv.
;      today-3days ... files ouder dan 3 dagen
;      now-1day ...... files ouder dan 24 uur
;      now-12hours ... files ouder dan 12 uur
;      today-31days .. files ouder dan 1 maand
;
 files[] = "LOG pvdiary_20*.log today-30days"
 files[] = "LOG pvdiary_cb_20*.log today-3days"
 files[] = "BACKUP *_20*.csv_20* today-14days"
;
;     
; 
;    met "pvdiary --cleanup --test" forceer je steeds een test
;        "pvdiary --cleanup --notest" forceer je steeds een echte cleanup
;        "pvdiary --cleanup" zal afhankelijk van de config kiezen voor test of notest
;  verwijder het commentaar van volgende lijn om de cleanup echt te doen
;notest = 1 
;EOS
;*******************************************************************************
[autorun]
;  pvdiary automatizeren
;  plaats het commando "pvdiary --autorun" in de startup-folder of in taakbeheer
;    exit-at ...... tijd wanneer job zal stoppen
;    initial_delay .. tijd in seconden vooraleer autorun actief wordt.
;    exec_at_start .. uit te voeren bij start van autorun
;    exec_at_exit ... uit te voeren op het einde van autorun
;    exec[] = "Id;start,einde,interval;commando" (gebruik @sunrise en @sunset indien nodig)
;    min_interval = minimum interval in  seconds between waqkeups, default 300
;     
 exit_at = "@sunset+40minutes"
 exec[] = "Import;@sunrise,@sunset+20minutes,30 minutes;pvdiary --import --export --sync"
; exec[] = "Cleanup;@sunrise-20minutes, @sunrise, 1 day ;pvdiary --cleanup"
 exec[] = "Backup;@sunset+30minutes  , 23:59,  7 days ;pvdiary --db --backup"
;
;EOS
;*******************************************************************************
; nieuw sinds 2.0zo ...
[dashboard]
;   Gebruik een eigen geschreven css file voor het dashboard om kleuren en layout
;   aan te passen naar jouw smaak. (default waarde : css/pvdiary_dashboard.css) 
; css = "css/mypvdiary_dashboard.css"
;
;    Het commando achter de "Import" knop in de welkom tab kan aangepast worden
;    door de but_import aan te passen ...
; but_import = "pvdiary --import"
;
;
;    Configweb op 1 plaatsen om de cofnfig aan te kunnen passen via het dashboard
 configweb = 1
;
;EOS
;*******************************************************************************
[SunnyExplorer]
;
; sunexp = pad naar sunnyexplorer.exe 
;     default value "%ProgramFiles%\SMA\Sunny Explorer\sunnyexplorer.exe"
 sunexp = "%ProgramFiles%\SMA\Sunny Explorer\sunnyexplorer.exe"
;
; 
; sunsxpdir = windows file pad naar sunny explorer plant file (alleen de pad, zonder plantfilename)
;       default value "%Userprofile%\SMA\Sunny Explorer\"
 sunsxpdir = "%Userprofile%\SMA\Sunny Explorer\"
;
;  pskill = program to stop hung sunny explorer process
 pskill = "/home/pvdiary2\winhta\pskill"
;
;   sunpwd = paswoord voor sunny explorer plantfile
 sunpwd = "0000"
;
;   OPTIONEEL - ALLEEN WIJZIGEN ALS JE PROBLEMEN HEBT BIJ HET UITLEZEN VAN DE CSV's:
;    params = timeout for task SUNEXPORT (start, single_day , multiple_day , termination) in seconds
;        fifth parameter can be 5 (=normal window) or 7 (=minimized window) or 0 (=hidden window)
;         (pskill will be used to stop hung sunnyexplorer processes)
;    default value "30,100,400,10,7"
  params = "30,100,400,10,7"
;EOS
;********************************************************************************
[verbruik]
;  section verbruik
;    file = path to the textfile containing consumption. This file should be updated manually
;    ref_date = Last billing date (format YYYY-MM-DD 00:00)
;    rate_d = dagtarief in euro per kWh
;    rate_n = nachttarief
;    rate_en = exclusief nachttarief (accumulatie - boiler)        
 file = "/home/pvdiary2/data/meterstand.txt"
 ref_date = "2010-08-01 00:00"
 rate_d = 0.1617843
 rate_n = 0.0998508
 rate_en = 0.0828255
;
;EOS
;********************************************************************************

Het is een enorme lap tekst, bestaande uit een aantal stukken die de configuratie van de inverter, panelen, datalogging, kostenbesparing, internetverbindingen etc. regelen. Om e.e.a. aan de praat te krijgen moeten minimaal de installatieconfiguratie (dus de combinatie panelenstrings met inverter(s) en orientatie), de inverter communicatiesoftware en autorun opties ingesteld worden. De hoofdrubrieken zijn te onderscheiden door een rubieksnaam in vierkante haken; [rubrieksnaam] aan het begin en een End-Of-Section marker aan het einde: ;EOS. Ter verduidelijking heeft Leslie ook nog eens een regel sterretjes na de ;EOS-marker geplaatst (al is dat in het begin niet heel consequent gebeurd ;-) ). Naast de info die leslie zelf geeft in de file, voldgt hier nog wat verdere verduidelijking van een aantal rubrieken. Bovendien is de installatie van logging net een fractie anders op een raspi dan bijvoorbeeld op een windows machine.

plant_id[bewerken]

De file begint inhoudelijk met de zgn. plantnaam, dat is de naam die je kiest voor je installatie. Bij de meeste invertertypen (merken) is die vrij te kiezen (Bij Kostal niet, kom ik later op terug). De plantnaam wordt een onderdeel van de logging filenamen, kies dus een naam die een geldige filenaam kan zijn op een linux ext3 filesysteem (dus geen spaties, en zeker geen *, ?, &, \, / in de naam opnemen). Voorbeelden:

plant_id = "demo"
plant_id = "PV-installatie-van-xxx"
plant_id = "test_12_12"
etc ...

[pv_info][bewerken]

Dit stuk bevat locatie van de installatie en weergave-gegevens voor de website:

longitude = 4.385
latitude = 51.134
location = "Demoland"
contact = "zonstraal:00000"
show_max = 7
refresh = 5 

Locatie: Zoek longitude (lengtegraad) en latitude (breedtegraad) van je installatie op via bijvoorbeeld google maps, en vul die getallen in. Als je niet gemakkelijk gevonden wilt worden (de locatiedata zijn via je publieke site terug te vinden), plaats dan niet meer dan twee decimalen. Om een goede schatting van je opbrengst te hebben via de ingebouwde PVcalc is de locatie wel nodig. Ook als je je site aanmeldt op PVmap (zeker doen!) is aanpassing van de locatie essentieel, anders belandt het zonnetje voor je locatie in de buurt van thomasb. En het is al zo druk met installaties net ten zuiden van Antwerpen.

Vervang in "location" Demoland door de plaatsnaam waar je installatie zich bevindt.

Bij contact kun je o.a. je gebruikersnaam en -nummer op het zonstraal forum ingeven. N.B. sinds de verhuizing van forumup naar zonstraal.be zijn in elk geval de nummers veranderd.

show_max geeft het aantal dagen voor en na de dag waar je naar kijkt op de site, waarvan de maximum opbrengst per vijf minuten wordt weergegeven. Klinkt ingewikkeld, maar het doet niks anders dan op de daggrafiek de maximale opbrengst op hetzelfde tijdstip, van eerdere dagen, over verschillende jaren afbeelden. Je kunt dan meteen zien of je dagopbrengst beter/slechter is in vergelijking met vergelijkbare dagen.

refresh geeft de refresh-rate van je site aan. Kies veelvouden van 5, andere getallen hebben weinig zin omdat de metingen telkens over 5 minuten gemiddeld worden.

[gs_GSC][bewerken]

Per gsc-meter een tabel met een unieke naam, bijvoorbeeld gs_GSC, gs_GSC2, etc ... Zie uitleg in de configuratiefile hierboven, verder commentaar overbodig.

[cl_SB5000TL][bewerken]

Eigenlijk had dit kopje [cl_omvormernaam] moeten heten. Wat hier volgt is een serie (minimaal 1) sectie met informatie van de omvormer(s) die je gaat loggen. Per omvormer een sectie, dus

[cl_omvormernaam1]
.... 
;EOS
[cl_omvormernaam2]
.... 
;EOS
...

De omvormernaam moet uniek zijn (dus niet twee keer dezelfde gebruiken) en mag geen spaties bevatten. De naam (zonder cl_ voorop) wordt later gebruikt in de logging van de strings die aan de betreffende omvormer hangen. Kies een beetje fatsoenlijke namen, want ze worden zichtbaar op je website.

De parameters die in deze rubriek ingesteld worden zijn de volgende:

 import_params = "CSV 0 demo1 0 SunnyExplorer demo1.sx2"
 gsc_name = "GSC"
 day1 = "20101206"
 RIPday = "20120718"
 use_dlst = 1
 gsc_cost = 300
 ele_cost = 0.18
 kg_co2_kWh = 0.5
 co2_km = 0.1

import_params: Dit geeft de wijze aan waarop PVdiary met de omvormers communiceert. Is per omvormertype/merk verschillend, en afhankelijk van het operating systeem dat je computer draait. De uitleg is vrij uitgebreid, volgt in een apart hoofdstuk.
gsc_name: naam van de gsc-meter uit de vorige tabel, zonder gs_ voorop.
day1: startdag van de logging. In 't algemeen zal dit de opstartdag van de installatie zijn.
RIPday: laatste dag van de logging (bij buitenbedrijfsstelling (3xww)van de PV-installatie) Als je installatie nog gewoon werkt, dit open laten (RIPday ="").
use_dlst: Wel (1) of geen (0) zomertijdsinstelling op je omvormer.
gsc_cost: Stuksprijs voor je gsc's.
ele_cost: kWh-prijs
kg_co2_kWh: Kilogrammen CO_2 uitstoot per kWh.
co2_km: Kilogrammen CO_2 uitstoot per km van je auto.

[pv_string_1][bewerken]

Deze rubriek bevat technische informatie omtrent je strings van panelen. De data die je ingeeft worden met name gebruikt om een schatting van je clear-sky opbrengst te maken, en om de verwachting per maand/jaar weer te geven. Net als bij de omvormers kan dit kopje uit meerdere strings bestaan:

[pv_string_1]
...
;EOS
[pv_string_2]
...
;EOS
..

Per string de volgende data ingeven:

cl_name = "SB5000TL"
pv_watt = 5500
estim_kwh = "162,231,372,502,589,570,589,548,420,313,177,125"
pv_az = 232
pv_roof = 45
pv_temp_coeff = -0.48
panels = "22 x Mage Powertek Plus 250/5 MR"
generator = "SMA SB5000TL-20"

cl_name: Naam die je je omvormer in deze file hebt gegeven, zonder de "cl_".
pv_watt: Nominaal vermogen van de panelen in deze string, in Watt (W).
estim_kwh: Geschatte opbrengst per maand van deze string, in kiloWattuur, (kWh). Uit te rekenen via jrc, of PVcalc.
pv_az: azimuth ("kijkrichting") van de panelen in deze string t.o.v. het noorden, in graden, met de klok meedraaiend (oost = 90 graden, zuid 180, west 270).
pv_roof: hoek van het dak met horizontaal, in graden.
pv_temp_coeff: Temperatuurcoefficient van je panelen. Zie de technische specificaties van je panelen, daar moet 't in staan.
panels: aantal, merk en type van je panelen. Geen onzin opschrijven, dit komt nl. leesbaar op je website te staan.
generator: merk en type omvormer, verder als bij panels.

Als je meerdere strings/omvormers hebt, deze tabel per string/omvormer blijven herhalen.

[autorun][bewerken]

In deze rubriek stel je automatische updates van je website in. De standaard versie:

exit_at = "@sunset+40minutes"
exec[] = "Import;@sunrise,@sunset+20minutes,30 minutes;pvdiary --import --export --sync"
; exec[] = "Cleanup;@sunrise-20minutes, @sunrise, 1 day ;pvdiary --cleanup"
exec[] = "Backup;@sunset+30minutes  , 23:59,  7 days ;pvdiary --db --backup"

stopt PVdiary elke avond, 40 minuten na zonsondergang (exit_at = ). Verder wordt de site elke 30 minuten geupdate, van zonsopkomst tot 20 minuten na zonsondergang (exec[] = ). Bovendien wordt 's avonds een backup gedraaid (2e exec[] regel). Door de regel exit_at in commentaar om te zetten (; ervoor plaatsen, aan het begin van de regel) draait pvdiary dag en nacht door. Je hebt er dan geen omkijken meer naar:

;exit_at = "@sunset+40minutes"
exec[] = "Import;@sunrise,@sunset+20minutes,15 minutes;pvdiary --import --export --sync"
; exec[] = "Cleanup;@sunrise-20minutes, @sunrise, 1 day ;pvdiary --cleanup"
exec[] = "Backup;@sunset+30minutes  , 23:59,  7 days ;pvdiary --db --backup"

In dit voorbeeld heb ik ook de update snelheid wat verhoogd (elke 15 minuten). Je start pvdiary nu in principe met

pvdiary --autorun

Da's alles.

Automatisch starten[bewerken]

Als je geen zin hebt om pvdiary met de hand op te starten als je je raspi reboot, kun je bijvoorbeeld het volgende script gebruiken:

#! /bin/sh
#
#
# make sure pvdiary and its components are found
#
PATH=/home/pvdiary2/bin:$PATH
#
# run in the background, without dropping tty connections with the inverters
# production:
nohup pvdiary --autorun > /dev/null 2>&1 & 
# uncomment for debugging:
#nohup pvdiary --autorun & 

Copy/paste dit script naar autorun.sh en plaats het in /home/pvdiary2/bin. Maak het script executable met:

chmod 755 autorun.sh

Voeg vervolgens de volgende regels toe aan /etc/rc.local. Het maakt niet zoveel uit waar precies, als het maar na #! /bin/sh is en voor exit 0:

# start pvdiary at boot time
# make sure autorun settings in pvdiary.cfg are such that
# continuous operation is guaranteed ...
#
/home/pvdiary2/bin/autorun.sh
#

Controleer of rc.local executable is:

ls -l /etc/rc.local

geeft:

-rwxr-xr-x 1 root root 508 2013-03-09 16:12 rc.local

Als de executable flag niet aan staat (geen x-jes), verander dan met:

chmod 755 /etc/rc.local

Je kunt u de database gaan vullen.

De database vullen[bewerken]

Dat kan met pvdiary_dashboard, tenminste volgens sommigen. Mij is het op een raspberry pi nooit gelukt op die manier. Een alternatieve methode is de volgende: Stop autorun (als die draaide). Dit kan via het dashboard of met het commando:

killall -9 php

Vervolgens wordt de database geinitialiseerd, gevuld en geexporteerd naar de website (uit te voeren als user pvdiary2) anders wordt de database eigendom van root en mag je webserver er niks mee doen: Database aanmaken en initialiseren:

pvdiary --db --make-tables --init

Database vullen met alle tot nu toe beschikbare data:

pvdiary --import --db --start-date=day1

Alle data exporteren naar de website:

pvdiary --export --all-data

Systeem info, verwachte opbrengsten en maximum opbrengst toptien exporteren naar de website.

pvdiary --export --info --expected --top

Bekijk je website. Als 't goed is zijn je data nu op de site zichtbaar.

Final touch(es)[bewerken]

Reboot je raspi en check of alles werkt. Door het commando

ps -aux | grep pvdiary

te geven, kun je zien of pvdiary inderdaad automatisch start. Ervan uitgaande dat je alles (incl. de import_params) goed ingesteld had, heb je nu een werkend systeem gemaakt. Voordat je je site wereldkundig maakt (poort 8082 forwarden naar je router, poort 80) is het verstandig om een paar zaken te veranderen:

  • sudo-rechten voor user pvdiary2 intrekken.
  • login van pvdiary2 blokkeren

Als je denkt, "mijn webserver bedient mijn eigen huis, iemand van buiten kan er niet bij", want er staat bijvoorbeeld geen port forward naar je raspi, dan kun je het volgende stukje overslaan. Als je raspi rechtstreeks in contact staat met de grote boze buitenwereld (a.k.a. het internet), is het wellicht verstandig om het volgende wel te doen. Als je achteraf denkt, 't is toch niet zo handig, kun je e.e.a. ongedaan maken door de wijzigingen die ik nu ga voorstellen weer in de oude situatie terug te veranderen.

sudo rechten intrekken[bewerken]

Ik heb nooit begrepen waarom je een systeem bouwt waarin standaard ALLE gebruikers superuser rechten hebben. Daar heb je tenslotte het superuser (root) account voor. (Dat is een van de redenen dat ik zelf geen grootgebruiker ben van Debian en afgeleiden (raspbian, ubuntu en zo). sudo rechten intrekken is simpel: login als root, en doe:

visudo

Zoek de regels

# Allow members of group sudo to execute any command
%sudo ALL=(ALL:ALL) ALL

op, en zet een hash-mark (#) voor de tweede regel:

# Allow members of group sudo to execute any command
#%sudo ALL=(ALL:ALL) ALL

en sla de file op als /etc/sudoers. Met deze actie zijn alle sudo accounts geblokkeerd. Handig als iemand onverhoopt je website hackt en via user pvdiary2 (of een andere) allerlei dingen gaat lopen doen. Check of het werkt door alsnog te proberen een sudo commando te geven:

pvdiary2@raspberrypi ~ $ sudo bash
[sudo] password for pvdiary2: 
pvdiary2 is not in the sudoers file.  This incident will be reported.

Je komt er niet meer in als sudoer. Dat houdt tevens in dat ALLE acties die superuser rechten nodig hebben, door superuser root gedaan moeten worden, zoals het hoort, overigens.

login van pvdiary2 blokkeren[bewerken]

Als je pvdiary site draait hoef je eigenlijk nooit meer als pvdiary2 op je raspi in te loggen. Alles loopt dan min of meer automatisch. Je kunt de toegang tot het pvdiary2-account dicht zetten door het commando dat de login regelt te vervangen door iets anders (in dit geval een kleine binary die niks doet). Login als root en open de file /etc/passwd. Zoek de regel met pvdiary2 op:

pvdiary2:x:1001:1002:pvdiary,,,:/home/pvdiary2:/bin/bash

Verander de login shell /bin/bash in /bin/false:

pvdiary2:x:1001:1002:pvdiary,,,:/home/pvdiary2:/bin/false

en sla op. Je kunt nu niet meer als pvdiary2 inloggen. Jij niet, da's lastig, maar iemand van buiten ook niet, en da's een stuk veiliger. Test of 't werkt door alsnog te proberen in te loggen op je raspi:

[marcelr@laptop46 ~]$ ssh pvdiary2@192.168.73.26
pvdiary2@192.168.73.26's password: 
Linux raspberrypi 3.10.25+ #622 PREEMPT Fri Jan 3 18:41:00 GMT 2014 armv6l

The programs included with the Debian GNU/Linux system are free software;
the exact distribution terms for each program are described in the
individual files in /usr/share/doc/*/copyright. 

Debian GNU/Linux comes with ABSOLUTELY NO WARRANTY, to the extent
permitted by applicable law.
Last login: Tue May 13 21:28:29 2014 from 192.168.73.2
Connection to 192.168.73.26 closed.

Je wordt er nu meteen uitgeknikkerd als je probeert in te loggen. In 't algemeen heeft een webserver eigenaar (pvdiary2 in dit geval) geen login nodig. Dat betekent dat ALLE handmatige acties die je als pvdiary2 zou willen uitvoeren, nu door root waargenomen moeten worden, en dat je dus goed op moet letten met eigenaarschappen van files en directories, en read/write/execute vlaggen van die files en directories, bjvoorbeeld als je met de hand updates gaat uitvoeren. Zorg dat je goed overweg kunt met de commando's chown en chmod.

Appendix: import_params[bewerken]

(work in progress)

(is nu even een apart hoofdstukje, wordt later wellicht ergens anders weggezet). De data import parameters zijn afhankelijk van het soort logging dat je gebruikt, en dat is op zich weer merk/type inverter afhankelijk. Voorlopig laat ik het bij twee merken inverters, om de simpele reden dat dat de enige zijn waar ik zelf ervaring mee heb. Andere PVdiary gebruikers, met andere inverters/logging worden uitdrukkelijk verzocht dit hier toe te voegen (of het mij te laten doen, met hun gegevens/werkwijze).

De import parameters worden als volgt ingegeven:

import_params = "CSV bitmask basename serial plugin_name plugin_args"

De parameters betekenen het volgende:

CSV:         De log files zijn van het type csv (comma separated values). Andere opties zijn er (nog) niet.
bitmask:     Geeft aan in hoeverre PVdiary de logdatafiles checkt alvorens de gegevens in de database te zetten.
             Een bitmask is een eenvoudige manier om een aantal eigenschappen aan of uit te zetten via een positief geheel getal. 
             Dit getal is een optelling van machten van twee, opgebouwd uit een aantal bits:
             
             Van rechts naar links rekenend representeert dit bitmasker:
             
             10001101  (van links naar rechts bit7 bit6 bit5 ... bit1 bit0)

             2^7 + 2^3 + 2^2 + 2^0 = 128+8+4+1 = 141 (met bijv. 2^7 2 tot de 7e, oftewel 128)
      
             Bij PVdiary geldt het volgende: 

             bit0: (  1): alleen "safe inserts" toestaan: Serienummer moet ingevuld zijn en kloppen (verplicht bij meer dan 1 inverter).
                                                          kWh-tellerstand kan alleen toenemen. PVdiary gebruikt niet de totalen van de 
                                                          inverter, maar rekent die uit op basis van gelogd vermogen.
             bit1: (  2): data-import van vandaag altijd uitvoeren.
             bit2: (  4): als er een verschil is tussen totaalopbrengst en wattage, vorige interval gebruiken om eruit te komen.
             bit3: (  8): niet-standaard CSV fileformaat.
             bit4: ( 16):
             bit5: ( 32):
             bit6: ( 64): CSV-file opslaan na elke succesvolle data-import (voor omvormers zonder geheugen).
             bit7: (128): Niet sunny-explorer compatibele CSV file. Gebruik CSV_params en CSV_time om layout te definieren.
                
             Voorbeeld: Als je safe inserts wilt en de data import van vandaag altijd gedaan wilt hebben, en je wilt na elke import je CSV 
                        file opslaan omdat je omvormer geen geheugen heeft, dan wordt je bitmasker: bit0 & bit1 & bit6 = 1 + 2 + 64 = 67.
 
basename:    Filenaam van de logfiles, zonder pad of extensie. Moet bij sommige omvormers/loggers overeen komen met de omvormernaam.      
serial:      Serienummer van de inverter, wanneer dit ingevuld is MOET het overeenkomen met het serienummer in de csv files.
plugin_name: Naam van de plugin (zie directory /home/pvdiary2/incl). Plugins hebben de volgende namen: pvdiary_csv_<plugin_name>.php. 
             Met <plugin_name> de plugin naam. Let op! In tegenstelling tot bijvoorbeeld een Windows OS is Linux hoofdlettergevoelig. 
             Hoofdletters en kleine letters moeten dus kloppen.
plugin_args: Dit is afhankelijk van de gebruikte plugin. Wordt verderop per plugin uitgelegd.

SMA, met SMAspot[bewerken]

- update: SMAspot is niet meer te downloaden op googlecode.com -

Om SMA inverters uit te kunnen lezen, heb je een werkende bluetooth interface nodig. Deze bestaat uit drie delen: een USB-bluetooth adapter, de zgn. bluetooth-stack (software), en een programma dat je inverter uitleest (nog meer software). Raspberry pi's staan erom bekend dat hun bluetooth functionaliteit niet super is. Niet elke USB-bluetooth adapter wordt evengoed ondersteund. Vooraleer je er een koopt is het handig om even op deze site te kijken voor compatibiliteit van bluetooth adapters: http://elinux.org/RPi_USB_Bluetooth_adapters

De installatie van de bluetooth stack is eenvoudig: login als root ( su - ) en doe:

apt-get --no-install-recommends install bluetooth libbluetooth-dev

De --no-install-recommends is essentieel, anders krijg je 80MB software om printers, scanners, geluidsinstallaties en andere bluetooth devices aan te sturen. Wil je vast niet. Als je er net als ik een tijdje over doet om alle handelingen te doen, kan het zijn dat je tussentijds even een algemene update van je raspi moet draaien:

apt-get update

Als laatste heb je (specifiek voor SMAspot) nog libcurl nodig:

apt-get --no-install-recommends install libcurl3-dev

De installer stelt je voor om een latere ssl-enabled versie te kiezen; is ook goed. PVdiary heeft curl niet nodig, maar SMAspot is niet zonder te bouwen (tenzij je in de code duikt en PVoutput eruit patcht). Daarna wordt het tijd om SMAspot te downloaden, te compileren en te installeren. De huidige (laatste) versie van SMAspot is 2.1.0. Login als pvdiary2 en doe:

cd
mkdir SMAspot
cd SMAspot
wget https://sma-spot.googlecode.com/files/SMAspot_SRC_210_Linux_Win32.tar
tar -xvf SMAspot_SRC_210_Linux_Win32.tar
make release
cd
mkdir bin
cd bin
cp ../SMAspot/bin/Release/SMAspot .
cp ../SMAspot/SMAspot.cfg .
chmod 644 SMAspot.cfg

Als 't goed is heb je nu een directory /home/pvdiary2/bin/ met daarin SMAspot en SMAspot.cfg:

 pvdiary2@raspberrypi ~/bin $ ls -l
total 72
-rwxr-xr-x 1 pvdiary2 pvdiary2 64507 Oct 20 21:30 SMAspot
-rw-r--r-- 1 pvdiary2 pvdiary2  4984 Oct 20 21:30 SMAspot.cfg

SMAspot moet nu eerst geconfigureerd worden; daarvoor heb je het bluetooth adres van je omvormer nodig. Dat is te vinden met:

hcitool scan

Als 't goed is, komt er na verloop van korte tijd iets dergelijks uit:

$ hcitool scan
Scanning ...
	00:80:25:xx:xx:xx	SMA00xx Omvormernaam1 SN2002xxxxxx 
	00:80:25:yy:yy:yy	SMA00yy Omvormernaam2 SN2002yyyyyy

Met xx en yy omvormerspecifieke (hexadecimale) getallen, van, in dit geval, twee omvormers. De eerste rij (00:80: etc.) is het bluetooth-adres, het laatste (SN2002xxx etc.) is het serienummer.

De regel import_params in de rubriek [cl_Omvormernaam] in pvdiary.cfg is als volgt:

import_params = "CSV 6 <Omvormernaam> 0 SMAspot /home/pvdiary2/bin/SMAspot.cfg"

Het laatste argument van de import parameters is de SMAspot configuratiefile, inclusief het gehele pad er naartoe. Als je meerdere omvormers hebt, is het 't makkelijkst om per omvormer een aparte SMAspot configuratiefile te maken, en per rubriek [cl_Omvormernaam] dus deze eigen configuratiefile op te geven. Let op: De omvormernaam in de import_params moet identiek zijn aan de omvormernaam die je voor de rubriek [cl_omvormernaam] hebt gekozen. Dus, als je bijvoorbeeld "test1212" als omvormernaam hebt gekozen, dan ziet je configuratie in pvdiary.cfg er zo uit:

[cl_test1212]
 ...
 import_params = CSV 6 test1212 0 SMAspot /home/pvdiary2/bin/SMAspot.cfg
 ...

De configuratiefile voor SMAspot ziet er (in maagdelijke vorm) zo uit:

################################################################################
#                ____  __  __    _                    _   
#               / ___||  \/  |  / \   ___ _ __   ___ | |_ 
#               \___ \| |\/| | / _ \ / __| '_ \ / _ \| __|
#                ___) | |  | |/ ___ \\__ \ |_) | (_) | |_ 
#               |____/|_|  |_/_/   \_\___/ .__/ \___/ \__|
#                                        |_|              
#
#  SMAspot.cfg - Configuration file for SMAspot.exe
#  SMAspot - Yet another tool to read power production of SMA solar inverters
#  (c)2012-2013, SBF
#
#  DISCLAIMER:
#  A user of SMAspot software acknowledges that he or she is receiving this
#  software on an "as is" basis and the user is not relying on the accuracy 
#  or functionality of the software for any purpose. The user further
#  acknowledges that any use of this software will be at his own risk 
#  and the copyright owner accepts no responsibility whatsoever arising from
#  the use or application of the software. 
#
################################################################################

# SMA Inverter's Bluetooth address
# Windows: smaspot -scan
# Linux  : hcitool scan
BTAddress=00:00:00:00:00:00  

# User password (default 0000)
Password=0000

# MIS_Enabled (Multi Inverter Support: Default=1 Enabled)
# +------------+-------+-------------+
# | #Inverters | NetID | MIS_Enabled |
# +------------+-------+-------------+
# |      1     |   1   | Don't Care  |
# +------------+-------+-------------+
# |      1     |   >1  |      0      |
# +------------+-------+-------------+
# |      >1    |   >1  |      1      |
# +------------+-------+-------------+
MIS_Enabled=1 

# Plantname
Plantname=MyPlant 

# OutputPath (Place to store CSV files)
# 
# Windows: C:\TEMP\SMA\%Y
# Linux  : /home/sbf/Documents/sma/%Y
# %Y %m and %d will be expanded to Year Month and Day
OutputPath=C:\TEMP\SMA  

# Position of pv-plant http://itouchmap.com/latlong.html
# Example for Ukkel, Belgium
Latitude=50.80
Longitude=4.33 

# Calculate Missing SpotValues
# If set to 1, values not provided by inverter will be calculated
# eg: Pdc1 = Idc1 * Udc1
CalculateMissingSpotValues=1 

# DateTimeFormat (default %d/%m/%Y %H:%M:%S)
# For details see strftime() function
# http://www.cplusplus.com/reference/clibrary/ctime/strftime/
DateTimeFormat=%d/%m/%Y %H:%M:%S 

# DateFormat (default %d/%m/%Y)
DateFormat=%d/%m/%Y 

# DecimalPoint (comma/point default comma)
DecimalPoint=comma 

# TimeFormat (default %H:%M:%S)
TimeFormat=%H:%M:%S 

# SynchTime (default 1 = On)
# If set to 1 the Inverter time is synchronised with pc time
# Some inverters don't have a real-time clock
SynchTime=1 

# SunRSOffset
# Offset to start before sunrise and end after sunset (0-3600 - default 900 seconds)
SunRSOffset=900 

###########################
### CSV Export Settings ###
###########################
# With CSV_* settings you can define the CSV file format 

# CSV_Export (default 1 = Enabled)
# Enables or disables the CSV Export functionality
CSV_Export=1

# CSV_ExtendedHeader (default 1 = On)
# Enables or disables the SMA extended header info (8 lines)
# sep=;
# Version CSV1|Tool SMAspot|Linebreaks CR/LF|Delimiter semicolon|Decimalpoint comma|Precision 3
# etc...
# This is usefull for manual data upload to pvoutput.org
CSV_ExtendedHeader=1 

# CSV_Header (default 1 = On)
# Enables or disables the CSV data header info (1 line)
# dd/MM/yyyy HH:mm:ss;kWh;kW
# This is usefull for manual data upload to pvoutput.org
# If CSV_ExtendedHeader is enabled, CSV_Header is also enabled
CSV_Header=1 

# CSV_SaveZeroPower (default 1 = On)
# When enabled, daily csv files contain all data from 00:00 to 23:55
# This is usefull for manual data upload to pvoutput.org
CSV_SaveZeroPower=1 

# CSV_Delimiter (comma/semicolon default semicolon)
CSV_Delimiter=semicolon 

# CSV_Spot_TimeSource (Inverter|Computer default Inverter)
CSV_Spot_TimeSource=Inverter 

# CSV_Spot_WebboxHeader (Default 0 = Off)
# When enabled, use Webbox style header (DcMs.Watt[A];DcMs.Watt[B]...)
CSV_Spot_WebboxHeader=0

#################################
### Online Monitoring Systems ###
#################################
#
# In the future, multiple online monitoring systems can be defined
# Here we can activate the ones we like
#
################################
### PVoutput Upload Settings ###
################################
# PVoutput (default 0 = Disabled)
# Enables or disables the upload functionality to pvoutput.org
# When enabled, be sure to use -u switch on the command line
PVoutput=0 

#PVoutput_SID
#Sets PVoutput System ID
PVoutput_SID= 

#PVoutput_Key
#Sets PVoutput API Key
PVoutput_Key= 

# VOltageLogging sets AC or DC logging.
# Possible values are:
# NONE (disabled)
# MAX(AC) (default)
# AC(PH1) or AC(PH2) or AC(PH3)
# MAX(DC) or DC(ST1) or DC(ST2)
VoltLogging=MAX(AC)

Wederom een hele lap tekst. Belangrijk (voor PVdiary) zijn:

BTAddress=00:00:00:00:00:00              Moet het bluetooth adres van je inverter zijn.
Password=0000                            Moet het password van je inverter zijn.  
Plantname=MyPlant                        Moet de Plantname van je inverter zijn.

In het eerder gegeven configuratievoorbeeld zou dit

Plantname=test1212 

worden.

OutputPath=/home/pvdiary2/data/daily/%Y  Op deze plek zoekt PVdiary zijn .csv files. Moet dus kloppen, 
                                         het gegeven pad is consistent met deze wiki.     
CalculateMissingSpotValues=0             Doen we in PVdiary niks mee, mag dus 0 zijn.

De overige configuratie-instellingen mogen blijven zoals ze zijn. Je kunt SMAspot nu met de hand testen, door in een shell (als root) het volgende te doen:

/home/pvdiary2/bin/SMAspot -cfg/home/pvdiary2/bin/SMAspot.cfg -am0 -ad2 -sp0 -q

Als 't goed is krijg je dan de csv files van de laatste twee dagen in je data directory. Als dat 't geval is, ben je klaar met de installatie van SMAspot. (de optie -sp0 zit nog niet in het pvdiary plugin script, moet nog even aangepast worden, dan krijg je geen spot-data (doen we niks mee in PVdiary)).

SMA, met opensunny[bewerken]

libernux heeft een plugin voor opensunny gemaakt (en opensunny een beetje gepatched) zodat-ie met PVdiary gebruikt kan worden. Je kunt die hier downloaden. Op je raspi is dit wellicht makkelijker, login als pvdiary2 en:

mkdir ~/opensunny
cd ~/opensunny
wget http://people.zeelandnet.nl/awstrikkoo/pvopensunny.tar.bz2
tar -jxvf pvopensunny.tar.bz2

Dit downloadt de code voor opensunny en pakt 'm uit in ~/opensunny/PVopensunny. Installeer de bluetooth code op je raspi als dat nog niet gebeurd is (als root, of met sudo):

apt-get --no-install-recommends install bluetooth libbluetooth-dev

Doe vervolgens:

cd ~/opensunny/PVopensunny
make

En als 't goed is heb je nu een executable opensunny in ~/opensunny/PVopensunny. Kopieer deze file naar /home/pvdiary2/bin:

cp ~/opensunny/PVopensunny/opensunny ~/bin

Net als bij SMAspot heb je ook voor opensunny het bluetooth adres en serienummer van je inverter nodig, te vinden met:

hcitool scan

Als 't goed is, komt er na verloop van korte tijd iets dergelijks uit:

$ hcitool scan
Scanning ...
	00:80:25:xx:xx:xx	SMA00xx Omvormernaam1 SN2002xxxxxx 
	00:80:25:yy:yy:yy	SMA00yy Omvormernaam2 SN2002yyyyyy

Met xx en yy omvormerspecifieke (hexadecimale) getallen, van, in dit geval, twee omvormers. De eerste rij (00:80: etc.) is het bluetooth-adres, het laatste (SN2002xxx etc.) is het serienummer.

De regel import_params in de rubriek [cl_Omvormernaam] in pvdiary.cfg is als volgt:

import_params = "CSV flags <plantname> <serial> OpenSunny bluetooth_address_collector debug

Voorbeeld: CSV 0 Demo0 0 OpenSunny 00:11:22:33:44:55 0

Kostal[bewerken]

Voor Kostal inverters (en "plak" merken zoals Powerstocc, van Centrosolar) is geen open source code beschikbaar die makkelijk op een Linux-machine te draaien is. Het communicatieprotocol van een Kostal inverter is onder een NDA (Non-Disclosure Agreement) van Kostal te krijgen. Op basis van die informatie heb ik een logging-programmaatje gemaakt dat met een Kostal inverter communiceert en PVdiary-compatible (dus zeg maar SMA-compatible) csv files genereert. Voorwaarde is dat je inverter via een ethernet verbinding met je raspi kan communiceren. Het programma is hier te downloaden. Je moet wel ingelogd zijn in het zonstraal forum om te kunnen downloaden. Pak de file uit in /home/pvdiary2/bin en je vindt het volgende:

pvlogger-armv6l      
pvlogger-i386  
pvlogger-x86_64
pvlogger-Cygwin.exe  
pvlogger.sh

Dit zijn binaire files voor verschillende processor-architecturen en OS-en, en een shell-script om de logger aan te zwengelen. Voor de raspi gebruiken we pvlogger-arm6vl. De andere zijn voor linux op intel-compatible architectuur, zowel 32- als 64 bits. Voor windows is ook een versie ingepakt, die via 32-bits cygwin te draaien is. Het shell-script ziet er in maagdelijke vorm als volgt uit:

#! /bin/sh
#
# Shell script for startup of the pvlogger for Kostal inverters
#
# Edit inverter data and paths according to your needs.
# This script is not likely to work without editing.
#
# IP-address of your inverter:
INVERTER_IP=192.168.73.20
# RS485 address of your inverter
INVERTER_RS485=73
# Output data directory, for PVdiary DO NOT add "/daily/2013", this is done 
# automagically by the binary executable
DATA_ROOT="/home/marcelr/Documents/kostal/code/c/data"
# Path where the pvlogger binary is located (keep the trailing slash)
BIN_PATH="/home/marcelr/Documents/kostal/dist/0.0.4/" 

###############################################################################
#
# no user-serviceable parts beyond this line!!
#
###############################################################################

OS=`uname -o`
ARCH=`arch`
EXT=""

# make all i?86 behave the same:

case $ARCH in
    i386)
      ;&
    i486)
      ;&
    i586)
      ;&
    i686)
      ARCH=i386
      echo $ARCH
      ;;
esac 

# set executable extension 

if [ $OS = "Cygwin" ]; then
EXT=$OS.exe ;
INTERVAL=30 ;
else
    case $ARCH in 
 	 i386)
  	  ;&
        i486)
         ;&
        i586)
          ;&
        i686)
          ARCH=i386
          echo $ARCH
          ;;
esac
EXT=$ARCH ;
INTERVAL=10 ;
fi

# combine everything into a command and run in the background:

$BIN_PATH/pvlogger-$EXT -ip $INVERTER_IP -p $INVERTER_RS485 -i $INTERVAL -f raw -d $DATA_ROOT -pvdiary - cat > /dev/null 2>&1 &

# You crossed the line, so apparently you know what you are doing. 
# If you need to debug, comment out the previous command and use this instead:
# (remove the leading hash (#) character)

#$BIN_PATH/pvlogger-$EXT -ip $INVERTER_IP -p $INVERTER_RS485 -i $INTERVAL -f raw -d $DATA_ROOT -pvdiary

Alleen de header van het script behoeft wijzigingen:

INVERTER_IP=xxx.xxx.xxx.xxx                   Moet het IP-adres van je inverter zijn, te vinden op het display van je inverter. 
INVERTER_RS485=yy                             Moet het RS485-adres van je inverter zijn. Te vinden op het inverter display.
DATA_ROOT="/home/pvdiary2/data"               Moet het pad naar de csv files zijn, ZONDER /daily/<jaar> op het eind.
BIN_PATH="/home/pvdiary2/bin/"                Moet het pad naar pvlogger-armv6l zijn.

Door het shell-script te draaien, als root:

/home/pvdiary2/bin/pvlogger.sh &

start de logger, en maakt meteen twee soorten files aan: Elke 5 minuten wordt de csv-file geupdate, en elke 10 seconden wordt een binaire file (met extensie .piko) geupdate. De laatste file bevat ALLE data die de inverter genereert, in binaire vorm. Check deze files even, als alles naar behoren werkt, heb je pvlogger goed geinstalleerd. Als je de instellingen van pvlogger een beetje aanpast, kun je ook rechtstreeks gedetailleerde .csv files krijgen, maar dit terzijde, valt buiten de toepassing voor PVdiary. Zonder onderbreking van buitenaf loopt de logger tot de raspi ermee ophoudt, of de SD-kaart vol is. Met een 16GB kaart kun je ca 25 jaar uit de voeten, als je alleen PVdiary-gerelateerde opslag hebt. Als je niet van plan bent om elke keer dat je je raspi reboot pvlogger opnieuw te starten, is het verstandig om in het rc.local startup script van je raspi het volgende toe te voegen (/etc/rc.local):

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing. 

# Print the IP address
_IP=$(hostname -I) || true
if [ "$_IP" ]; then
  printf "My IP address is %s\n" "$_IP"
fi

# dit toevoegen
# startup of kostal data logging:
/home/pvdiary2/bin/pvlogger.sh &
# einde toevoeging

exit 0

Dan start je je logging automatisch, elke keer dat je de raspi opnieuw opstart.

Voor de koppeling met PVdiary gebruiken we de Dummy plugin in de [cl_Omvormernaam]-rubriek van pvdiary.cfg:

import_param = CSV 6 <plantname> <serial> Dummy

Aangezien pvlogger .csv files aanmaakt met een naam die rechtsreeks ontleend is aan de omvormernaam, zoals ingesteld in de omvormer, kan de omvormernaam niet vrij gekozen worden, maar MOET hetzelfde zijn als degene die is ingesteld in de omvormer. Het serienummer moet ook kloppen (wordt gecheckt met het serienummer van de inverter).

Enphase[bewerken]

Sjaak heeft een plugin voor Enphase omvormers gemaakt.

Wat heb je nodig:

  • toegang tot de logging via de Enlighten website
  • je systemId, deze zie je onder "settings" als je inlogt op de Enlighten website
  • een apiKey, deze vraag je aan onder "settings", zie http://enphase.com/api/getting-started/

Zet in de pvdiary configuratie bij OMVORMERS (vervang <systemId> en <apiKey> door de juiste waarden):

import_params = "CSV 0 enp 0 Enphase <systemId> <apiKey>"

De voorwaarden voor het gebruik van de Enphase API verplichten je om het Enphase logo en een link op te nemen. Dit kun je doen door de index.htm file in de www directory te editen. Vervang de regel

<div class="logo"><a href="http://www.zonstraal.be/wiki/PVdiary" target="_blank"><img src="gifs/PVdiary.png" alt="PVdiary" width="120" height="51"></a>

door

<div class="logo"><a href="http://www.zonstraal.be/wiki/PVdiary" target="_blank"><img src="gifs/PVdiary.png" alt="PVdiary" width="120" height="51"></a><div class="logo" style="width:150px; font-size:12px; text-align:center; font-variant:small-caps; ">

 powered  by<br /><a href="http://www.enphase.com"><img src="http://enphase.com/wp-uploads/enphase.com/2011/06/EnphaseAPIMark.png" 
 alt="" title="EnphaseAPIMark" class="aligncenter size-full wp-image-6578" /></a></div>

Als je bij het downloaden van de data van de enphase website de volgende error krijgt:

Warning: file_get_contents() [function.file-get-contents]: Unable to find the wrapper "https" 

zet dan de volgende regel in je php.ini file (in de PHP directory)

extension=php_openssl.dll

Een voorbeeld van Enphase logging zie je op de site van Sjaak: http://slagewaa.diskstation.me