openHAB – Einfache Scripte für das smarte Home

Da diese Webseite auch für mich eine Art Notizbuch ist und ich für folgende Dinge noch keine ausführlichen Anleitungsvideos erstellt habe, gibts die ganzen Sachen einfach einmal so in einem Beitrag.
Hier habe ich ein paar einfache Scripte für openHAB, um deine Geräte miteinander reden zu lassen und dein Zuhause damit smarter zu machen.
Dies soll Anfänger beim Einrichten helfen.

Natürlich kann man alles noch besser, umfangreicher und dynamischer gestalten.
Die Scripte sollten aber ihren Dienst tun, ohne groß darüber nachzudenken.
Ich habe hier die Scripte im Block-Editor abgelichtet, damit du sie für deine Verhältnisse ganz einfach nachbauen kannst.
Du brauchst also keine Programmierkenntnisse.


Waschmaschine / Trockner Status überwachen

Dieses Script ist relativ simpel. Ich möchte einfach nur anhand des aktuellen Verbrauchs, den Zustand des Gerätes ermitteln.
Hier möchte ich wissen, ob meine Waschmaschine bereits fertig ist, noch läuft oder gar aus ist.

Item für „if“ (Gerät) = Ein Zigbee-Stecker, welcher mit den aktuellen Verbrauch ausgibt
Item für „do“ (Statusanzeige) = Einfacher „Point“, welcher als „String“ erstellt wurde und dadurch die Eingabe von Texten erlaubt
Abfrage 1 (if) = Wenn der Verbrauch (in Watt) kleiner als 1 ist, ist das Gerät wohl aus. Also schick „Waschmaschine AUS“ an das Status-Item
Abfrage 2 (else if) = Wenn der Verbrauch (in Watt) kleiner als 10 ist, macht das Gerät nichts mehr. Die Maschine sollte also fertig sein und ich muss das Ding jetzt auch noch ausräumen (verdammt).
Abfrage 3 (else if) = Wenn der Verbrauch (in Watt) größer als 10 ist, sollte das Gerät noch laufen. Ich muss also nichts ausräumen (Zeit für ein Bier).

Das gleiche Spiel kann man auch z.B. für einen Trockner machen.
Wie viel dein Gerät im Status “fertig” oder “läuft noch” verbraucht, musst du selbst ermitteln. 10 Watt ist hier nur mal für das Beispiel angegeben, muss aber nicht stimmen.

Das Script wird einfach per „Rule“ alle 2 Minuten als ConeJob ausgeführt.

Bewegungsmelder

Das ist ein einfaches Bewegungsmelder-Script.
Sobald der Bewegungsmelder den Status “ON” schickt (Bewegung erkannt) und die Helligkeit in der erfassten Umgebung unter einem eingestellten LUX-Wert ist, soll die Lampe für 45 Sekunden eingeschaltet werden.
Ist es hell genug, soll die Lampe nicht eingeschaltet werden.

(if) = Lese den Status des Bewegungsmelders aus (Liefert den Wert “ON” oder “OFF”) und wenn dieser “ON” ist und gleichzeitig die Helligkeit unterhalb von “217” (Lux) ist
(do) = Schalte den Zigbee-Schalter ein, warte 45 Sekunden und schalte dann den Zigbee-Schalter wieder aus

(Hinweis: Der Lux-Wert muss von jedem selbst bestimmt werden. Er dient hier nur mal als Platzhalter.)

Das Script wird hierbei vom Zustand des Bewegungsmelders ausgelöst. Ändert dieser den Wert von “OFF” zu “ON”, wird das Script ausgeführt. Da ja nach der Helligkeit geachtet wird, wird die Lampe nur bei dunkelheit eingeschaltet, auch wenn der Bewegungsmelder am Tag eine Bewegung erkennt und der Auslöser damit aktiviert wird.

Lampe bei Dunkelheit einschalten

Ich besitze einen Bewegungsmelder, welcher die aktuelle Umgebungshelligkeit erfassen kann.
Diesen Wert möchte ich nutzen, um eine (oder mehrere) Lampen im Haus automatisch einschalten zu lassen, wenn es draußen langsam dämmert.
So bin ich nicht an eine fixe Uhrzeit gekoppelt und die Lampe geht damit nur an, wenn es wirklich dunkel ist.
Das spart am Ende des Monats vielleicht auch ein paar Euro Stromkosten. (nett)

(if) get state of item = Mein Bewegungsmelder, welcher ein Channel mit dem Lichtwert besitzt. Wenn dieser unter 15000 ist (durchaus schon etwas dunkler draußen), soll das “do” ausgeführt werden.
(do) send command = Schick den Command “ON” zu smarten Steckdose(n), um die Lampe(n) einzuschalten. (Wie du im Bild siehst, gehts mit Zigbee, als auch mit DECT-Dosen)

