In der Beitragsreihe habe ich zuletzt die Anschlüsse der Hardwareschalter konfiguriert. Bisher fehlt aber die Verbindung zu den Relais und zudem fehlt jegliche Logik dahinter.
In einem ersten Versuch soll nur über den ersten Schaltkontakt ein Relais aktiviert/deaktiviert werden. Die dzu notwendige Konfiguration in der yaml-Datei findet man wieder in der ESPHome-Dokumentation im Abschnitt „Binary_Sensor„:

Das Schließen eines Schalters (on_press) und das Öffnen der Schalters (on_release) wird über ein „then“ mit der gewünschten Aktion (switch_turn_on/off) am gewünschten Aktor (relay_1) verbunden. Übrigens gibt es auch ein on_click, mit einer etwas anderen Funktionsweise. Durch irrtümliche Verwendung dieser Funktion und der damit verbundenen Probleme hatte ich dann dass Entprellen auf 100ms sowohl für das Öffnen als auch das Schließen des Schalters geändert und dauerhaft so belassen.
# GPIOs als Eingang eines Hardwareschalters
binary_sensor:
- platform: gpio
pin:
number: GPIO27
inverted: true
mode:
input: true
pullup: true
name: "Fen_Up"
filters:
- delayed_off: 100ms
- delayed_on: 100ms
on_press:
then:
- switch.turn_on: relay1
on_release:
then:
- switch.turn_off: relay1
Brückt man nun GND gegen GPIO27 wird das Relais1 aktiviert und nach Öffnen der Brücke wieder deaktiviert. Eingangs hatte ich erwähnt, dass ich eine m.E. sichere Logik für das Schalten der Relais verwenden will. Dem ist im Folgenden Rechnung getragen.
Je zwei Relais betreiben einen Rolladenmotor. Dabei sorgt das eine Relais für die Richtungsauswahl und das andere für die Stromzufuhr. Damit wird größtenteils sichergestellt, dass ein Motor niemals mit Signalen auf beiden Richtungen versorgt wird. Die resultierende Befehlsfolge soll so aussehen:
# 1. Stromzufuhr powrel off
# 2. Richtung dirrel on/off
# 3. Sicherheitsdelay 100ms für definierten Schaltzustand des DirRelais
# 4. Stromzufuhr powrel on
# 5. Timer
# 6. Stromzufuhr powrel off
# 7. Richtung dirrel off
# nach dem Schaltvorgang sollen alle Relais stromlos sein
Hier sind auch gleich die neuen Bezeichnungen der Relais genutzt worden. Der neue Name setzt sich zusammen aus Ziel (Fenster/Tür), Funktion (Power/Direction) und Typ mit Relaisnummer (Relais).
Ein fendirrel ist demnach das richtungsschaltende Relais für den Fenstermotor mit den Anschlüssen up und down.
Das fenpowrel ist dagegen das stromschaltende Relais für den Fenstermotor mit den Anschlüssen on und off.
Es war noch zu klären, wieviele Sekunden denn eine Fahrt der Rollade benötigt, denn dann sollen die Relais wieder deaktiviert werden. Für die Hochfahren der Fensterrollade sieht die komplette Schaltlogik so aus:
on_press:
then:
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
- delay: 100ms
- switch.turn_on: fenpowrel1
- delay: 15s
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
on_release:
then:
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
Um sicherzustellen, dass das Richtungsrelais seine Schaltung erledigt hat, habe ich vor der Schaltung des Stromrelais noch ein kurzes Delay eingefügt. Der Test unter Strom mit Messung des Durchgangs bestätigte die gewünschte Verhaltensweise. Übrigens kann man an der Oberseite der Relaisplatine anhand von vier roten LEDs auch den Schaltzustand der Relais erkennen.
Den angepassten Konfigurationcode für die Relais und die Schalter habe ich noch mit vielen Kommentaren versehen, um auch später einmal die Zusammenhänge zu verstehen. Ich hoffe, dass mir das auch schon für meine Leser in dem Beitrag gelungen ist.
# 4 relay outputs, exposed as switches in Home Assistant
# NO -> im Ruhezustand open, connect to Motor down bei DirRelay
# NC -> im Ruhezustand closed, connect to Motor up bei DirRelay
# COM DirRelay connect to NO PowRelay
switch:
- platform: gpio
pin: GPIO32
name: FenPowRel1
id: fenpowrel1
- platform: gpio
pin: GPIO33
name: FenDirRel2
id: fendirrel2
- platform: gpio
pin: GPIO25
name: TuePowRel3
id: tuepowrel3
- platform: gpio
pin: GPIO26
name: TueDirRel4
id: tuedirrel4
# GPIOs als Eingang eines Hardwareschalters
binary_sensor:
# Fenster fährt 15sec
# Tür fahrt 25sec
# 1. Stromzufuhr powrel off
# 2. Richtung dirrel on/off
# 3. Sicherheitsdelay 100ms für definierten Schaltzustand des DirRelais
# 4. Stromzufuhr powrel on
# 5. Timer
# 6. Stromzufuhr powrel off
# 7. Richtung dirrel off
# nach dem Schaltvorgang sollen alle Relais stromlos sein
# GPIO27 -> Fenster up
- platform: gpio
pin:
number: GPIO27
inverted: true
mode:
input: true
pullup: true
name: "Fen_Up"
filters:
- delayed_off: 100ms
- delayed_on: 100ms
on_press:
then:
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
- delay: 100ms
- switch.turn_on: fenpowrel1
- delay: 15s
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
on_release:
then:
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
# GPIO14 -> Fenster down
- platform: gpio
pin:
number: GPIO14
inverted: true
mode:
input: true
pullup: true
name: "Fen_Dn"
filters:
- delayed_off: 100ms
- delayed_on: 100ms
on_press:
then:
- switch.turn_off: fenpowrel1
- switch.turn_on: fendirrel2
- delay: 100ms
- switch.turn_on: fenpowrel1
- delay: 15s
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
on_release:
then:
- switch.turn_off: fenpowrel1
- switch.turn_off: fendirrel2
# GPIO13 -> Tür up
- platform: gpio
pin:
number: GPIO13
inverted: true
mode:
input: true
pullup: true
name: "Tuer_Up"
filters:
- delayed_off: 100ms
- delayed_on: 100ms
on_press:
then:
- switch.turn_off: tuepowrel3
- switch.turn_off: tuedirrel4
- delay: 100ms
- switch.turn_on: tuepowrel3
- delay: 25s
- switch.turn_off: tuepowrel3
- switch.turn_off: tuedirrel4
on_release:
then:
- switch.turn_off: tuepowrel3
- switch.turn_off: tuedirrel4
# GPIO12 -> Tür down
- platform: gpio
pin:
number: GPIO12
inverted: true
mode:
input: true
pullup: true
name: "Tuer_Dn"
filters:
- delayed_off: 100ms
- delayed_on: 100ms
on_press:
then:
- switch.turn_off: tuepowrel3
- switch.turn_on: tuedirrel4
- delay: 100ms
- switch.turn_on: tuepowrel3
- delay: 25s
- switch.turn_off: tuepowrel3
- switch.turn_off: tuedirrel4
on_release:
then:
- switch.turn_off: tuepowrel3
- switch.turn_off: tuedirrel4
Die 4-fach-Relaisplatine ist hiermit installierbar und würde die vollständige Bedienung der elektrischen Rolladenantriebe über Hardwareschalter erlauben. Das ist für ein SmartHome natürlich nicht ausreichend, denn hier soll ja auch alles zentral steuerbar werden. Die Relais wären jetzt zwar schon einzeln über die Home Assistant-Oberfläche steuerbar, aber ohne jegliche Logik, wie wir sie zuletzt für die Schalter eingerichtet haben. Deshalb geht es in dieser Beitragsreihe mit der Konfiguration der Home Assistant-Oberfläche weiter.