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.

Doch was wenn ich die Lampe jetzt AUS haben will und das Script sie gleich wieder einschaltet?
Du hast eventuell ein Script, welches die Lampen zu einem bestimmten Zeitpunkt wieder ausschaltet.
Nutze dies, um die Regel zum automatischen einschalten der Lampe zu aktivieren.
Lege dann noch eine Regel an, welche das Script zum automatischen einschalten der Lampe deaktiviert.
Schaltest du die Lampe von Hand aus, wenn im Hintergrund das Script noch Arbeiten könnte, deaktivierst du zusätzlich die Regel. Dadurch läuft das Script nicht.
Durch die Regel des automatischen abschaltens, was ja weiterhin noch aktiv ist, wird die Regel des Einschaltvorgangs wieder aktiviert. Die Lampe sollte aber dann ja aus bleiben, weil die Regel des Einschaltvorgangs nicht mehr im Zeitfenster sich befindet.
Sieht dann etwa so aus:

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.)

Fahre den Rolladen nach unten, wenn es draußen heiß ist

Dies ist ein einfaches Script, um einen Rollo automatisch nach unten fahren zu lassen, wenn es draußen heiß ist und man die Raumtemperatur etwas unter kontrolle haben will.
Die notwendigen Informationen können von unterschiedlichen Quellen kommen.
Wir brauchen natürlich die Info, wie warm es gerade drinnen ist, ob es tatsächlich Tag ist – weil Nachts das ja wenig nützt und ob es gerade nicht stürmt.
Denn wenn es draußen stark winden sollte, sollten wir den Rolladen nicht runter fahren, bevor er kaputt geht oder ihn automatisch hoch fahren lassen, damit wir ihn schützen können.
Für die Helligkeit bzw. Tag/Nacht-Info und Windstärken können Wetterdienste auch genutzt werden. Wer eine Wetterstation zuhause hat, kann auch die nutzen.

Variablen können hier eingesetzt werden, um die Daten damit zu befüllen.
(if) 1 = Wenn die Temperatur größer als ein Schwellwert ist UND die Helligkeit größer als ein Schwellwert UND die Windstärke kleiner als ein Schwellwert
(do) 1 = Fahre den Rollo 90% ruter => Angabe muss ggf. je nach Aktor anders sein!
(if) 2 = Wenn Windstärke größer als Schwellwert
(do) 2 = Fahre den Rollo auf 0% – also hoch – und gebe im Log ein Hinweis aus, damit der Rollo geschützt werden muss => Angabe muss ggf. je nach Aktor anders sein!

Wer möchte kann das Script auch noch erweitern, damit am Abend z.B. der Rollo auch wieder hochgefahren wird.


Update 17.06.2022 – Weitere Scripte hinzugefügt.
Update 17.08.2022 – Hinweis zum Aktivieren und Deaktivieren von Regeln hinzugefügt, um eine Automatik kurzzeitig zu unterbinden.
Update 29.01.2023 – Weiteres Script hinzugefügt.

2 Kommentare

  1. Vielen Dank für Ihre ausführlichen und leicht nachvollziehbaren Tutorials um alles rund um die Rasperry Pi.

    Wäre es möglich in Erfahrung zu bringen, welches Zigbee Gerät Sie zur Auslese der Strom-Messungen verwenden? Auf Amazon gibt es zwar diverse Steckdosen-Adapter, aber ich würde gerne direkt Modelle kaufen, die auch mit Ihrer Methode funktionieren.

Schreibe einen Kommentar

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

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