Linux-Projekte
für die HomeMatic
(in Python realisiert)
Scripte
ohne grafische Oberfläche der HomeMatic
|
Seit
etlichen Jahren ist bei mir zur Hausautomatisierung die
HomeMatic von ELV / eq3 installiert (zuerst die CCU1, jetzt
die CCU2). Damit werden unter anderem...
alle
Lichter geschaltet
die
Rolläden, gesteuert
die
Heizung geregelt
die
Rauchmelder überwacht
überwacht,
ob im Keller Wasser eingedrungen ist
die
Warmwasser-Kreislaufpumpe gesteuert
Fenster
geöffnet/ geschlossen
angezeigt,
ob die Garage geöffnet/ geschlossen ist
abhängig
von den Außentemperaturen Elektro-Heizkörper zu- oder
abgeschaltet
….
und und und.
|
Bildquelle: eQ-3/ Homematic
|
Um
in der Homematic auf Ereignisse und Werte reagieren zu können,
gibt es dort die Möglichkeit entsprechende Programme zu
erstellen. Dafür gibt es dort einen einfachen, grafischen
Editor. Hier können Geräte oder Systemvariablen ausgewählt
werden, Zeiträume definiert, Grenzwerte eingegeben werden ….
und, und, und.
Aber
das Alles ist in manchen Situationen noch nicht Auswahl genug.
Für solche Fälle ist es möglich, per Script-Programmierung auf
die Logikschicht zuzugreifen. Damit kann man, unter anderem, auf
jeden einzelnen Datenpunkt von jedem Gerät zugreifen.
Bildquelle: eQ-3/ Homematic
|
Diese
Scripte entwickelt man in einem Unterfenster bei der
grafischen Programmierung.
Hierzu
muß aber per WEB-Browser auf das grafische User-Interface
(GUI), auch Benutzeroberfläche genannt, der Homematic
zugegriffen werden. Dort muß dann die Anmeldeprozedur
ausgeführt werden, worauf die Startseite der GUI angezeigt
wird.
Hier
ist dann unter dem Menüpunkt 'Programme und Verknüpfungen'
der Unterpunkt 'Programme & Zentralenverknüpfungen'
auszuwählen.
|
Bildquelle: eQ-3/ Homematic
|
Das
ganze dauert aber eine geraume Zeit, da zunächst anscheinend
ALLE vorhandenen Geräte, Kanäle und Datenpunkte vorbereitet
werden. Die 'Sanduhr' läuft dabei ziemlich lange!
Im
nun folgenden Bildschirm, mit der Auflistung der bereits
vorhandenen Programme, ist dann am unteren Rand der
Punkt“Script testen' auszuwählen
|
Bildquelle: eQ-3/ Homematic
|
Im
sich nun öffnenden Unterfenster kann dann das Script
eingegeben und getestet werden
Die bereits
werksseitig vorgegebene Zeile (die man auch löschen kann)
kann mit dem Button „Ausführen' gestartet werden und
erzeugt das Ergebnis :
Hallo
Welt!
Nun
geht es normalerweise daran, eigene Scripte zu entwickeln,
einzutippen und auszutesten.
|
|
Dabei
ist der Befehlsinterpreter der Homematic allerdings extrem
pingelig. Falls irgend etwas nicht stimmt (Groß-
Kleinschreibung, Syntax, Semikolon vergessen, und, und, und
...), wird das Programm erst garnicht ausgeführt. Eine
Fehlermeldung erhält man an dieser Stelle leider auch nicht.
Hier
die Eingabe eines Beispiel-Scripts im oberen Teil des Fensters
'Eingabe'
|
Bildquelle: eQ-3/ HomeMatic
|
Wird
dieses durch Druck auf den Button 'Ausführen' gestartet
erscheint bei diesem Beispiel in dem unteren Fensterteil
'Ausgabe' die hier gezeigte Ausgabe mit den aktuell
vorhandenen Servicemeldungen.
|
Wer
sich mit der Script-Programmierung befassen will, muß sich
natürlich auch mit der Sprachbeschreibung, dem Objektmodell und
den Datenpunkten befassen. Dazu sei an dieser Stelle aber nur auf
die zum Teil doch recht ausführliche Dokumentation von eQ-3
hingewiesen
Das
Entwickeln und Testen von Scripten ist auf der HomeMatic-Zentrale
also ziemlich Zeitaufwendig. Allein das Einloggen und Warten auf
das Testfenster dauert dabei einige Minuten. Das spätere
Schließen des Fensters geht zwar verzögerungsfrei, aber das
AUSLOGGEN kann schon mal etliche Minuten in Anspruch nehmen!
Schnell mal kurz was testen, kann man also vergessen.
Nun
kam mir die Idee, ob man diese Tests nicht auch OHNE die
Grafische Oberfläche (GUI) der Homematic durchführen könnte.
Es hat
mich zwar einiges an kaum mehr vorhandenen grauen Haaren
gekostet, aber es funktioniert wie gewünscht/ gedacht.
Dazu
muß allerdings auf die sogenannte 'ServiceSchnittstelle' der
HomeMatic zurückgegriffen werden. Diese verbirgt sich bei der
normalen HomeMatic IP-Adresse hinter dem Port 8181. Dorthin
können 'HTTP POST-Header' mit Scripten gesendet werden. Diese
verarbeitet die HomeMatic dann und liefert die dort gemachten
Ausgaben der 'Write' Script-Befehle an den aufrufenden Prozeß
zurück.
Dieses
Vorgehen habe ich bereits bei der Darstellung von auf der
HomeMatic erzeugten Dateien mit Temperaturverläufen angewendet.
Hierzu
mußte ich nur das bereits vorhandene Programm anpassen und
entsprechend abwandeln. Das hat dann doch mal wieder mehr Zeit
verschlungen, als zunächst vermutet.
Der
Ablauf ist nun folgendermaßen:
Bildquelle: J. Hoppe
|
Das
Python-Programm wird gestartet und erscheint mit der Abfrage:
'Datei'
, 'ENTER' oder 'ende'
Das
Script, das getestet werden soll steht in einer Textdatei.
Pfad und Dateiname stehen in der Zeile mit der Bezeichnung
'Scriptdatei'.
Wird
bei Auswahl 'datei' eingegeben, kann man den NAMEN einer
bestehenden Scriptdatei eingeben. Dieser erscheint dann auch
wieder in der Zeile 'Scriptdatei'
Alle
Scriptdateien müssen sich im aktuellen Verzeichnis im
Unterverzeichnis 'SCRIPT' befinden.
|
Die
Eingabe von 'ende' beendet das Programm wieder.
Wird
aber nur die Eingabetaste gedrückt, wird das Script an die
HomeMatic gesendet und deren Antwort im Programmfenster
angezeigt.
SCRIPT:
var suchDev;
string indexSM;
var
Smess;
string finde;
var stelle;
var
stelle2;
var geraet=dom.GetObject(28);! === Alle System
ServiceMeldungen
foreach(indexSM,
geraet.EnumUsedIDs())
Smess=dom.GetObject(indexSM);
if(Smess.State())
{!
=== Wenn Status aktiv dann...
finde="BidCos-RF."
#
Smess.Name().Substr(3);
suchDev=dom.GetObject(finde);
Write(Smess.Timestamp().Format("%Y-%m-%d
%H:%M")#";");
var
istDev=dom.GetObject(suchDev.Device());
stelle=istDev.Name().Find(":");
stelle2=Smess.Name().Find(".");
Write(istDev.Name().Substr(0,stelle)
# ";");
WriteLine(Smess.Name().Substr(stelle2+1));
}
}
|
Das
links vorgestellte Script durchforscht auf der HomeMatic die
Servicemeldungen und gibt diese dann direkt im Programmfenster
aus (siehe unten). Ist enorm schnell!
Und
das Ganze ohne den Umweg über die grafische Oberfläche
|
ERGEBNIS:
>
> >
> Gesendet: 643 (Bytes)
< Empfangen,
Länge (soll): 589
empfangsdatenlänge:
0 589
Anzahl
Einträge:
4
------------------------------------------------------------
2017-08-02
20:40;OG_Bewegung_Balkon_S;LOWBAT
2017-04-08
12:26;EG_Briefkasten_u_Klingel;UNREACH
2017-08-02
20:41;OG_Heizung_Bad_neu;LOWBAT
2017-05-09
17:44;DG_DachFenster_offen_Sued;CONFIG_PENDING
< <
<
|
Auf
diese Weise ist auch ein Schalten von Geräten, z.B. Lichtern
möglich.
Dazu
müssen im rechts vorgestellten Beispielscript 'Bezeichnung'
und 'Kanal' durch tatsächlich in der HomeMatic vergebene Name
und Kanäle ersetzt werden.
Ist
die Runde Klammer hinter 'geraet.State' leer, wird der Status
abgefragt, wird dort statt dessen eine 0 oder 1 eingegeben,
wird das entspechende Licht (oder ähnliches) aus- oder
eingeschaltet!
|
SCRIPT:
var
geraet=dom.GetObject("Bezeichnung:Kanal");
WriteLine("Gerätestatus");
WriteLine(geraet.Name()
# " = " # geraet.State());
|
Öffnet
man neben dem Python Programmfenster zum Beispiel noch ein
Editor-Fenster mit der Text-Datei ist, im Gegensatz zu der
'Frickelei' in der grafischen Oberfläche der HomeMatic', ein
'relativ' einfaches und entspanntes Arbeiten möglich.
Inclusive 'Save', 'Load', 'Find', 'Replace', 'Print',
usw.
Speichert man die gerade im Editor gemachten
Änderungen kurz ab (meist über 'STRG + S'), kann mit Druck
auf die 'Enter' Taste im Pythonfenster die Auswirkung
unmittelbar angesehen werden.
Ich find's extrem
praktisch ;-)
|
|
Dieses
Programm funktioniert nur mit HomeMatic-CCU2 bis maximal
Firmwareversion 2.27.7. Seit Firmware Version 2.27.8 wurde
die ‚Service-Schittstelle‘ (port 8181) von eQ-3 geändert und
das hier vorgestellte ‚Script-Programm‘ lieferte dann keine
Ergebnisse mehr. Eine Anfrage bei eQ-3 (dem Hersteller) brachte
die sehr kundenfreundliche Antwort, daß man nur ‚NORMALE‘
WEB-GUI-Anwender unterstützen könne.
Eigene
Recherchen haben dann ergeben, daß eQ-3 anscheinend den Port
8181 intern nun an einen anderen Programmteil als bisher
übergibt. Dieser prüft die eingehenden HTTP-Header Daten wohl
intensiver auf Vollständigkeit.
Nachdem ich etwas mit den
Parametern der HTTP-Header herumexperimentiert hatte, bin ich
darauf gekommen, daß der Eintrag : ‚HOST:‚ jetzt
erforderlich ist. Nachdem ich diesen hinzugefügt habe,
funktioniert das ‚Script‘-Programm auch mit der neuesten
HomeMatic Firmware (aktuell 2.45.1) wieder.
Das
Python-Programm kann entweder __HIER__
oder im Downloadbereich heruntergeladen werden