JSR223 Jython Scripting Helper
Hier möchte ich kurz meine eigenen openHAB Rule Helper Klassen vorstellen. Der Grund, sie zu erstellen kam daher das mir der Syntax der JSR223 Jython Schnittstelle zu aufwendig und kompliziert war um mal kurz eine einfache Rule zu schreiben.
Es gibt zwar bereits ein GibHub Projekt welches eine weitgehende Abstraktion bietet. Diese geht mir aber nicht weit genug weshalb ich meine eigene Lösung entworfen habe. Sie basiert aber auf der existierenden Lösung und erweitert sie.
Beispiel für eine einfache Rule
|
|
Rule Annotation
Mit der @rule Annotation wird diese Klasse als Regel registriert. Der enthaltene String “door_bell_notification.py” wird für das Logging benötigt. Meine Rule Annotation bietet nun folgende Erweiterungen:
- Es wird ein Logger Object bereit gestellt welches den zuvor erwähnten String als identifier benutzt
- Es werden automatisch indirekte Events herausgefiltert. d.h. Ist das Item “Bell_State” Teil einer Gruppe und wurde mit “OPEN” getriggert, wurde die execute Methode zweimal aufgerufen. Einmal für das Item und einmal für die Gruppe. Dieses zweite Event wird nun raus gefiltert
- Beim Loglevel DEBUG werden automatisch Laufzeit Informationen ausgegeben
- Im Falle eines Fehlers wird ein aussagekräftiger Stack Trace ausgegeben
- Im Falle von nicht existierenden Items wird die Rule geskipped. Ist beim Startup von openHAB wichtig
Methoden
Weiterhin bietet meine Klasse eine Vielzahl an nützlichen Hilfsmethoden. Sie orientieren sich von der Funktionsweise an openHAB 1.x und sollten mir die Migration zu Jython basierenden Regeln in openHAB 2.x erleichtern.
- getGroupMember - Gibt alle Items zurück welche Teil einer Gruppe sind
- getGroupMemberChangeTrigger - Registriert Trigger für alle Gruppenelemente
- getChannel - Gibt einen Channel zurück
- getItem - Gibt eine Item zurück
- getFilteredChildItems - Gibt alle Items zurück welche Teil einer Gruppe sind und einen bestimmte State haben
- getItemState - Gibt einen Item State zurück
- getHistoricItemEntry - Gibt einen älteren Item Entry zurück
- getHistoricItemState - Gibt einen älteren Item State zurück
- getMaxItemState - Gibt einen max Wert eines Item States zurück
- postUpdateIfChanged - Updatet einen Item State sofern er sich geändert hat
- postUpdate - Updatet einen Item State
- sendCommandIfChanged - Sendet ein Item Command sofern sich der State geändert hat
- sendCommand - Sendet ein Item Command
- getNow - Gibt das aktuelle DateTime zuück
- itemStateNewerThen - Checkt wann ein Item State geändert wurde
- itemStateOlderThen - Checkt wann ein Item State geändert wurde
- itemLastUpdateNewerThen - Checkt wann ein Item State geupdatet wurde
- itemLastUpdateOlderThen - Checkt wann ein Item State geupdatet wurde
- getItemLastUpdate - Liefet die letzte Update Zeit
- sendNotification - sendet eine Push Notification
- sendMail - sendet eine Mail
Quellen
Alle meine verwendeten Rules basieren auf dieser Jython Erweiterung. Sie kann direkt von meinem GitHub Repository bezogen werden.
Zusätzlich müssen noch die Klassen aus dem zuvor erwähnten Jython Projekt installiert werden. Am einfachsten geht es wenn man der Jython Installationsanleitung folgt und im Anschluss alles aus meinem Repository in seinen openHAB python Ordner kopiert
Burntime Script
Ein anderes Problem in openHAB war, das Rules gestartet wurden bevor openHAB komplett initialisert war. Um dieses Problem zu beheben habe ich das “burntime” Script geschrieben.
|
|
Es wird unter dem Namen “000_burntime.py” im openHAB Rule Ordner abgelegt und als erstes gestartet. Es läuft nun so lange bis der openHAB “automationManager” verfügbar ist und blockiert bis dahin die Ausführung aller weiteren Rules.
Dieses Script kann auch über mein GitHub Repository runtergeladen werden.
https://github.com/HolgerHees/openhab-config/blob/master/conf/automation/jsr223/000_burntime.py