Frontansicht kostal pico

Kostal Wechselrichter in OpenHAB einbinden

1
0

Warum überhaupt Wechselrichter und OpenHAB?

…weil es einfach cool ist in seiner OpenHAB App auch gleich den Ertrag zu sehen. Nein im Ernst: Es tut gut zu wissen, ob der Wechselrichter läuft oder ob es eine Fehlfunktion gibt. Zum anderen ist es immer spannend zu sehen wie der Ertrag ist, so bekommt man ein gewissen Gefühl für seine Anlage.

Den Wechselrichter kann man direkt ansurfen, da er eine interne Seite bereit stellt auf der man die Daten auslesen kann, weiter kann er automatisch seine Daten auf eine Webseite hochladen. Weiter zeigt er im Display alternierend die Werte an. Aber nur um mal eben schnell … eine meiner Lieblings (hass-)redewendungen… den Wechselrichter auszulesen ist mir das zu aufwendig. Zudem habe ich OpenHAB ja eh am Laufen, warum also sollte ich dies nicht nutzen?

Werbung:

Allgemeines Vorgehen:

Zunächst einmal habe ich versucht mit den Beispielen von OpenHAB und anderen Seiten ein entsprechendes Item zu definieren. Dabei ist mir aufgefallen, dass die Regular Expression wie sie dort verwendet wird bei mir nicht funktioniert. Weiter kam erschwerend hinzu, dass seit dem letzten update das Laden der Webseite nicht mehr sauber funktioniert. Und da ich eh lieber meine eigenen Skripte schreibe habe ich mich selbst daran gemacht. Der Quellcode der datei war schnell analysiert und ich habe meine regexes für ein kleines Python Skript schnell fertig gehabt. Der Code läuft bei mir stabil und sollte auch für andere ohne große Probleme umsetzbar bzw. anpassbar sein.

 

Zu dem regex-fluch:

Regular Expressions sind Fluch und Segen zugleich. Wenn man weiß was man tut und warum, kann man so extrem schnell, sauber bestimmte Stellen in einem Zeichenfluss finden und ausgeben. Allerdings bin ich beim „Lernen“ auf einige Störfaktoren gestoßen: der erste Faktor war, dass in jeder verda**ten Sprache andere Formulierungen verwendet werden müssen, weil es keine „Norm“ für regexes gibt. Oftmals ist die Dokumentation nicht eindeutig und Hilfe zu finden ist auch schwer, weil es bei der Arbeit mit regexes ein paar Regeln gibt, die gut sind, aber gerade manchmal eben auch nicht: Eine „goldene“ Regel ist: Verwende regex nur dann, wenn sich der Text nicht so ändert, dass deine Suchmaske nicht mehr passen könnte. Das trifft zu 99% auf Webseiten zu. Aber: Diese eine Webseite ist ja mit der Firmware „eingebrannt“ und wird sich somit nicht ändern. Somit ist der Aufwand diese Seite erst mit einem Parser wie beautiful soup oder ähnlichem Aufzubereiten eigentlich übertrieben.

 

Der Quellcode:

Ich habe also ein kleines Skript erstellt, welches später von OpenHAB aus aufgerufen werden kann. Beim Aufruf müssen ein paar Optionen übergeben werden, die ich nachher noch genauer erläutern werde.

# ***********************************************************
# ***                                                     ***
# *** Pythonscript um die Webseite vom                    ***
# *** Solarinverter Kostal Pico 10.1 DCS auszulesen       ***
# ***                                                     ***
# *** Version: 2.0                                        ***
# *** Last change: 01.11.2016                             ***
# ***                                                     ***
# ***                                                     ***
# *** Beim Aufruf bitte Angeben welcher Wert              ***
# *** zurückgegebenwerden soll                            ***
# ***                                                     ***
# *** Parameter:   1 = Aktuelle Leistung                  ***
# ***              2 = Tagesenergie                       ***
# ***              3 = Gesamt produzierte Energie         ***
# ***                                                     ***
# *** Copyright (C) 2016 by Dipl.Ing. (FH) Thomas Schäfer ***
# ***                                                     ***
# ***********************************************************

import sys      # Wird für Dateifunktionen benötigt
import urllib   # Wird benötigt um die Webseite des Servers abzufragen
import re       # Wird benötigt um Regular Expressions verwenden zu können

# Aufrufende Argumente auf die Variablen aufteilen zur besseren Verständlichkeit
# durch die Funktion str() wird die Eingabe als String behandelt
vServer = str(sys.argv[1])
vBenutzer = str(sys.argv[2])
vPasswort = str(sys.argv[3])
vAuswahl = str(sys.argv[4])
iCheck = len(vServer)

if iCheck < 1:
print "Bitte Parameter angeben: "
print "Korrekter Aufruf: python pyserver.py [ip] [benutzer] [passwort] [option]"
exit()
else:

# Zusammensetzen des Strings der den Serveraufruf enthält
vWebseite = "http://" + vBenutzer + ":" + vPasswort + "@" + vServer

# Öffnen/Aufrufen der Webseite des Konverters
temp = urllib.urlopen(vWebseite)

#Lesen der Webseite in eine Variable
temp2 = temp.read()
temp.close    #Webseite auch wieder schließen

# Suche nach dem gewünschten Wert

if sys.argv[3] == '1':
result = re.search(r"aktuell\r\n.*\r\n\s+(\d+)",temp2)

elif sys.argv[3] == '2':
result = re.search(r"Tagesenergie\r\n.*\r\n\s+(.*)",temp2)

elif sys.argv[4] == '3':
result = re.search(r"Gesamtenergie\r\n.*\r\n\s+(\d+)",temp2)

else:
result = "ERR"
print result
exit()

if result:
print result.group(1)
else:
result = 0
print result

Das war’s auch schon 🙂

Die Item-Definition in OpenHAB:

Um den Wert in Openhab anzeigen zu lassen muss man nun nur noch ein geeignetes Item erstellen. Dies könnte wie folgt aufgebaut sein:

Number Solar_Aktuell "Aktuell: [%.0f W]" (energie) {exec="<[/usr/bin/python /usr/share/openhab/configurations/scripts/pvserver.py 192.168.178.256 nutzer1 geheimesPW 1:60000:REGEX((.*?))]"}

Es wird also python aufgerufen. Python wird gesagt es soll das script „pvserver.py“ öffnen. Als Aufrufparameter werden übergeben: Die IP-Adresse wo der Kostalserver zu finden ist, der Beutzername und das Passwort. Der letze Parameter gibt an, welcher Wert aus der Seite extrahiert werden soll.

1
0

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.