Ga naar de inhoud
Home » PVDiary op een Raspberry Pi

PVDiary op een Raspberry Pi

PVDiary Blog Header

Orgineel: https://www.zonstraal.be/wiki/PVdiary_installatie_op_Raspberry_Pi

Niet alle stappen worden uitgelegd, aangenomen is dat je wat technisch onderlegd bent.

Ik ben begonnen met een Pi 2B met een SD kaartje van 16Gb. Via de https://www.raspberrypi.org/software/operating-systems/ download je Raspbery PI OSLite. Dit een het OS zonder GUI, we gaan alles doen vanaf de commando regel.

Ik gebruik mijn Pi-s altijd zoveel mogelijk headless, dus inloggen gaat dan via ssh, echter dit staat default niet aan dus bij de eerste boot moet je dit enablen. Achtergrond info van het hoe en wat met ssh op de Pi: https://www.raspberrypi.org/documentation/remote-access/ssh/

Deze brand je op je SDkaart, stopt het in de Pi, (eventeel) netwerkkabel in de Pi, toetsenbord en beelscherm eraan en stroom erop … ff wachten …..en inloggen met pi/raspberry

Username is dus pi en default wachtwoord is raspberry. Wel zo handig om dit aan te passen. Na het inloggen kun je via sudo raspi-config ssh enablen, maar ik doe het via:

sudo systemctl enable ssh
sudo systemctl start ssh

Een andere methode is door een (leeg) bestandje “ssh” in de “boot” partitie van de SD kaart te plaatsen. Bij de eerste boot wordt hiermee ssh enabled en heb je geen extra keyboard en monitor nodig en doe je alles via ssh. Ik gebruik een normale Terminal window op mijn Linux machine om via ssh in te loggen. Gebruik je liever een speciale ssh client dan is mogelijk PuTTY of SmarTTY wat voor jou.

Vervolgens wil ik de volledige SDcard gaan gebruiken, dat doe je via

sudo raspi-config

Ga via Advanced Options naar Expand Filesystem Reboot het systeem en je kunt via je normale computer inloggen op de pi via

ssh -l pi 192.168.2.15

Pas het IP adres aan naar je eigen IP adres, dit geldt ook voor alles wat hierna volgt 🙂

Software up-to-date brengen:

sudo apt-get update
sudo apt-get upgrade

Na een upgrade doe ik altijd een reboot, maar eerst gaan we deze Pi nog een goede hostname geven:

Verander in /etc/hostname de oude naam

raspberrypi

in de nieuwe naam:

fileserver

Of bedenk zelf een betere naam 🙂 Bij mij krijgt deze Pi deze naam omdat dit de hoofdfunctie is, PVDiary komt er maar bij 🙂

Pas /etc/hosts ook aan. Er moet een entry komen met de naam van dit systeem.

127.0.1.1 fileserver.thuis.net fileserver

Nog een opmerking, zorg ervoor dat de eerste naam (fileserver.thuis.net) een Fully Qualified Name is. Heb je die niet maak er dan fileserver.local van.

Nu rebooten 🙂 (na het rebooten is de nieuwe naam actief).

sudo systemctl reboot

Vervolgens overnieuw inloggen om daarna software te installeren. We gaan oa php7.2 gebruiken maar moeten daar eerst een repository voor toevoegen:

wget -q https://packages.sury.org/php/apt.gpg -O- | sudo apt-key add -
echo "deb https://packages.sury.org/php/ stretch main" | sudo tee /etc/apt/sources.list.d/php7.list
sudo apt-get update
sudo apt upgrade

Na een upgrade doe ik altijd een reboot

sudo systemctl reboot

Vervolgens overnieuw inloggen om daarna de software te installeren.

sudo apt-get install apache2 apache2-utils sqlite3 php7.2 php7.2-sqlite php7.2-cli libapache2-mod-php7.2 php7.2-zip dos2unix bluetooth pi-bluetooth bluez

Je hebt nu alle software. Maak de pvdiary2 user aan:

sudo adduser pvdiary2

En beantwoord de daarop volgende vragen over deze gebruiker naar eer en geweten 🙂

In het bestand /etc/apache2/envvars moet je de volgende regels veranderen:

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

in

export APACHE_RUN_USER=pvdiary2
export APACHE_RUN_GROUP=pvdiary2

In het bestand /etc/apache2/ports.conf moet je de volgende regels veranderen:

