aufbereiten der daten für den monitor

unter reinhardruemer.com/monitor ist eine übersicht über alle relevanten ertrags- und sensordaten zu finden. hier werden live die daten der photovoltaikanlage, des cmi und ein live-wetterbild angezeigt. die daten befinden sich verteilt auf den verschiedenen geräten im haus (wechselrichter, cmi, webcam).

Um die daten zentral zu sammeln und aufzubereiten habe ich ein altes netbook (asus eee pc) umfunktionier. darauf läft jetzt linux lubuntu 16.10. das netbook steht im keller und hat eine leistungsaufnahme bei ausgeschaltetem display ca. 10 watt. falls ich darauf zugreifen muss, läuft immer ein teamviewer daemon darauf. alternativ kann man dank des vorhandenen displays und der tastatur auch direkt im keller darauf arbeiten. im folgenden stelle ich hier meine skripte frei zur verfügung, falls jemand eine ähnliche konfiguration hat als ausgangspunkt und auch zur wiederverwendung.

auslesen des fronius symo wechselrichters und hochladen der daten auf pvoutput.org

die daten im json format werden über die fronius symo api ausgelesen und dann mit dem script json tool “jq” weiterverarbeitet. jq musste ich über den paketmanager nachinstallieren. das skript sieht wie folgt aus:

#!/bin/bash
# Tool um den Fronius Symo auszulesen und die Daten auf pvoutput.org
# zu übertragen

# Auslesen der Wechselrichterdaten
froniusData=$(curl 'http://XXX.XXX.XXX.XXX/solar_api/v1/GetInverterRealtimeData.cgi?Scope=Device&DeviceID=1&DataCollection=CommonInverterData')
dayEnergy=$(echo ${froniusData} | jq '.Body.Data.DAY_ENERGY.Value') 
currentPower=$(echo ${froniusData} | jq '.Body.Data.PAC.Value')
currentVoltage=$(echo ${froniusData} | jq '.Body.Data.UAC.Value')

# Daten vorbereiten
heute=$(date +"%Y%m%d")
jetzt=$(date +"%H:%M")

# Daten Hochladen
curl -d "d=$heute" -d "t=$jetzt" -d "v1=$dayEnergy" -d "v2=$currentPower" -d "v6=$currentVoltage" -H "X-Pvoutput-Apikey: HERE-YOUR-API-KEY" -H "X-Pvoutput-SystemId: YOUR-SYSTEM-ID" http://pvoutput.org/service/r2/addstatus.jsp

# Debugging OUTPUT
echo $jetzt
echo Tagesoutput: $dayEnergy kWh
echo Aktuelle Leistung: $currentPower W
echo Aktuelle Spannung: $currentVoltage V

webcam bild holen und auf den webserver meines hosters legen

als webcam verwende ich ein altes samsung galaxy sIII in verbindung mit der app “ip-webcam” die es auch als pro version gibt. die app startet auf dem galaxy sIII einen webserver auf dem man auch gleich über eine eigene url (URL-TO-PHONE:8080/shot.jpg) direkt ein aktuelles standbild der kamera aufrufen kann. mit folgdendem skript habe ich das automatisiert und kopiere das bild sofort auf meinen webserver, wo es direkt in den monitor eingebunden wird. damit das script funktionierte, musste ich das paket “wput” nachinstallieren.

#!/bin/bash
# Script um von der Webcam ein Standbild zu holen
# und es dann auf meine webseite hochzuladen

# Das Standbild von der Webcam holen
wget -O /local/path/to/image.jpg "http://XXX.XXX.XXX.XXX:8080/shot.jpg"
sleep 2

# Upload
wput -u -nc --basename=/local/path/to/ /local/path/to/image.jpg "ftp://FTPUSERNAME:FTPPASS@FTPSERVER/serverpath/"
sleep 2

auslesen des anlagenschemas mitsamt der sensorwerte und schaltzustände des cmis der solaranlage/heizung

da das cmi hinter einer http-auth seite steht muss man beim erstellen des screenshots die userdaten und das passwort in der url mitgeben. aufruf also http://USER:PASS@URLTOCMI/Schema.html#1 lädt das hauptschema des cmi. als vncserver muss das paket “vnc4server” installiert werden. um auf das neue display zuzugreifen muss ebenfalls noch das paket “vnc4viewer” installiert werden. bei dem allerersten zugriff auf das cmi muss ein dialog mit ok quitiert werden, da man auf eine passwortgeschützte seite zugreift.

das script macht in einer endlosschleife alle xx sekunden einen screenshot vom cmi und lädt ihn auf meinen webserver hoch. um das script zu starten kann man es entweder im terminal ausführen, in der befehlszeile starten (klick auf “ausführen” dann den pfad zum script einfach eingeben). zusäthlich habe ich das script noch in die crontab eingetragen. mit dem eintrag @reboot wird das script nach einem neustart einmal gestartet und dann aufgrund der endlosschleife wieder ausgeführt. hier das skript.

#!/bin/bash
# Macht eine Screenshot des CMI Interfaces und
# lädt das Bild auf reinhardruemer.com hoch
# start a server with a specific DISPLAY
vncserver :11 -geometry 600x500
sleep 2

# Öffne das Schema
firefox --display :11 http://USER:PASSWORD@CMI-ADRESS/Schema.html#1
sleep 10

#Jede Minute einen Screenshot machen und das Bild auf
# reinhardruemer.com hochladen -> ENDLOSSCHLEIFE
while :
do
 import -crop 580x460+0+100 -display :11 -window root /path/to/screenshot/cmiimage.jpg
wput -u -nc --basename=/local/path/to/ /local/path/to/cmiimage.jpg "ftp://FTPUSERNAME:FTPPASS@FTPSERVER/serverpath/"
 sleep 60
done

regelmäßige ausführung der skripte

das fronius und webcam skript wird in die crontabelle eingetragen und so konfiguriert, dass sie alle 5 minuten aufgerufen werden. aufruf der crontabelle mit contab -e.

*/5 * * * * /path/to/froniusscript.sh
*/5 * * * * /path/to/webcamscript.sh

#after reboot
@reboot /path/to/cmiscript.sh