Das Script läuft bei mir als “Rule” und wird dort per CronJob alle 5 Minuten zwischen 17:00 Uhr und 21:00 Uhr aufgerufen. Davor ist es ja hell genug und nach 21 Uhr brauch ich es in der Regel nicht mehr, wenns da noch hell wäre.
Dreht man es herum, kann man die Lampen auch aussschalten lassen, wenn es hell genug ist.

Temperaturüberwachung

… oder Klimaanlage für arme.
Dieses Script überwacht die Raumtemperatur (hier meines kleinen Server-Racks).
Ist die Temperatur überhalb des Wertes von “RackLuefter_Zieltemperatur), soll ein Lüfter per Script eingeschaltet werden. Ansonsten soll er ausgeschaltet werden.
Die Temperatur wird mit Hilfe einer smarten Steckdose ausgelesen (Fritz DECT 200 Steckdose) und der Lüfter mit Hilfe eines Optokopplers über ein Raspberry Pi gesteuert.

(if) item 1 = Meine smarte Steckdose
(if) item 2 = Ein selbst erstelltes “Item”, welches ein “Number”-Wert erhalten kann. Diesen kann ich per einfachem Regler setzen.
(do) send command = Schick den Befehl “ON” an ein Script, was den Optokoppler des Pi’s steuert. (Ist ein kleines Bash-Script, was die GPIO-Pins steuert)
(else) send command = Schick den Befehl “ON” an ein Script, was die GPIO-Pins ansteuert, damit die Kühlung abgeschaltet wird.

Das Script wird auch via “Rule” alle 5 Minuten per CronJob ausgeführt. Ich könnte es noch zeitlich mehr einschränken wenn ich wollte, aber die Geräte im Rack können jederzeit warm werden.

Sollte die Steuerung noch etwas “smarter” sein und die Räumlichkeit etwas weiter abgekühlt werden, muss hier aktuell mit Variablen gearbeitet werden.
Das fertige Script sieht dann etwa so aus:

(if) item 1 = Meine smarte Steckdose
(if) item 2 = Ein selbst erstelltes “Item”, welches ein “Number”-Wert erhalten kann. Diesen kann ich per einfachem Regler setzen.
(do) send command = Schick den Befehl “ON” oder “OFF” an ein Script, was den Optokoppler des Pi’s steuert. (Ist ein kleines Bash-Script, was die GPIO-Pins steuert)
(else) set RackTemperaturVariable = Erstellt eine neue Variable, welche den aktuellen Wert des Items – hier die Temperatur – hat. => Ist aktuell notwendig, da man mit keinem Item “Mathe” machen kann.
(else) set RackTemperaturZielVariable = Erstellt eine neue Variable, welche den aktuellen Wert des Items – hier die Zieltemperatur – hat. => Ist aktuell notwendig, da man mit keinem Item “Mathe” machen kann.
(else) (if) = Ermittle erneut die Temperatur, nutze dazu aber die Variable und ziehe 2 ab. Ist die Variable kleiner als das errechnete, mach das “do”.
(else) (do) = Schick den Befehl ab, damit die Kühlung unterbrochen wird.

Geräte ausschalten, wenn bestimmtes Gerät offline / weg

Dieses Script soll mir beim Strom sparen helfen.
Denn wenn mein Zielgerät (PC oder Smartphone) offline ist bzw. weg ist, soll sich das NAS ausschalten.
Das Ding muss ja nicht dauerhaft laufen, wenn ich es nicht brauche.
Hierbei wird einfach geschaut, ob mit Hilfe eines Pings (Network-Binding > Ping) das Zielgerät erreichbar ist. MIt der “and”-Kette, müssen alle Geräte offline sein, damit das NAS ausgeschaltet wird.
Ist noch eins online, passiert nichts.
Damit das Script läuft, habe ich mir das Network-Binding installiert, welches die Anwesenheit von Geräten per Ping ermitteln kann.

(if) = Schau nach, ob der Status “OFF” des Ping-Channels meiner Wunschgeräte vorhanden ist. Durch die “and”-Verbindung, müssen alle Items den Status “OFF” besitzen
(do) = Schick zuerst den Befehl “ON” an das Item, welches mir mein OpenMediaVault ausschaltet, warte dann 30 Sekunden und schick dann den Befehl “ON” an das Item, welches dann mein Hauptsystem des NAS ausschaltet

(Hinweis: OpenMediaVault läuft bei mir in einer virtuellen Maschine. Diese soll zuerst sauber heruntergefahren werden, bevor das Hauptsystem aus geht, um Datenverlust zu vermeiden.)


Update 17.06.2022 – Weitere Scripte hinzugefügt.

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht.


CAPTCHA-Bild
Bild neu laden

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.