Listen 80

in

Listen 192.168.2.15:8081
Listen 192.168.2.15:8082

Nu de virtual hosts aanmaken:

cd /etc/apache2/sites-available
sudo cp 000-default.conf pvdiary-dashboard.conf
sudo cp 000-default.conf pvdiary-www.conf

In pvdiary-dashboard.conf het vet gedrukte aanpassen (aaaa.bbbb.cccc.dddd is het IP adres van je Pi). Mogelijk is een volledige copy-en-paste wel het eevnoudigst 🙂

<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
                # Access only to internal networks
                Require ip 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.1
        </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
                # Access only to internal networks 
                Require ip 10.0.0.0/8 172.16.0.0/12 192.168.0.0/16 127.0.0.1
        </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>

En voor pvdiary-www.conf het vet gedrukte aanpassen (aaaa.bbbb.cccc.dddd is het IP adres van je Pi). Mogelijk is een volledige copy-en-paste wel het eevnoudigst 🙂

<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 
                Require all granted
        </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 
                Require all granted
        </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>

Ga naar /etc/apache2/sites-enabled en voer de volgende commando’s uit:

sudo a2ensite pvdiary-dashboard pvdiary-www

We hebben in de config een map /home/pvdiary/www gebruikt, maar die is er nog niet! Gaan we nu maken:

sudo mkdir -p /home/pvdiary2/httpd/www
cd /home/pvdiary2/
sudo chown -R pvdiary2.pvdiary2 *

Herstart apache2

sudo systemctl restart apache2

De logbestanden van apache2 staan in /var/log/apache2

En reboot de Pi om te verifieren of alles werkt.

sudo systemctl reboot

Als alles goed is gegaan kun je, naar het reboten, naar http://192.168.2.15:8081 en http://192.168.2.15:8082 gaan zonder foutmeldingen.

Log nu in als pi

ssh -l pvdiary2 192.168.2.15

We gaan namelijk eerst nog even de gebruiker pvdiary2 de mogelijkheid geven om sudo te gebruiken. Doe hiervoor het volgende:

cd /etc/sodoers.d
sudo cp 010_pi_nopasswd 010_pvdiary2_nopasswd

Verander nu in 010_pvdiary2_nopasswd het woord pi in pvdiary2 en je bent klaar, vervolgens kun je weer uitloggen.

Nu gaan we PVDiary2 installeren. Daarvoor moet je inloggen als de gebruiker pvdiary2

ssh -l pvdiary2 192.168.2.15

Verander van map

cd /home/pvdiary2/httpd

en haal de software op en unzip haar:

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

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

Ga nu met je browser naar http://192.168.2.15:8081/PHP_setup.php en dat brengt je naar de setup van PVDiary2

Klik op de PVdiary knop om de installatie te starten. De installer downloadt de PVdiary-software  en installeert die. Je de melding (of iets wat er sterk op lijkt) :

Installing PVdiary 2.1r.2 to /home/pvdiary2
Downloading pvdiary2_win.zip …
Download of 310965 bytes done …
pvdiary2_win.zip has been unzipped successfully …
Downloaden van PVdiary webfiles en plaatsen in www-folder … …
Downloading pvdiary_www_v2x2x.zip …
Download of 144415 bytes done …
pvdiary_www_v2x2x.zip has been unzipped successfully …
Downloading pvdiary2_httpd.zip …
Download of 134640 bytes done …
pvdiary2_httpd.zip has been unzipped successfully …
585 bytes written to /home/pvdiary2/g_toolbin.ini
15462 bytes written to /home/pvdiary2/pvdiary.cfg
1904 bytes written to /home/pvdiary2/g_pvdiary_cfg.php_template
Downloading pvdiary_demo_data.zip …
Download of 1102143 bytes done …

Please consult the instructions in /home/pvdiary2/doc/linux_install.txt to finalize the installation .
You can start the dashboard with “pvdiary –dashboard”
or by directing your browser to
    http://192.168.2.15:8081/pvdiary_dashboard.php
Version 2.1r.2 installed OK

De PVDiary software IS geinstalleerd.

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 bestand verplaatst worden naar /usr/share/php. PHP moet dit bestand vinden, hiervoor gebruikt zij het php include_path. Om te checken of /usr/share/php hierin staat voer je uit:

php -i | grep include_path

In 1 van deze mappen moet het bestand komen te staan. Bestaat ze nog niet, maak haar dan aan, voorbeeld:

