Anlagenbild Tomatenauswahl 123solar_raspi OMV SMA WR 123solar_web SL HP Kit pvoutput OpenWeatherMap SBFspot 123solar_org Stromzähler Bash Script Fun Daikin Solar Asola PV Module Gallery


SBFspot PV-Daten-Logger installieren



Im Gegensatz zur alten (manuellen Installation) von SBFspot , kann ab der Version 3.6 die Installation/Konfiguration von SBFspot recht einfach mit dem tool sbfspot-config erfolgen.

sudo bash -c "$(curl -s https://raw.githubusercontent.com/sbfspot/sbfspot-config/master/sbfspot-config)"

Um den Schreibzugriff auch für Web-Scripte mit www-dat:www-data zu gewähren müssen die Rechte für das Verzeichniss entsprechend gesetzt werden.
sudo chmod 777 /home/pi/smadata

Jetzt sollte SBFspot noch kurz getestet werden ....
Verfügbare Optionen anzeigen
/usr/local/bin/sbfspot.3/SBFspot -?

pi@himbeerix: ~/smadata $/usr/local/bin/sbfspot.3/SBFspot -?

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


cd /home/pi/smadata
sqlite3 SBFspot.db
select * from vwspotdata


pi@himbeerix: ~ $ cd /home/pi/smadata
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



Probleme durch Verbindungsabbrüche beseitigen

Durch sbfspot_config wurden die scripts daydata und monthdata erstellt und in der crontab eingetragen.

#!/bin/bash
#
############################################################
#--- 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

 


#!/bin/bash
#
############################################################
#--- 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


crontab

pi@himbeerix: ~ $/crontab -l
*/5 6-23 * * * /usr/local/bin/sbfspot.3/daydata
55 05 * * * /usr/local/bin/sbfspot.3/monthdata

Wie in der crontab ersichtlich, wird das Script daydata 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.

sudo apt-get install libcurl3-dev
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)

 

sudo nano /usr/local/bin/sbfspot.3/SBFspotUpload.cfg

 

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).

sudo nano /usr/local/bin/sbfspot.3/SBFspotUpload.service

 

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 enable /usr/local/bin/sbfspot.3/SBFspotUpload.service
sudo systemctl start SBFspotUpload

 

UploadDaemon prüfen


sudo systemctl status SBFspotUpload


pi@himbeerix: ~ $ sudo systemctl status SBFspotUpload
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.

cd /home/pi/smadata/logs
cat SBFspotUpload20191129.log

pi@himbeerix: ~ $ cd /home/pi/smadata/logs
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

sudo shutdown –r 0

.... oder als Hard Reboot, mit der Option –h, durch Herunterfahren und anschließendem Aus- und Einschalten per Netzschalter.

shutdown -h now


Probleme mit fehlerhaften Datensätzen beseitigen

ist seit der Version 3.8.4 (11-DEC-2021) (bugfix release) nicht mehr relvant

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: ~ $ cd /home/pi/smadata/logs
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.

cd /home/pi/smadata
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 &gt;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

 SELECT dd.Timestamp,
  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

cd /home/pi/smadata
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;

 

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 /var/log/sbfspot.3/ -name "*.log" -mtime +7 -delete')|crontab –
(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

pi@himbeerix: ~ $/crontab -l
*/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