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 …
You can start the dashboard with “pvdiary –dashboard”
or by directing your browser to
http://192.168.2.15:8081/pvdiary_dashboard.php
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!!