SBFspot PV-Daten-Logger manuell installieren
SBFspot manuell installieren
Zuerst werden die notwendige Tools/Bibliotheken installiert.
sudo apt-get install libboost-date-time-dev libboost-system-dev libboost-filesystem-dev
sudo apt-get install libboost-regex-dev libboost-all-dev
Bluetooth kann bei Verwendung von speedwire weggelassen werden. Die Option --no-install-recommends spart Platz, da dadurch keine unnötigen Drucker/Scanner-Treiber installiert werden.
Verzeichnisse anlegen
mkdir smadata
mkdir sbfspot.3
sudo mkdir /var/log/sbfspot.3
sudo chown -R pi:pi /var/log/sbfspot.3
Das Verzeichnis /home/pi/sbfspot.3 wird nur temporär als Container für den Quellcode benötigt und wird später wieder gelöscht.
Download und Installation von SBFspot
Auf der sbfspot-Seite wird zunächst die aktuellste bzw. gewünschte sbfspot-Version ermittelt, auf dem pi als Variable " sbfspot_version" definiert und dann heruntergeladen und entpackt.
Mit Putty am PI anmelden und folgende Kommandos eingeben:
sbfspot_version=3.8.3
wget –c https://github.com/SBFspot/SBFspot/archive/V$sbfspot_version.tar.gz
tar -xvf V$sbfspot_version.tar.gz -C SBFspot --strip-components 1
Im Zielverzeichnis (/home/pi/sbfspot.3) werden durch das Entpacken vier weitere Unterverzeichnisse mit allen benötigten Dateien für das jeweilige Programm (SBFspot, SBFspotUploadDaemon/SBFspotUploadService) erstellt.