# in mijn geval bestond de map nog niet
sudo mkdir /usr/share/php

Verplaats het bestand via:

sudo 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:

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

De commandline interface van pvdiary bestaat uit een php script (pvdiary) dat vindbaar moet zijn. Direct na installatie staat deze file in /home/pvdiary2/templates. Kopieer de file naar /usr/local/bin en zorgen dat alle rechten goed staan. Tevens maak we een map log aan die pvdiary gebruikt voor de logbestanden:

sudo cp /home/pvdiary2/templates/pvdiary /usr/local/bin/
cd /home/pvdiary2
mkdir log
chown -R pvdiary2.pvdiary2 *
cd /usr/local/bin
sudo chmod +x pvdiary

Nu de webserver overnieuw starten:

sudo systemctl restart apache2

En het zou nu moeten werken 🙂 Test via

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://192.168.2.15:8082), krijg je het framewerk van je PVdiary site te zien. Geen data, geen figuren, gewoon wat vlakken die in meer of mindere mate blauw zijn.

Volgende stap … PVdiary configureren 🙂

PVdiary wordt geconfigureerd via de configuratiefile pvdiary.cfg, in /home/pvdiary2 … ga maar kijken (cat /home/pvdiary2/pvdiary.cfg). Dit is echter een DOS tekst bestand (zie cat -vet pvdiary.cfg en let op de  aan het einde van elke regel), haal alle overbodige DOS karakters weg via:

cd /home/pvdiary2
dos2unix pvdiary.cfg

Het is een enorme lap tekst.In het originele schrijven https://www.zonstraal.be/wiki/PVdiary_installatie_op_Raspberry_Pi staat een uitgebreide uitleg. In deze uitleg wil ik het houden bij wat ik heb aangepast:

