OpenHAB ist eine einfache aber starke Möglichkeit sein Haus zu automatisieren. Sobald man allerdings mehr als nur Software steuern will, so braucht man die Unterstützung des Raspberry Pi’s oder ähnlichem System. Oft sollen Stromkreise (wie Rollläden und Jalousien) per Software geöffnet oder geschlossen werden, daher wollen wir über OpenHAB Relais steuern.
Daher erstellen wir in diesem Tutorial die Oberfläche um mit OpenHAB Relais zu steuern und lassen diese gegebenenfalls auch nach einer bestimmten Zeit wieder abschalten.
Zubehör
Neben einem Raspberry Pi brauchst du noch bestimmte Relais, welche wir im Folgenden ansteuern werden. Es gibt unterschiedliche Modelle, die für unterschiedliche Einsatzmöglichkeiten gedacht sind:
- Normales Relais (verfübar als 2er, 4er, usw.)
- Einbau Schaltrelais
- spezielle Relais für Rollladenmotoren / Jalousien
Darüber hinaus benötigen wir noch Kabel (Jumper Kabel nur um zu Testen).
Vorbereitung und Verkabelung
Sofern du Geräte mit 230V Netzspannung schalten willst, möchte ich zunächst einen Hinweis geben:
Da Netzspannung lebensgefährlich sein kann, solltest du wissen was du tust! Falls du dir unsicher bist, lass dir von einem Fachmann helfen. Ich übernehme keine Haftung für Schäden! Sei bitte vorsichtig.
Fangen wir nun also an. Im ersten Schritt ist es wichtig zu wissen, ob die Relais sich mit 3.3V oder nur 5V schalten lassen. Dazu kannst du diesem Tutorial folgen, oder einfach das Relais anschließen: GND kommt an GND vom Raspberry Pi, VCC an 5V des Pi’s (Pin 2) und IN kommt an 3.3V (Pin 1). Das Lämpchen des Relais sollte ausgehen. Verbindest du IN mit GND vom Raspberry Pi, so sollte die LED vom Relais aufleuchten.
Hier der schematische Aufbau:
An das andere Ende des Relais kommt das angeschlossene Gerät (rechts oder links) und die Spannung bzw. Masseanschluss (Mitte). Für weitere Infos sieh dir dieses Tutorial an.
Für spezielle Arten von Relais (wie das für Rolladen und Jalousien Motoren) sind in deren Datenblättern noch weitere mögliche Schaltungen genannt (insbesondere wie die Motoren angeschlossen werden müssen):
Code zum Steuern des OpenHAB Relais
Zunächst einmal müssen wir das Exec Binding installieren. Dafür gehen wir unter http://openhabianpi:8080/paperui/index.html#/extensions unter Add-ons -> Bindings und suchen nach „Exec Binding“. Dies installieren wir.
Das GPIO Python Package ist nicht auf allen OpenHAB Images installiert, daher müssen wir dieses vorher ggf. noch nachinstallieren. Wechsle zur Konsole und gib folgendes ein:
sudo apt-get install python-rpi.gpio python3-rpi.gpio --yes
Wir erstellen als erstes das Python Skript:
sudo nano /etc/openhab2/scripts/relais.py
Es bekommt folgenden Inhalt:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
#!/usr/bin/env python3 # -*- coding: utf-8 -*- import RPi.GPIO as GPIO import sys,os GPIO.setwarnings(False) GPIO.setmode(GPIO.BCM) #os.system("sudo echo "+str(sys.argv)+" > /home/openhabian/test") if len(sys.argv) > 2: RELAIS_GPIO = int(sys.argv[1])# + int(sys.argv[2]) GPIO.setup(RELAIS_GPIO, GPIO.OUT) #GPIO.output(RELAIS_GPIO, GPIO.LOW) if sys.argv[2] == "ON": GPIO.output(RELAIS_GPIO, GPIO.LOW) elif sys.argv[2] == "OFF": GPIO.output(RELAIS_GPIO, GPIO.HIGH) # an |
Damit wir es benutzen können, müssen wir noch Rechte vergeben:
sudo chmod +x /etc/openhab2/scripts/relais.py
Weiter geht es mit den zu definierenden Things. Dies ist im Grunde genommen nur eines, welches wir anlegen:
sudo nano /etc/openhab2/things/relais.things
Folgende Zeile kommt hier hinein (dadurch wird das Skript mit entsprechendem Parameter aufgerufen:
Thing exec:command:relais1-control [ command="/etc/openhab2/scripts/relais.py 23 %2$s", interval=0, autorun=true ]
Gespeichert wird mit STRG+O und zurück zur Shell geht es mit STRG+X. Als nächstes ist das benötigte Item dran:
sudo nano /etc/openhab2/items/relais.items
Folgender Inhalt:
Group grp_relais "Relais Gruppe" <poweroutlet> String relais1Switch "Relais 1" <poweroutlet> (grp_relais) [ "Switchable" ] { channel="exec:command:relais1-control:input", autoupdate="true" }
Nach dem Speichern fehlt nur noch eine Sitemap, damit wir den Schalter des Relais auch setzen können. Du kannst natürlich auch eine existierende Sitemap erweitern.
sudo nano /etc/openhab2/sitemaps/relais.sitemap
1 2 3 4 5 6 |
sitemap relais label="Relais" { Frame label="Relais Gruppe" { Switch item=relais1Switch //mappings=[ "ON"="ON", "OFF"="OFF" ] } } |
Rufen wir nun http://openhabianpi:8080/basicui/app?sitemap=relais auf, so sehen wir einen Switch, mit dem wir das Relais schalten können:
Das war es bereits. Durch drücken des Buttons kannst du nun dein Relais an- bzw. ausschalten.
Automatische Abschaltung
Bei manchen Projekten, wie bspw. Rollläden macht es Sinn, dass sich die mit OpenHAB verbundenen Relais nach kurzer Zeit automatisch abschalten. Beispielsweise dauert das Rollladen hoch- / runterfahren maximal 10 Sekunden – danach muss der Motor nicht mehr angeschaltet sein. Daher stellen wir nun noch einen zusätzlichen Abschaltmechanismus ein. Dazu benötigen wir OpenHAB 2 Rules.
Wir erstellen dazu eine neue Datei mit unserer Regel:
sudo nano /etc/openhab2/rules/relais_auto_off.rules
1 2 3 4 5 6 7 8 9 10 11 12 13 14 |
var timeout = 5 // sec rule "Relais 1" when Item relais1Switch received update then if (relais1Switch.state == "ON") createTimer(now.plusSeconds(timeout)) [| relais1Switch.postUpdate("OFF") executeCommandLine("/etc/openhab2/scripts/relais.py 23 OFF") ] end |
Speichere die Datei mit Strg+O. Kehre anschließend zur Kommandozeile zurück (Strg+X).
Teste das ganze, indem du das Relais per Oberfläche anschaltest. Nach wenigen Sekunden sollte es sich automatisch ausschalten.
Bedenke, dass bei Rollläden üblicherweise zwei Motoren (zum runter- und hochfahren) vorhanden sind, daher werden auch zwei Relais benötigt oder eben ein spezielles Relais.
Damit der Status der Relais auch bei einem Neustart gespeichert bzw. erneut gesetzt wird, kannst du das Persistance Add-on sowie Regeln (für nach dem Neustart) nutzen.
37 Kommentare
Hallo Felix,
vielen Dank für den Artikel.
Wir führen grade eine Kernsanierung in einem alten Haus durch und verlegen dementsprechend auch die komplette Elektrik neu. Ich möchte das Licht im Haus mit den Relais uns dem Raspberry Pi steuern. Allerdings möchte ich dennoch das Licht konventionell mit einem Lichtschalter ein- bzw. ausschalten können. Ist dies generell möglich und wie weiß der Raspberry Pi, dass der Lichtschalter betätig wurde?
Bringt dir sowas wie ein Wechselschalter etwas?
Vielen Dank für die Antwort. Leider nein, da ich soweit ich weiß keine Möglichkeit habe ebenfalls per Raspberry Pi das Licht zu steuern. Ich glaube aber die Lösung des Problems liegt in der Verwendung von Tastern, die das Relais steuern. Die Relais wiederum können dann wie von dir beschrieben mit dem Raspberry Pi gesteuert werden. Bin mir über den genauen Aufbau aber noch nicht im klaren und plane noch. Eventuell muss ich mir mal einen Testaufbau erstellen und probieren.
Hallo Michael,
ich habe zwar openHab noch nicht im Einsatz, steuere aber einige Leuchten per „ElTako“ (Stromstoßschalter.). Diese benötigen offline (im Raum) einen Taster, parallel dazu kann ich über ein Python-Script einen kurzen Impuls auf das Relais schalten.
Unschön dabei ist, dass Du nicht siehst ob das Relais eingeschaltet oder ausgeschaltet ist. Dazu habe ich dann Koppelrelais installiert. Diese schalten bei Stromfluss einen Kontakt den ich wiederum mit dem pi einlese.
Bisschen viel Aufwand, tut’s aber.
In Zukunft werde ich mich mal mit openHab beschäftigen, mal sehen ob’s schöner geht.
Hallo Stefan,
vielen Dank für die Info. Ich fürchte auf soetwas läuft es hinaus. Dann kann ich erstmal alles Lichter über Relais einplanen und im nachhinein dann mit des Raspberry Pi experimentieren.
Und nochmal ich: Stefan wie hast du denn die normalen EITAKO-Relais an den Raspberry angeschlossen. Irgendwie will mir das nicht einleuchten, da diese ja anders sind als die vorinstallierten auf den Boards.
Hallo Michael,
mich hat vor ein paar Jahren diese Frage auch beschäftigt. Ich habe vom Elektriker einfach eins machen lassen. Zu den Schaltern der Brennstellen, die zusätzlich vom Raspberry zu steuern sind, habe ich vom Sicherungskasten ein zusätzlich Kabel ziehen lassen, da am Schalterausgang (also z. B. die Phase zu einer Lampe) angeschlossen ist. Dieses Kabel kann man dann über ein vom Raspberry geschaltetes Relais mit „Plus“ schalten und somit den Schalter „überbrücken“.
Hier muß man nur darauf achten, dass die zusätzlichen Kabel homogen zur übrigen Verkabelung sind (Sicherungskreise und FI-Kreise).
Für Rolläden geht man wie folgt vor. Zu dem Rolladenschalter verlegt man vom Rolladenkasten ein 5-adriges Kabel. Wir lassen mal Erde und Null bei dieser Betrachtung aussen vor.
Der Rolladenschalter hat einen Eingang (Phase i. d. braun) und 2 Ausgänge ( hoch und runter zur Rollade, z. B. schwarz und grau). Dabei schliesst man an den Ausgängen des Rolladenschalters jeweils 2 Kabel an. Am Ausgang „Rollade hoch“, das Kabel zum Rolladenmotor und schwarz des 5-adrigen Kabels, das vom Sicherungskasten kommt. Analog der Ausgang „Rollade runter; ein Kabel zum Rolladen-Motor und das graue des 5-adrigen Kabels, was vom Sicherungskasten kommt.
Nun kannst Du „braun“ an die Sicherung anschliessen und die Rollade normal über den Schalter bedienen oder Du trennst braun von der Sicherung und schließt entweder das schwarze oder graue Kabel im Sicherungskasten an die Phase der Sicherung und die Rollade fährt auf oder ab.
Diese Schaltung läßt mit 2 Wechselrelais -siehe oben in den Ausführungen von Felix- leicht realisieren. Ich schalte in meinem Haus damit 9 Rollädenmotoren und habe darüber auch die „Zeitsteuerung“ realsiert, so dass ich einfache Schalter im Wohnraum montiert habe und auf „Zeitrelais“ -die ja alle einzeln zu programmieren wären, verzichtet habe.
Hallo,
ich habe mit dem Tutorial ein 8er 5v Relais am Pi verbunden und Teste nur mit einem angeschlossenen Relais. Es leuchtet dauerhaft.
Wenn ich auf der erstellten Seite in openHab den Schalter „Relais 1“ aktiviere, tut sich nichts. Sollte ist nicht klacken?
Das o.g. Tutorial basiert auf dem GPIO 23 also auf Pin 16 gesteckt wie auf dem Foto oben, ja?
Hallo, habe das selbe Problem wie Thorsten, nach eingabae aller skripts leuchtet die LED des Relais dauerhaft, allerdings erst nach 5 sec. also nach dem Programmierten Timeout. Ich habe einen kleinen Testaufbau mit meinem Experimentierboard gebaut, auch hier leuchtet die LED erst nach betätigen des Schalters nach 5sec.
#Thorsten: ja ist pin 16 GPIO 23
Frage in die Runde: Ich habe mir bei Amazon auch diese 4fach Relais Karte geklickt, 3 Stück. Jetzt habe ich schon mit dem zweiten Rolladen-Motor immer wieder das Phänomen, dass die Relais „kleben“ bleiben: Obwehl es noch klickt und die LED den gewünschten Schaltzustand richtig ausweist, bleibt der Kontakt zum Motor weiter geschlossen. Das führt dazu, dass sich der Rolladen eben nicht mehr bewegt, bzw. nur noch ruckelt, weil ja ein Relais (das kaputte, „verklebte“) immer an ist und der Motor nicht mehr laufen kann. Ich habe eine wirklich kleine Jalousie und der Motor ist mit unter 1A Stromaufnahme angegeben. Die Relais sind laut Aufdruck bis 10A ausgelegt.
Kennt das jemand oder kann mir jemand einen Grund dafür nennen?
Motore, besonders wenn sie unter Last (Rolladengewicht) anlaufen müssen, haben einen sehr viel grösseren Anlaufstrom, der den Kontakt solch kleiner Relais verkleben kann und wohl auch hat.
Auch das Ausschalten von Motoren ist nicht kontaktfreundlich, da die Motorinduktivität einen Ausschaltfunken erzeugt und dieser am Kontaktmaterial ’nagt‘.
Die 10A des Relaisaufdrucks beziehen sich auf ohm’sche Last, also ohne kapazitive oder induktive Komponenten. Das ist bei Motoren nicht der Fall.
Kleiner Hinweis an diejenigen, die irgendwo Relais zwischen schalten. Wie Jago schon sagte steht auf seinen Relais „10 A“ drauf. Ich vermute mal, sein Sicherungskasten ist konventionell aufgebaut, also mit 16 A Sicherungen. Auch wenn der Rollo-Motor hier nur 1 A benötigt, möchte man an anderer Stelle vielleicht eine Steckdose schalten, deren Verbraucher noch nicht feststeht oder gibt es einen Kurzschluss am Verbraucher, brennt im günstigsten Fall das Relais durch, bevor die Sicherung auslöst, im ungünstigsten Fall das ganze Haus.
Ich habe zu Hause auch mit Relais für jeden einzelnen Verbraucher gearbeitet. Da ich aber keine Relaisboards mit höherwertigeren Relais gefunden habe, habe ich kurzer Hand mein eigenes Board designed und zu einem guten Preis professionel fertigen lassen. Das ganze hatte für mich folgende Vorteile:
– Anzahl der Relais auf meine Bedürfnisse angepasst
– Relais vertragen 16 A
– Auf dem Board sind direkt auch Optokoppler verbaut, die die Taster einlesen
– Für Rollos sind die Relais so angeordnet, dass immer nur Phase 1 oder Phase 2 geschaltet sein kann und niemals beide gleichzeitig (sonst geht der Motor auf Dauer kaputt).
– Kommunikation mit den GPIOs des Raspberry Pi erfolgt über eine Flachbandleitung
Hallo Alexander,
da ich auch auf der Suche nach einer Alternative zu den minderwertigen Relayboards aus China bin, aber bisher nichts passendes gefunden habe, wollte ich fragen ob du mir eventuell ein paar Tips zu den Komponenten ( welche ralais, optokoppler etc.) geben könntest.
Gruss Stefan
Hi Alex,
hättest Du eine Komponentenliste bzw die Schaltung für mich parat.
Ich würde mir gerne die Relais auch fertigen lassen.
Grüsse
Thomas
@Jago
Wenn Du die Relaisboards (mit blauen Relais) verwendet hast, die man zu Hauf im Internet für nur wenige EUR findet, dann kommen die mit großer Wahrscheinlichkeit aus China und sind von minderer Qualität. Wenn ich mich richtig erinnere gibt es genügend schlechte Bewertungen über Boards, die bereits bei der Anlieferung defekt waren.
Hallo,
erstmal vielen Dank für den super Artikel.
Hat mich in meinem Vorhaben um Jahre weiter gebracht.
Ertsmal folgende Kerninfos:
– Raspberry Pi3 Model B+ mit Openhabian Installation
– 16 Port Relay analog zum verlinkten Artikel
https://www.amazon.de/gp/product/B005WR747I?ie=UTF8&linkCode=as2&camp=1634&creative=6738&tag=754-21&creativeASIN=B005WR747I
– Openhab 2
Leider habe ich nun folgendes Problem und stehe vermutlich nur etwas auf dem Schlauch.
Ich kann wie im Artikel die Relais über Openhub Einschalten.
Ab diesem Zeitpunkt geht es dann aber nicht mehr weiter.
Auf dem PIN liegt anschließend dauerhaft Spannung an und das Relai lässt sich nicht mehr abschalten.
Ich habe schon in etlichen Foren nachgelesen woran das liegen könnte, dort wurde aber immer von einer dauerhaften anliegenden Spannung direkt nach Systemstart gesprochen und nicht wie bei mir erst nach der ersten Aktivierung.
Nach einem Reboot liegt anschließend keine Spannung mehr am GPIO Pin an.
Um einen defekten Port auszuschließen, habe ich jeden dafür in frage kommenden PIN getestet.
Ohne Erfolg!
Villeicht ist so ein Fall bereits bekannt oder es gibt Vorschläge die mich der Problemlösung etwas näher bringen.
Über jegliche Hilfe würde ich mich freuen.
Gruß
Basti
Ich habe leider das selbe Problem wie von Basti bereits ausführlich beschrieben. Einmal eingeschaltet lässt sich das Relais nicht mehr ausschalten. Ich wäre für Tipps / Hilfe sehr dankbar.
Gruß
Andreas
Das Problem ist folgendes, wenn der GPIO PIN als Output definiert ist, liegt an dem Port Spannung an. Diese reicht anscheinend schon aus, dass das Relai geschaltet wird.
Wird der GPIO PIN nun als INPUT definiert, geht das Relai wieder in den vorherigen Zustand.
Anscheinend liegt hier bereits ab der ersten Aktion genug Spannung an, egal ob der Port auf LOW oder HIGH steht.
Ob das Problem jetzt am Board oder am Raspy liegt kann ich nicht beurteilen.
An dem Thema bleibe ich aber dran.
Falls hier jemand bereits die Erklärung / Lösung hat, bitte melden 😉
Hallo
ich bin auf des Suche nach jemanden der für mich ein Projekt programmiert.
ist eigentlich ganz einfach 2x 240v schalten unabhängig von einander
zu einem zufälligen Zeitpunkt, zwischen 06-00 und 18-00, von einer zufälligen Länge zwischen 10 und sek.
Bitte melden
Hallo zusammen,
auch ich habe den Zustand das der Ausgang dauerhaft bleibt
!wenn er automatisch zurück geschaltet wurde!
2 mal von Hand umschalten behebt diese Problem.
was muss ich tun damit ich nach automatischen Schalten einfach wieder von Hand ansteuern kann?
Mit ein paar kleinen Änderungen funktioniert die Schaltung bei mir super:
1. Falsche Verkabelung für VCC. Nicht mit PIN2 (5V), sondern mit PIN 1 (3.3V), weil der GPIO 3.3V ausgibt und damit das Relais ausschalten soll muss die Steuerleitung=VCC sein.
2. Skript für auto off /etc/openhab2/rules/relais_auto_off.rules:
var timeout = 5 // sec
var Timer offTimer
rule „Relais 1 auto off“
when
Item relais1Switch received update
then
if (relais1Switch.state == „ON“)
offTimer = createTimer(now.plusSeconds(timeout)) [|
relais1Switch.sendCommand(„OFF“)
]
else
offTimer.cancel()
end
Danke für das sonst sehr gute Tutorial.
Hallo, ich bekomme leider immer folgenden Fehler, wenn ich das Relais schlten möchte:
WARN ] [hab.binding.exec.handler.ExecHandler] – Couldn’t transform response because transformationService of type ‚REGEX‘ is unavailable
Kann mir jemand helfen?
Gruß, Stefan
Hallo Waldemar,
dein Beispiel hat mir sehr geholfen ich musste nur ein paar Anführungszeichen anpassen und jetzt funktioniert es zuverlässig.
var Timer offTimer
rule „Relais1“
when
Item relais1Switch received update
then
if (relais1Switch.state == „ON“)
offTimer = createTimer(now.plusSeconds(5)) [|
relais1Switch.sendCommand(„OFF“)
]
else
offTimer.cancel()
end
Als Ergänzung die Anführungszeichen vor den Wörtern Relais, ON und OFF die unten sind müssen ebenfalls hochgestellt sein.
Ich hab dieses Tut jetzt mehre male durch probiert. klappt auch alles soweit bis auf die Rules. Wenn ich das aus dem Tut verwende geht das Relais 1x an und aus. Lasse ich die Rules weg kann ich ganz normal an/aus (aber dann halt ohne Timer).
Mein Ziel ist es auch 2 Relais zu steuern (Garagentor (K1) 1sek.) und danach soll das Garagenlicht (K2) für 3 min. leuchten.
Sobald ich an GPIO 24 steuern will ( Thing exec:command:relais2-control [ command=“/etc/openhab2/scripts/relais.py 24 %2$s“, interval=0, autorun=true ) klappt das ganze Tutorial nicht mehr.
ohne rule hat alles funktioniert und mit der rule wie bei einigen oben beschrieben.
Ich habe die Rule angepasst und nun funktioniert alles bestens.
var timeout = 5 // sec
rule „Relais 1″
when
Item relais1Switch changed to ON
then
createTimer(now.plusSeconds(timeout)) [|
sendCommand(relais1Switch ,“OFF“)
]
end
Ich habe da mal eine frage da ich jetzt Sommerferien habe wollte ich das Projekt „Zimmer Automatisierung“ mal angehen aber wo legst du fest auf welchem Pin das Relai angeschloßen ist??
Hoffe mir kann jemand Helfen.
Lg Kilian
Alles klar hat sich erledigt
Ich kann aktuell nicht auf die OpenHAB Extension zugreifen:
http://openhabianpi:8080/paperui/index.html#/extensions
http://openhabianpi.com:8080/paperui/index.html#/extensions
http://openhabianpi.de:8080/paperui/index.html#/extensions
Laufen ins Leere … 🙁
Habe das selbe Problem wie einige hier, kann mein Relais nicht ansteuern.
Jeder Schritt wurde per copy ans Paste übernommen, bei mir wird leider nichts angesteuert.
hoffe jemand hat hierfür eine Idee.
Hallo Habe das gleiche Problem!
Alles richtig eigegeben, mit dem Befeht „/etc/openhab2/scripts/relais.py 23 OFF oder ON“ kann ich das Relais im SSH schalten. das Python ap wird aber anscheinend nicht von OpenHAB aus gestartet!
Bitte um Hilfe
Lesen sollte man können!
Hab vergessen eine misc/exec.whitelist zu erstellen jetzt funktioniert es natürlich!!!
Hallo Enzo
Hast du dafür ein Beispiel?
Vielen Dank
Hallo Enzo, kannst Du uns bitte hier ein Bespiel geben.
Danke
Hallo,
kann mir einer bitte sagen was „%2$s“ machen soll?
Ich arbeite ohne Rule.
Gebe ich an dieser Stelle „ON“ ein, schaltet das Relais. Lasse ich dagegen „%2$s“ stehen, schaltet es nicht. Gebe ich jedoch „ON“ ein, schaltet es nicht mehr zurück oder geht gar nicht erst an.
Hallo,
kann mir jemand sagen was „%2$s“ bedeutet? Wenn ich das eingebe tut sich nichts. Gebe ich „ON“ ein funktioniert es.
Gruß
Thomas
Hallo
Dieses Variante schaltet das Relais nicht über einen GPIO-Port, wie es das einfach Script in der Relaisanleitung macht. Wie müsste es aussehen wenn ich auch hier einen GPIO-Port zum Schalten verwenden möchte? Ich habe eine 8-Relaiskarte und möchte alle nutzen.
Danke
Heiko