SBFspot mit SQLite kompilieren
In den Ordner "/usr/local/bin/sbfspot.3/SBFspot“ wechseln, SBFspot (mit SQLite-Support) kompilieren und nach "usr/local/bin/sbfspot.3" binden/installieren.
sudo make sqlite
sudo make install_sqlite
Leere SQlite-Datenbank anlegen
sqlite3 SBFspot.db < /home/pi/sbfspot.3/SBFspot/CreateSQLiteDB.sql
Testen ob die neu angelegte Datenbank in Ordnung ist.
pi@himbeerix: ~/smadata $ sqlite3 SBFspot.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> select * from config;
SchemaVersion|1
sqlite> .quit
pi@himbeerix:~/smadata $
Konfiguration SPFspot
In die die Konfigurationsdatei SBFspot.cfg werden Standortbezeichnung, Passwort (für den Zugriff auf den Wechselrichter) , IP-Adresse des WR sowie Längen- und Breitengrad des Anlagenstandortes eingetragen. Die Geodaten können mit Google-Maps oder MAPAWI ermittelt werden.
Sollen mehrere Wechselrichter abgefragt werden, muss für jeden WR eine eigene Konfigurationsdatei (z. B. SMA_TRIP8.cfg u. SMA_TRIP10.cfg) angelegt werden. Der Aufruf von SBFspot muss dann mit der Option -cfg erfolgen "SBFspot -v -cfgSMA_TRIP8.cfg -cfgSMA_TRIP10.cfg".
sudo cp SBFspot.default.cfg SBFspot.cfg
sudo nano SBFspot.cfg
# ____ ____ ______
# / ___|| __ )| ___|__ _ __ ___ | |_
# \___ \| _ \| |_ / __| '_ \ / _ \| __|
# ___) | |_) | _|\__ \ |_) | (_) | |_
# |____/|____/|_| |___/ .__/ \___/ \__|
# |_|
#
# SBFspot.cfg - Configuration file for SBFspot.exe
# SBFspot - Yet another tool to read power production of SMA solar inverters
# (c)2012-2019, SBF (https://github.com/SBFspot/SBFspot)
#
# DISCLAIMER:
# A user of SBFspot 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 and Speedwire are registered trademarks of SMA Solar Technology AG
########################################################## #
# SBFspot.cfg - Created Do 28. Nov 14:29:50 CET 2019 with sbfspot-config V1.0.15
# For detailed configuration info, refer to SBFspot.default.cfg
#
IP_Address=192.168.178.8
# User password (default 0000)
Password=******* *(PW siehe SBFspot.cfg und/oder keePass)
Plantname=mpSol
OutputPath=/home/pi/smadata/%Y
OutputPathEvents=/home/pi/smadata/%Y/Events
CSV_Export=1
CSV_ExtendedHeader=1
CSV_Header=1
CSV_SaveZeroPower=1
CSV_Delimiter=semicolon
CSV_Spot_TimeSource=inverter
CSV_Spot_WebboxHeader=1
Timezone=Europe/Berlin
Latitude=48.912325
Longitude=8.255415
Locale=de-DE
DateTimeFormat=%d/%m/%Y %H:%M:%S
DateFormat=%d/%m/%Y
TimeFormat=%H:%M:%S
DecimalPoint=comma
CalculateMissingSpotValues=0
SQL_Database=/home/pi/smadata/SBFspot.db
# End of Config
Um die grundsätzliche Funktion zu prüfen wird SBFspot so gestartet, dass lediglich eine Bildschirmausgabe erfolgt. Dies wird mit folgenden Optionen erreicht:
| -v# | Set verbose output level: 0-5 (0=none, default=2) |
| -finq | force Inquiry (Inquire inverter also during the night) |
| -nocsv | Disables CSV export (Overrules CSV_Export in config |
| -nosql | Disables SQL export |
SBFspot V3.6.0
Yet another tool to read power production of SMA solar inverters
(c) 2012-2019, SBF (https://github.com/SBFspot/SBFspot)
Compiled for Linux (LE) 32 bit with SQLite support
Commandline Args: -v -finq -nocsv -nosql
Reading config '/usr/local/bin/sbfspot.3/SBFspot.cfg'
Wed Jan 22 09:04:00 2020: INFO: Starting...
sunrise: 08:10
sunset : 17:05
Connecting to Local Network...
Initializing...
SUSyID: 125 - SessionID: 852585912 (0x32D16DB8)
Inverter IP address: 192.168.178.8 from SBFspot.cfg
Logon OK
SUSyID: 408 - SN: 3005977634
Device Name: STP8.0-3AV-40 634
Device Class: Solar-Wechselrichter
Device Type: Sunny Tripower 8.0
Software Version: 03.00.08.R
Serial number: 3005977634
SUSyID: 408 - SN: 3005977634
Device Status: Ok
SUSyID: 408 - SN: 3005977634
Device Temperature: 0.0°C
SUSyID: 408 - SN: 3005977634
GridRelay Status: Geschlossen
SUSyID: 408 - SN: 3005977634
Pac max phase 1: 8000W
Pac max phase 2: 0W
Pac max phase 3: 0W
SUSyID: 408 - SN: 3005977634
Energy Production:
EToday: 0.000kWh
ETotal: 548.203kWh
Operation Time: 564.56h
Feed-In Time : 524.30h
SUSyID: 408 - SN: 3005977634
DC Spot Data:
String 1 Pdc: 0.115kW - Udc: 480.95V - Idc: 0.242A
String 2 Pdc: 0.112kW - Udc: 435.35V - Idc: 0.258A
SUSyID: 408 - SN: 3005977634
AC Spot Data:
Phase 1 Pac : 0.062kW - Uac: 228.44V - Iac: 0.365A
Phase 2 Pac : 0.066kW - Uac: 229.46V - Iac: 0.424A
Phase 3 Pac : 0.073kW - Uac: 231.14V - Iac: 0.420A
Total Pac : 0.201kW
SUSyID: 408 - SN: 3005977634
Grid Freq. : 49.99Hz
SUSyID: 408 - SN: 3005977634
Current Inverter Time: 22/01/2020 09:03:59
Inverter Wake-Up Time: 22/01/2020 08:06:07
Inverter Sleep Time : 22/01/2020 09:03:59
********************
* ArchiveDayData() *
********************
startTime = 5E278270 -> 22/01/2020 00:00:00
**********************
* ArchiveMonthData() *
**********************
startTime = 5E0C7BB0 -> 01/01/2020 12:00:00
Reading events: 2020-Jan-01
Wed Jan 22 09:04:00 2020: INFO: Done.
Verfügbare Optionen anzeigen
SBFspot V3.6.0
Yet another tool to read power production of SMA solar inverters
(c) 2012-2019, SBF (https://github.com/SBFspot/SBFspot)
Compiled for Linux (LE) 32 bit with SQLite support
SBFspot [-options]
-scan Scan for bluetooth enabled SMA inverters.
-d# Set debug level: 0-5 (0=none, default=2)
-v# Set verbose output level: 0-5 (0=none, default=2)
-ad# Set #days for archived daydata: 0-300
0=disabled, 1=today (default), ...
-am# Set #months for archived monthdata: 0-300
0=disabled, 1=current month (default), ...
-ae# Set #months for archived events: 0-300
0=disabled, 1=current month (default), ...
-cfgX.Y Set alternative config file to X.Y (multiple inverters)
-finq Force Inquiry (Inquire inverter also during the night)
-q Quiet (No output)
-nocsv Disables CSV export (Overrules CSV_Export in config)
-nosql Disables SQL export
-sp0 Disables Spot.csv export
-installer Login as installer
-password:xxxx Installer password
-loadlive Use predefined settings for manual upload to pvoutput.org
-startdate:YYYYMMDD Set start date for historic data retrieval
-settime Sync inverter time with host time
-mqtt Publish spot data to MQTT broker
Libraries used:
SQLite V3.27.2
BOOST V1.67.0
Ausserdem gibt es noch weitere undokumentierte Optionen ("Set 123Solar command value (Undocumented - For 123Solar usage only"). Siehe hierzu im Quellcode SBFspot.cpp ab Zeile 1215:
| SBFspot -q -123s | Gibt die Daten im 123solar -Format auf der Konsole aus |
| SBFspot -q -123s=DATA | Gibt die Daten im 123solar -Format auf der Konsole aus |
| SBFspot -q -123s=INFO=SYNC | Gibt die WR-Informationen im 123solar-Format auf der Konsole aus |
| SBFspot -q -123s=SYNC | Startet die Synchronisation des Wechselrichters |
| SBFspot -q -123s=STATE | Gibt den WR-Status im 123solar-Format auf der Konsole aus |
Prüfen ob in Einträge der DB vorhanden sind
sqlite3 SBFspot.db
select * from vwspotdata
pi@himbeerix: ~ $ sqlite3 SBFspot.db
SQLite version 3.27.2 2019-02-25 16:06:06
Enter ".help" for usage hints.
sqlite> select * from vwspotdata;
2019-10-21 15:11:10|2014-09-21 15:10:00|SN: 2002170358|SB 1600TL-
10|2002170358|208|0|1.213|0.0|172.0|0.0|0|0|0|0.0|0.0|0.0|233.8|0.0|0.0|208|0|0.0|4412|3
8.0|03.00.08.R|1579769402|1482|0|553 125|574.575|533.894|OK|Closed|0.0
sqlite> select * from inverters;
3005977634|STP8.0-3AV-40 634|Sunny Tripower 8.0|03.00.08.R|1579769402|1482|0|553
125|574.575|533.894|OK|Closed|0.0
sqlite> .quit
Automatisierung
Um Daten zu sammeln, sollte SBFspot alle 5 Minuten von 06:00 bis 22:00 Uhr und einmal täglich (05:55) für monatliche Daten und Ereignisse ausgeführt werden. Dazu werden zwei Skripte erstellt und in der crontab eingetragen.
Script daydata anlegen
#
############################################################
#--- daydata ---
#--- script zum Abruf der Tagesdaten
#---
###########################################################
log=/var/log/sbfspot.3/mpSol_$(date '+%Y%m%d').log
/usr/local/bin/sbfspot.3/SBFspot -v -ad1 -am0 -ae0 -cfg/usr/local/bin/sbfspot.3/SBFspot.cfg &>>$log
Script monthdata anlegen
#
############################################################
#--- monthdata ---
#--- script zum Abruf der Monatsdaten
#---
###########################################################
log=/var/log/sbfspot.3/mpSol_$(date '+%Y%m').log
/usr/local/bin/sbfspot.3/SBFspot -v -sp0 -ad0 -am1 -ae1 -finq -cfg/usr/local/bin/sbfspot.3/SBFspot.cfg &>>$log
Scripts ausführbar machen
sudo chmod +x /usr/local/bin/sbfspot.3/monthdata
Scripts daydata und monthdata in crontab eintragen
55 05 * * * /usr/local/bin/sbfspot.3/monthdata
crontab anzeigen
*/5 6-23 * * * /usr/local/bin/sbfspot.3/daydata
55 05 * * * /usr/local/bin/sbfspot.3/monthdata
Probleme durch Verbindungsabbrüche beseitigen
Das Script daydata wird alle 5 Minuten im Zeitraum zwischen 06:00 Uhr und 23:00 Uhr und das Script monthdata jeden Tag um 05:55 gestartet. Nach einigen Tagen stellte sich allerdings heraus, dass beim einmaligen Aufruf von SBFspot (via daydatay bzw. monthdata) das Scrip sehr oft mit der FM: "CRITICAL: Failed to initialize Speedwire connection" abbricht. Pingt man den WR an kommt immer eine Antwort, es gibt keine Aussetzer! Wenn SBFspot in kurzen Intervallen mehrfach aufgerufen wird, antwortet der WR dann nach spätestens dem vierten/fünften Aufruf.
Laut SBFspot-Forum (#256 und#354) versendet der Wechselrichter (entgegen der technischen Unterlagen) keine Mulicast-Pakete. Da SBFspot sowohl von daydata per cron, als auch von 123solar alle 5 min gestartet wird kommt es hier dann zwangsweise zu Kollisionen bzw. Verbindungsabbrüchen. Um diese zu verhindern mussten die Scrips daydata und monthdata geändert werden. In dem geänderten Script wird SBFspot solange gestartet bis die Verbindung zu Stande kommt.
Script daydata ändern
#!/bin/bash
#
###############################################################################
#--- daydata ---
#--- script zum Abruf der Tagesdaten
#---
##############################################################################
counter=0
grepCount=99
return=""
log=/var/log/sbfspot.3/mpsol_$(date '+%Y%m%d').log
logTmp=/var/log/sbfspot.3/daydata_tmp.log
while [ $counter -lt 10 -a $grepCount -ne 0 ];
do
echo -e $return$counter": ********************** $(date) ********************** from spotdata">$logTmp
/usr/local/bin/sbfspot.3/SBFspot -v -ad1 -am0 -ae0 -finq -cfg/usr/local/bin/sbfspot.3/SBFspot.cfg &>>$logTmp
cat $logTmp >> $log
grepCount=$(grep -c -i "ERROR" $logTmp)
grepCount=$(( $grepCount + $(grep -c -i "CRITICAL" $logTmp) ))
let counter+=1
return="\n"
$(sleep 4)
done
Script monthdata ändern
#!/bin/bash
#
counter=0
grepCount=99
return=""
log=/var/log/sbfspot.3/mpSol_$(date '+%Y%m').log
logTmp=/var/log/sbfspot.3/monthdata_tmp.log
while [ $counter -lt 10 -a $grepCount -ne 0 ];
do
echo -e $return$counter": ********************** $(date) ********************** from spotdata">$logTmp
/usr/local/bin/sbfspot.3/SBFspot -v -sp0 -ad0 -am1 -ae1 -finq -cfg/usr/local/bin/sbfspot.3/SBFspot.cfg &>>$logTmp
cat $logTmp >> $log
grepCount=$(grep -c -i "ERROR" $logTmp)
grepCount=$(( $grepCount + $(grep -c -i "CRITICAL" $logTmp) ))
let counter+=1
return="\n"
$(sleep 4)
done
Upload zu PVOutput einrichten
Zuerst die benötigte Library installieren. Dann in den Ordner /usr/local/bin/sbfspot.3/SBFspotUploadDaemon wechseln und den SBFspotUploadDaemon (mit SQLite-Support) kompilieren, binden und nach /usr/local/bin/sbfspot.3 installieren.
cd /home/pi/sbfspot.3/SBFspotUploadDaemon
sudo make sqlite
sudo make install_sqlite
Für die Konfiguration werden die Seriennummer des Wechselrichters sowie die System-ID und der API-Key von PVOutput benötigt und in der Konfigurationsdatei SBFspotUpload.cfg eingetragen.
| PVoutput_SID | <Seriennummer des Wechselrichters> : <Pvoutput System-ID> |
| 123****890634 : 4***01 | |
| PVoutput_Key | <API-Key> |
| 5e******eafre78150d3a4a3d2f10a************6 |
*(SID u. Key siehe PVOutput und/oder keePass)
SBFspotUpload.cfg
############################################################
# SBFspotUpload.cfg - Configuration file for SBFspotUploadService/Daemon
# (c)2012-2014, SBF (https://sbfspot.codeplex.com)
#
# DISCLAIMER:
# A user of SBFspotUploadService/Daemon 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.
#
############################################################
################################
### Log Settings ###
################################
# Windows: C:\Users\Public\SMAdata\Logs
# Linux : /home/pi/smadata/logs
#LogDir=C:\Users\Public\SMAdata\Logs
LogDir=/home/pi/smadata/logs
#LogLevel=debug|info|warning|error (default info)
LogLevel=info
################################
### PVoutput Upload Settings ###
################################
#PVoutput_SID
#Map inverters to PVoutput System ID's
#PVoutput_SID=SerialNmbrInverter_1:PVoutput_System_ID_1,SerialNmbrInverter_2:PVoutput_System_ID_2
#e.g. PVoutput_SID=200212345:4321
PVoutput_SID=123****890634:4***01
#PVoutput_Key
#Sets PVoutput API Key
PVoutput_Key=5e******eafre78150d3a4a3d2f10a************6
################################
### SQL DB Settings ###
################################
# SQL_Database (Fullpath to SQLite DB)
# Windows: C:\Users\Public\SMAdata\SBFspot.db
# Linux : /home/pi/smadata/SBFspot.db
#SQL_Database=C:\Users\Public\SMAdata\SBFspot.db
SQL_Database=/home/pi/smadata/SBFspot.db
# Reserved for MySQL
#SQL_Database=SBFspot
#SQL_Hostname=<Network Name> or <IP-address>
#SQL_Username=SBFspotUser
#SQL_Password=SBFspotPassword
Autostart des UploadDaemon einrichten
Der UploadDaemon soll nach einem Neustart des Pi automatisch gestartet werden. Dazu wird im Verzeichnis /usr/local/bin/sbfspot.3/ die Service-Datei SBFspotUpload.service bereitgestellt. Ab der SBFspot Version 3.5.x erfolgt der Start via system.d (bei älteren Versionen wurde via local.rc gestartet).
SBFspotUpload.service
[Unit]
Description=SBFspot Upload Daemon
After=mysql.service mariadb.service network.target
[Service]
User=pi
Type=simple
TimeoutStopSec=10
ExecStart=/usr/local/bin/sbfspot.3/SBFspotUploadDaemon
Restart=on-success
RestartSec=10
[Install]
WantedBy=multi-user.target
Service aktivieren & Starten
sudo systemctl start SBFspotUpload
UploadDaemon prüfen
● SBFspotUpload.service - SBFspot Upload Daemon
Loaded: loaded (/usr/local/bin/sbfspot.3/SBFspotUpload.service; enabled; vend
Active: active (running) since Thu 2020-06-04 17:31:03 CEST; 21min ago.
Main PID: 533 (SBFspotUploadDa)
Tasks: 1 (limit: 4915) Memory: 10.9M
CGroup: /system.slice/SBFspotUpload.service
└─533 /usr/local/bin/sbfspot.3/SBFspotUploadDaemon
Jun 04 17:31:03 himbeerix systemd[1]: Started SBFspot Upload Daemon.
Upload prüfen
Wenn der Daemon gestartet ist im Logfile unter in /home/pi/smadata/logs nachschauen ob ein Logfile erstellt wurde und der Upload richtig funktioniert.
cat SBFspotUpload20191129.log
pi@himbeerix: ~/smadata/logs $ cat SBFspotUpload20191129.log
[13:36:48] INFO: SBFspotUploadDaemon Version 2.0.0
[13:36:48] INFO: Starting Daemon...
[13:36:48] INFO: Uploading 30 datapoints, starting with 20191128,11:00,94403,840 => OK (200)
[13:37:31] INFO: Uploading 30 datapoints, starting with 20191128,13:30,99306,3456 => OK (200)
Nach kurze Zeit sollte der Upload auch unter den Live-Daten von PVOutput angezeigt werden.

Raspi neu starten
Zu Schluss sollte der PI noch neugestartet werden. Dieses erfolgt mit dem Shutdown-Befehl als Soft Reboot, mit der Option –r
.... oder als Hard Reboot, mit der Option –h, durch Herunterfahren und anschließendem Aus- und Einschalten per Netzschalter.
Probleme mit fehlerhaften Datensätzen beseitigen
Pvoutput akzetiert beim Upload Werte von maximal 150% der Peak-Leistung, was bei einer Anlage mit 8.5 KWP einem Wert von 12.750KW entspricht. Wird versucht größere Werte wie 12750 W hochzuladen, werden diese nicht akzetiert.
Da alle Momentanwerte in der SBFspot.db gespeichert bleiben wird der SBFspot-UploadDaemon immer wieder versuchen diesen Datensatz nach PVoutput.org hochzuladen. Fehlerhafte Uploads werden im entsprechenden Logfile von SBFspotUpload dokumentiert. Da ein “fehlerhafter” Datensätze den weiteren Upload verhindern, muss der betreffende Datensatz in der DB gelöscht werden. Sobald der fehlerhafte Datensatz gelöscht wurde (oder der zu hohe Wert “Power” 12750 ) korrigiert wurde, wird der Upload-Daemon seine Arbeit fortsetzen.
In den nachstehenden LOG-Files vom 29.11.2019 bzw. 30.11.2019 ist der Fehler zu erkennen. SBFspot hat erstmal um 02:40 Uhr ein Peak-Wert von <1205988 Watt (also 1.2 MW) gespeichert. Der Upload hat daraufhin gestoppt.
Dieser Fehler tritt laut SBFspot-Forum #137 ab und zu auf und niemand kennt die genaue Ursache. Im Forum wurde deshalb ein Workaround vorgestellt der das manuelle Löschen überflüssig macht.
Aktuelle Log Files prüfen
cd /home/pi/smadata/logs
ls –l
cat SBFspotUpload20191129.log
...
cat SBFspotUpload20191130.log
pi@himbeerix: ~/smadata/logs $ cat SBFspotUpload20191129.log
[13:36:48] INFO: SBFspotUploadDaemon Version 2.0.0
[13:36:48] INFO: Starting Daemon...
[13:36:48] INFO: Uploading 30 datapoints, starting with 20191128,11:00,94403,840 => OK (200)
[13:37:31] INFO: Uploading 30 datapoints, starting with 20191128,13:30,99306,3456 => OK (200)
....
....
[14:06:49] INFO: SBFspotUploadDaemon Version 2.0.0
[14:06:49] INFO: Starting Daemon...
[14:06:49] ERROR: Uploading 30 datapoints, starting with 20191129,02:40,100498,0 Bad request 400: Power value [1205988] too high for system size [8500]
[14:07:41] ERROR: Uploading 30 datapoints, starting with 20191129,02:40,100498,0 Bad request 400: Power value [1205988] too high for system size [8500]
[14:08:30] ERROR: Uploading 30 datapoints, starting with 20191129,02:40,100498,0 Bad request 400: Power value [1205988] too high for system size [8500]
[00:00:31] ERROR: Uploading 30 datapoints, starting with 20191129,08:05,100498,1205988,,,0,234.03 Bad request 400: Power value [1205988] too high for system size [8500]
....
[00:01:30] ERROR: Uploading 30 datapoints, starting with 20191129,08:05,100498,1205988,,,0,234.03 Bad request 400: Power value [1205988] too high for system size [8500]
[00:02:30] ERROR: Uploading 30 datapoints, starting with 20191129,08:05,100498,1205988,,,0,234.03 Bad request 400: Power value [1205988] too high for system size [8500]
[00:03:31] ERROR: Uploading 30 datapoints, starting with 20191129,08:05,100498,1205988,,,0,234.03 Bad request 400: Power value [1205988] too high for for system size [8500]
....
....
Manuelles Löschen des fehlerhaften Datensatzes
Datensatz mit zu großen Wert (z.B. >1205987) suchen und Wert auf 0 setzen.
sqlite3 SBFspot.db
select * from daydata where power>1205987;
update daydata set power=0 where power>1205987;
Workaround bei fehlerhaften Datensätzen
Die Tagesdaten (daydata) werden mit den VIEW „vwPvoData“ für den Upload vorbereitet. Der View wird so geändert, dass nur Datensätze mit korrekten Werten übernommen, fehlerhafte (zu große) Werten auf 0 gesetzt und erst dann an PVOutput übermittelt werden. Dadurch wird erreicht, dass der Upload nicht mit Fehler stehen bleibt. Der fehlerhafte Datensatz wird in der Tabelle daydata nicht gelöscht und es kann dadurch später (select * from daydata where power >8500;) nachvollzogen werden wie oft der Fehler aufgetreten ist. Theoretisch wären Werte bis 12750W möglich, in der Praxis werden jedoch bei einer Anlage von 8,5 KWp maximal 8500W auftreten. Deshalb wird als Grenzwert hier auch die tatsächlich Peak-Leistung der Anlage (8500W) eingetragen.
View vwPvoData
dd.Name,
dd.Type,
dd.Serial,
dd.TotalYield AS V1,
dd.Power AS V2,
cons.EnergyUsed AS V3,
cons.PowerUsed AS V4,
spot.Temperature AS V5,
spot.Uac1 AS V6,
NULL AS V7,
NULL AS V8,
NULL AS V9,
NULL AS V10,
NULL AS V11,
NULL AS V12,
dd.PVoutput
FROM vwDayData AS dd
LEFT JOIN vwAvgSpotData AS spot
ON dd.Serial = spot.Serial AND dd.Timestamp = spot.Nearest5min
LEFT JOIN vwAvgConsumption AS cons
ON dd.Timestamp = cons.Nearest5min
ORDER BY dd.Timestamp DESC;
Dem VIEW vwPvoData wird die markierte Abfrage hinzugefügt. Da SQLite kein „ALTER VIEW" kennt, muss der VIEW zuerst gelöscht und anschließend neu erstellt werden.
View vwPvoData neu erstellen
sqlite3 SBFspot.db
DROP VIEW IF EXISTS vwPvoData;
CREATE VIEW vwPvoData AS
SELECT dd.Timestamp,
dd.Name,
dd.Type,
dd.Serial,
dd.TotalYield AS V1,
CASE WHEN dd.Power > 8500
THEN 0
ELSE dd.Power
END AS V2,
cons.EnergyUsed AS V3,
cons.PowerUsed AS V4,
spot.Temperature AS V5,
spot.Uac1 AS V6,
NULL AS V7,
NULL AS V8,
NULL AS V9,
NULL AS V10,
NULL AS V11,
NULL AS V12,
dd.PVoutput
FROM vwDayData AS dd
LEFT JOIN vwAvgSpotData AS spot
ON dd.Serial = spot.Serial AND dd.Timestamp = spot.Nearest5min
LEFT JOIN vwAvgConsumption AS cons
ON dd.Timestamp = cons.Nearest5min
ORDER BY dd.Timestamp DESC;
Aufräumen
Wenn Alles funktioniert kann der Ordner mit dem Quellcode entfernt werden.
Daten-Verzeichnis bereinigen
Wenn SBFspot einige Monate lang läuft, werden Verzeichnisse mit Log-Dateien ziemlich voll. Mit den nachstehenden Aufrufen werden entsprechende Einträge in der crontab erstellt um die Log-Dateien die älter als 7 Tage sind zu löschen. Zuvor wurden diese Daten mit dem Backupscript allerdings auf die OMV gesichert.
Scripts zum Löschen der Log-Dateien in crontab eintragen
(crontab -l ; echo '0 1 * * * find /home/pi/smadata/logs/ -name "*.log" -mtime +7 -delete')|crontab -
(crontab -l ; echo '0 1 * * * find /home/pi/smadata/ -name "*.csv" -mtime +7 -delete')|crontab -
(crontab -l ; echo '0 1 * * * find /home/pi/solarlog/ -name "*.*" -mtime +7 -delete')|crontab -
(crontab -l ; echo '0 1 * * * find /home/pi/logs/ -name "*.log" -mtime +7 -delete')|crontab --
crontab anzeigen
*/5 6-23 * * * /usr/local/bin/sbfspot.3/daydata
55 05 * * * /usr/local/bin/sbfspot.3/monthdata
0 1 * * * find /var/log/sbfspot.3/ -name "*.log" -mtime +7 -delete
0 1 * * * find /home/pi/smadata/logs/ -name "*.log" -mtime +7 -delete
0 1 * * * find /home/pi/smadata/ -name "*.csv" -mtime +7 -delete
0 1 * * * find /home/pi/solarlog/ -name "*.*" -mtime +7 -delete
0 1 * * * find /home/pi/logs/ -name "*.log" -mtime +7 -delete
Hier gehts weiter zu 123solar PV-Monitoring einrichten