; laatste update: 2014-01-05
; ********* 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 = "Maandenweg57"
;
[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: Het aantal dagen dat getoond moet worden voor het Max vermogen. Normaal 7
; Zet op -1 indien je dit niet wil tonen.
; - 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 = 5.280
latitude = 52.404
location = "Almere-Buiten"
contact = "email:arjan.ten.hoopen@gmail.com"
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 (Deze paramater wordt NIET gebruikt )
; - 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 = "0 at 2012-10-28 12:00"
gsc_correction = 1000
;
;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" *** ZEER BELANGIJK ***
; 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, SMAspot , PVjson, Enphase, Download, sunnybeam 
; plugin_data ... plugin afhankelijke settings (raadpleeg de help van de plugin)
; voor SunnyExplorer bv geef je hier de .sx2 file zonder pad
; 
; Voorbeelden van import_params:
; import_params = "CSV 0 plant0001 0 SunnyExplorer plant0001.sx2"
; import_params = "CSV 0 plant0001 0 SMAspot /home/pvdiary2/SMAspot_v2211/mysmaspot.cfg"
;
; - 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 Maandenweg57 0 SunnyExplorer demo1.sx2"
import_params = "CSV 0 Maandenweg57 0 Dummy"
gsc_name = "GSC"
day1 = "20121029"
; RIPday = "20120718"
use_dlst = 1
gsc_cost = 300
ele_cost = 0.22
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 = 6000
estim_kwh = "157,248,419,580,692,687,706,647,474,329,178,117"
pv_az = 135
pv_roof = 25
pv_temp_coeff = -0.48
panels = "24 x STP250S - 20/Wd"
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@ftp.mywebsite.test/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.html"
;
;
; 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/"
;
; top_count = aantal top-dagen (normaal 10)
;
top_count = 10
;
;
; (optioneel) je dashboard via internet 
; raadpleeg documentatie voor meer details 
; dashboard_url = "https://myhomeserver.example.com:443/pvdiary_dashboard.php" 
; dashboard_file = "dashboard.html"
;
;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 = "kate"
explore = "nautilus"
; SMAspot en SBFspot zijn een alternatief voor SunnyExplorer, ook bruikbaar op linux
smaspot = "/home/pvdiary2/SMAspot/bin/Release/SMAspot"
sbfspot = "/usr/local/bin/sbfspot.3/SBFspot -finq -nosql"
;
; SunnyBeam ... enkel bruikbaar op linux (raspi)
; sunnybeamtool = "/home/pvdiary2/SunnyBeamTool/dist/Release/GNU-Linux-x86/sunnybeamtool"
;EOS
;*******************************************************************************
[cleanup]
; cleanup: geef hier aan welke files deleted worden bij een --cleanup
; en of de cleanup operatie default in "test" modus werkt
; Cleanup wordt uitgevoerd met het commando 
; pvdiary --cleanup 
;
; 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
; LET OP: als je exit_at gebruikt stopt pvdiary en moet je haar zelf weer opstarten!!!!
; 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 wakeups, 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"
; exec[] = "Ddns;00:00,23:59,2 hours;pvdiary --ddns"
;
;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 config aan te kunnen passen via het dashboard
configweb = 1
;
; alert4gsc op 0 zetten om GSC meldingen te onderdrukken 
alert4gsc = 1
;
; (optioneel) dynamic dns instellingen - gebruik "pvdiary --plugin=ddns" 
; ddns_params = "noip;myhostname.noip.me;noip_user:noip_password"
; ddns_params = "duck;myhostname;token_duckdns"
; ddns_params = "raw;http://enter_any_url_for_your_ddns_update"
;
;
; httpd_xxx parameters for the pvdiary dashboard webserver
; httpd_listen = "0.0.0.0:8082"
; httpd_token[] = "Fill_in_a_random_token"
; httpd_token[] = "Fill_in_a_random_token"
;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
;********************************************************************************

Tot zover de configuratie van PVDiary2. Maar we zijn nog niet klaar, we moeten er ook voor zorgen dat PVDiary …

Automatisch start tijdens boot

Alles met de hand op starten is zoooooo 1980. Tegenwoordig gebruiken we systemd.

Voor systemd heb je een service file nodig, deze ziet er als volgt uit:

[Unit]
Description=PVdiary

[Service]
User=pvdiary2
Group=pvdiary2
Type=simple
WorkingDirectory=/tmp
ExecStart=/usr/local/bin/pvdiary --autorun --ignore-check
ExecReload=/bin/kill -HUP $MAINPID
Restart=on-failure

[Install]
WantedBy=multi-user.target

Sla dit op in /etc/systemd/system/pvdiary.service

Vervolgens systemd de nieuwe service file laten lezen (daemon-reload), zorgen dat bij de volgende boot pvdiary gestart wordt, en nu starten:

sudo systemctl daemon-reload
sudo systemctl enable pvdiary
sudo systemctl start pvdiary

Controle of zij werkelijk doet wat ze moet doen:

sudo systemctl status pvdiary

Als zij het nog niet (goed) doet … dan klopt dat. Nog ff geen man overboord want er is nog geen database 🙂 Maar eerst data.

De data die uitgelezen wordt uit de omvormer moet straks opgeslagen worden in /home/pvdiary2/data/daily. Deze moet je nog maken:

cd /home/pvdiary2
mkdir -p data/daily

Heb je historische data (in mijn geval was het een migratie van een openSUSE server naar een Pi) dan moet je die nog overhalen naar de Pi. Dit moet je zelf even uitzoeken hoe dat bij jou het makkelijkst gaat. Ik heb de disk van de server gemount op de Pi en daarna met cp -r alles gecopieerd naar /home/pvdiary2/data/daily

We hebben data … nu de database.

Database Werk 🙂

Zorg ervoor dat pvdiary niet runt:

sudo systemctl stop pvdiary

Vervolgens ga je de database initialiseren, vullen en exporteren naar de website. Alles uit te voeren als user pvdiary2 anders wordt de database eigendom van root en mag je webserver er niks mee doen. Nog een keer: uit te voeren als user pvdiary2

Database aanmaken en initialiseren:

cd /home/pvdiary2
pvdiary --db --make-tables --init

Dit geef een melding in de geest van: Initializing database /home/pvdiary2/data/pvdiary_Maandenweg57.sqlite

Database vullen met alle tot nu toe beschikbare data:

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

Dit geeft ook wat output, elke maand wordt afgelopen. In mijn geval van af oktober 2012 .. net iets te veel om hier te copieren 🙂

Nu 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

Start nu pvdiary:

sudo systemctl start pvdiary

en kijk of ze lekker in haar vel zit

sudo systemctl status pvdiary

Mocht er wat fout gaan dan kun je alle messages bij het starten bekijken via

sudo journalctl -u pvdiary

Heb je erg veel ellende dan kun mogelijk het beste eerst wat gaan debuggen bij het opstarten van pvdiary via de commando regel.

Bekijk je website. Als ’t goed is zijn je data nu op de site zichtbaar. Het dashboard zit op http://192.168.2.15:8081/pvdiary_dashboard.php en de website op http://192.168.2.15:8082/

Als je je website aan de wereld wilt vertonen dan kun je het makkelijste in je router (van je provider) een forward regel opstellen.

Het is niet zo’n goed idee om het dashboard aan de wereld te laten zien 🙂

Omvormer uitlepelen

We hebben nu pvdiary wel aan de praat, en mogelijk zie je al historische gegevens, maar pvdiary moet ook aan de nieuwe (huidige) gegevens komen. Dit moet ze uit de omvormer lepelen.

Ik heb een SMA omvormer en gebruikte op mijn openSUSE server SMAspot maar helaas kun je die niet meer downloaden. Heb zelf nog wel een copy maar ga toch ook graag mee met de vaart der volkeren … dus … we gaan het nu doen met SBFspot.

De orginele beschrijving hiervoor staat op: https://www.zonstraal.be/wiki/PVdiary_installatie_op_Raspberry_Pi_-_PVDIAN_image#Configuratie_SBFspot

Hieronder mijn versie 🙂

Uitlezen van de SMA omvormer gaat via bluetooth, dus op je Pi moet je bluetooth aan de praat maken. Maak je niet druk, dat is eenvoudig. alle bluetooth packages zijn allemaal geinstalleerd (hebben we helemaal aan het begin gedaan). Heeft jou Pi (een 2B of ouder) geen bluetooth dan moet er nog een Bluetooth dongeltje in. Koop je in (de betere) computer zaken. Kopen en inpluggen.

Zorg er eerst voor dat het Bluetooth device/dongeltje aanwezig is. Ik heb de ervaring dat de SDcard snel kapot gaat als je zo maar de stroom eruit trekt. Ik had een dongeltje dus ik heb eerst de Pi uitgezet:

sudo systemctl halt

Vervolgens het dongeltje erin en de stroomstekker er weer uit en in, vervolgens een kort schietgebedje met de hogere macht …… Daarna weer inloggen als pvdiary2.

Kijk even of bluetooth nu automatisch gestart is:

sudo systemctl status bluetooth

Voorbeeld van output:

● bluetooth.service - Bluetooth service
Loaded: loaded (/lib/systemd/system/bluetooth.service; enabled; vendor preset: enabled)
Active: active (running) since Sat 2020-11-21 18:28:52 GMT; 3min 50s ago
Docs: man:bluetoothd(8)
Main PID: 1017 (bluetoothd)
Status: Running
Tasks: 1 (limit: 2063)
CGroup: /system.slice/bluetooth.service
└─1017 /usr/lib/bluetooth/bluetoothd

Nov 21 18:28:51 fileserver systemd[1]: Starting Bluetooth service...
Nov 21 18:28:52 fileserver bluetoothd[1017]: Bluetooth daemon 5.50
Nov 21 18:28:52 fileserver systemd[1]: Started Bluetooth service.
Nov 21 18:28:52 fileserver bluetoothd[1017]: Starting SDP server
Nov 21 18:28:52 fileserver bluetoothd[1017]: Bluetooth management interface 1.14 initialized

Als Active: op active (running) staat is ze opgestart. Als je ook nog de rode enabled ziet is alles prima voor elkaar. Enabled wil zeggen dat bij de volgende reboots bluetooth overnieuw gestart wordt.

Is dat niet het geval dan kun je bluetooth starten met:

sudo systemctl start bluetooth

En zorgen dat bij reboots het automatisch gestart wordt via:

sudo systemctl enable bluetooth

Volgende stap is SBFspot downloaden, compileren en gebruiken. SBFspot maakt via bluetooth contact met de omvormer, haalt de data op en zet de data op de juiste plek weg 🙂

Er is een handig tooltje om dit voor elkaar te krijgen, kijk op https://github.com/SBFspot/sbfspot-config Hier de korte versie:

Je moet eerst het bluetooth adres zoeken van de converter met hcitool. Dit geeft alle gevonden bluetooth device adressen. Je moet zelf uitzoeken welke de converter is 🙂 Voorbeeld:

hcitool scan
Scanning ...
00:80:25:A5:34:2F SMA001d SN: 2130100160 SN2130100160
E4:E0:C5:C8:DE:A6 n/a
00:80:25:A4:F7:72 SMA001d SN: 2130076542 SN2130076542
20:79:18:26:6D:57 LT0247396

Mijn converter is 00:80:25:A4:F7:72 (de andere zou wel eens van de buurman kunnen zijn LOL). Deze moet je noteren/onthouden, heb je straks nodig.

Eerts gaan we zorgen dat de Pi in de goede timezone staat:

sudo raspi-config

Run het setup scirpt:

cd /home/pvdiary2
curl -s https://raw.githubusercontent.com/sbfspot/sbfspot-config/master/sbfspot-config | sudo bash

En volg de instructies op:

Create new config

Setup Options (kun je later ook nog aanpassen, maar wel handig om dit nu zo goed mogelijk te doen):

Directories:

Datafiles: /home/pvdiary2/data/daily

Logfiles: /var/log/SBFspot

Program Files: /usr/local/bin (er komt straks ook een beetje troep bij die eigenlijk niet in een bin map horen….. maar dat nemen we maar voor lief)

Config files: /home/pvdiary2/SBFspot

Bluetooth

Select Bluetooth (vervolgens wordt gescanned en krijg je een lijst met gevonden adressen, selecteer jouw converter!)

Location:

Timezone: heb je net gezet met raspi-config, dus die is goed !

Location (deze had je ook al in de config van pvdiary opgenomen): 52,404/5,280

Locale: Nederlands

Decimaal symbol: comma

Plantname (zelfde als bij pvdiary.cfg): Maandenweg57

Database: NoSQL

Vervolgens klik je op Install en wordt SBFspot geinsalleerd.

Ga nu naar het dashboard: http://192.168.2.15:8081/pvdiary_dashboard.php en klik op Config, vervolgens Omvormers. Plaats/update de volgende twee regels:

import_params = "CSV 0 Maandenweg57 0 SBFspot /home/pvdiary2/SBFspot/SBFspot.cfg"
inverter_BTAddress = "00:80:25:A4:F7:72"

Vervolgens Bewaren en daarna Close.

Vanaf nu staan: http://192.168.2.15:8081/pvdiary_dashboard.php en http://192.168.2.15:8082 voor je klaar met de laatste gegevens 🙂

Klaar … NJET!

Pvdiary is nu wel aan de praat echter PVDiary, SBFspot, maar ook apache, hebben log files. Die groeien alleen maar. Trouwens /home/pvdiary2/data ook … maar daar staat waardevolle data in.

Log bestanden zijn interssant als je aan het debuggen bent, in alle andere gevallen wil je eigenlijk dat ze niet te veel diskspace op nemen. Om hiervoor te zorgen bestaat er een service op Linux genaamd logrotate. Deze helpt je de gebruikte diskspace binnen de perken te houden. Deze moet je eerst starten, enablen hoeft niet, dat is namelijk al de preset.

sudo systemctl start logrotate

Hoe weet logrotate wat ie doen moet, dat staat in /etc/logrotate.conf en /etc/logrotate.d/* We gaan eerst kijken naar /etc/logrotate.conf

In logroate.conf moet je

rotate 4

veranderen in

rotate 2

Dat is eigenlijk alles.

In /etc/logrotate.d staat al een configuratie voor apache2,  nu  SBFspot en pvdiary nog. Maak een bestand aan genaamd /etc/logrotate.d/SBFspot en plaats daar de volgende code in:

/var/log/SBFspot/*log {
  su pvdiary2 pvdiary2
  rotate 2
  maxage 7
  daily
  missingok
}

Maak een bestand aan genaamd /etc/logrotate.d/pvdiary en plaats daar de volgende code in:

/home/pvdiary2/log/*log_* {
  su pvdiary2 pvdiary2
  rotate 2
  maxage 7
  daily
  missingok
}

Nu logrotate nog herstarten

sudo systemctl restart logrotate

De Verzekering

Of te wel backup. Het meest waardevolle in het geheel is de map /home/pvdiary2/data. De omvormer onthoud ook een paar maand, maar geen paar jaar.  DUS zorg voor een backup van deze map!!

iNodes & Diskspace

Je kunt naast uit de diskruimte ook uit de inodes lopen. Grote slurper is /home/pvdiary2/log. Gooi deze regelmatig leeg.

Alle dagelijkse gegevens kunje ook elk jaar in een gezipte tar gooien:

cd data/daily/2012
tar czvf 2012.tar.gz .
rm *.csv

Have fun!!