wall < "Deckenlicht im Badezimmer"

Broadcast message from spillerm@unixe.de (pts/1) (Di Sep 29 09:42:31 2015):
4
Diesen Beitrag schrieb ich vor 3 Jahren. Behalte das beim Lesen bitte im Hinterkopf.

Weitere Beiträge der Artikelserie »Heimautomatisierung mit OpenHAB« findest du an dieser Stelle.

Deckenlicht im neuen BadezimmerUnsere Badezimmerrenovierung nähert sich dem Ende, die Fertigstellung ist zum Greifen nahe. So langsam ist es daher an der Zeit, die Beleuchtungssteuerung in Angriff zu nehmen! Hier kommt der HM-LC-Sw4-DR zum Einsatz: ein 4-fach Funk-Schaltaktor, der per Hutschienenmontage seinen Platz direkt im Sicherungskasten findet. Die Deckenbeleuchtung (LED, nicht dimmbar) ist an Channel 1 angeschlossen: ist LEQ0900581:1 also auf ON, so brennt das Licht, ist es auf OFF, so ist das Licht aus. Analog hierzu lässt sich in OpenHAB ein Switch definieren, der genau das widerspiegelt: alle weiteren Schalter, die eingesetzt werden sollen, werden dann diesen Switch manipulieren, so dass zu jeder Zeit ein konsistenter Zustand herrscht.

Switch  Badezimmer_1_Deckenlicht    "Deckenlicht"    (Badezimmer_1, Lampen)    { homematic="address=LEQ0900581, channel=1, parameter=STATE" }

Deckenlicht per App

Deckenbeleuchtung im neuen Badezimmer per App schaltenIn meinem Setup ist der Switch Badezimmer_1_Deckenlicht der Gruppe Badezimmer_1 angegliedert und somit auch in der OpenHAB-App angezeigt: übers Smartphone kann ich das Licht nun schon ein- und ausschalten. Das allein ist jedoch natürlich nicht praktikabel, schon gar nicht für Besucher ;-)

Deckenlicht per Wandschalter

Es wird auch ein üblicher Wandschalter benötigt (unsere sind von Merten), und ihn habe ich über HM-SwI-3-FM, eine 3-fach Funk-Schalterschnittstelle, ins Spiel gebracht: er hängt an Channel 1. Im Webinterface der CCU2 können wir nun also den Button betätigen (Status und Bedienung → Geräte → HM-SwI-3-FM → Button anklicken) und in der DEBUG-Ausgabe von OpenHAB beobachten, wie er sich meldet:

Received new (Boolean) value 'true' for DatapointConfig[address=LEQ1097103,channel=1,parameter=PRESS]

Wird hingegen der physikalische Schalter betätigt, verwirrt er damit, dass er kein PRESS-Event liefert, sondern lediglich ein INSTALL_TEST; alle weiteren Aktionen in OpenHAB müssen hiervon abhängig gemacht werden!

Received new (Boolean) value 'true' for DatapointConfig[address=LEQ1097103,channel=1,parameter=INSTALL_TEST]

Und in meinem Setup sieht das dann so aus:

Switch  Badezimmer_1_3fach_1    "Aussenschalter: Deckenlicht"    { homematic="address=LEQ1097103, channel=1, parameter=INSTALL_TEST" }

Das Verwirrende an dieser Schalterschnittstelle ist im ersten Moment, dass sie beim Betätigen nicht klassisch ON beziehungsweise OFF sendet; sie weiss nicht, was eigentlich an ihr angeschlossen ist und welchen Status das angeschlossene Gerät gerade innehat. Stattdessen wird mit jedem Betätigen ein true für INSTALL_TEST gesendet. Da Badezimmer_1_3fach_1 als Switch in OpenHAB hinterlegt wird, wird das übergebene true zu einem ON konvertiert — keep in mind, den Zustand OFF wird er nie annehmen! In meinem Setup gehört der Aussenschalter keiner OpenHAB-Gruppe an und wird in der App nicht angezeigt.

Was also soll nun passieren, wenn der Schalter betätigt wird? Eigentlich ganz einfach: ist das Licht aus, soll es angeschaltet werden — und umgekehrt. Und da die Schaltung wiederum auf Badezimmer_1_Deckenlicht erfolgt, müssen wir nichts weiter tun, um den Zustand konsistent zu halten — auch, wenn das Licht über den Aussenschalter eingeschaltet wird, wird es in der App korrekt angezeigt und kann beispielsweise hierüber ausgeschaltet werden. Mein Regelwerk habe ich in Badezimmer_1_Deckenlicht.rulesGITHUB festgehalten.

//---------------------------------------------------------
rule "Aussenschalter Deckenlicht Badezimmer_1"
when
	Item Badezimmer_1_3fach_1 received update ON
then
	logInfo("Badezimmer_1", "Status Deckenlicht ist {}", Badezimmer_1_Deckenlicht.state)
	if(Badezimmer_1_Deckenlicht.state==ON) {
		Badezimmer_1_Deckenlicht.sendCommand(OFF)
	} else {
		Badezimmer_1_Deckenlicht.sendCommand(ON)
	}
	logInfo("Badezimmer_1", "Aussenschalter schaltet Deckenlicht {}", Badezimmer_1_Deckenlicht.state)
end

In der DEBUG-Ausgabe lässt sich die Abarbeitung des Regelwerks gut nachvollziehen — erst für das Anschalten des Lichts, anschliessend wird der Schalter erneut betätigt um es wieder auszuschalten:

19:45:21.344 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'true' for DatapointConfig[address=LEQ1097103,channel=1,parameter=INSTALL_TEST]
19:45:21.352 [DEBUG] [.h.i.c.s.AbstractTypeConverter:105  ] - Converting (Boolean) value 'true' with OnOffTypeConverter for HmDatapoint[address=LEQ1097103,channel=1,parameter=INSTALL_TEST]
19:45:21.357 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_3fach_1 state updated to ON
19:45:21.396 [DEBUG] [m.r.internal.engine.RuleEngine:305  ] - Executing rule 'Aussenschalter Deckenlicht Badezimmer_1'
19:45:21.484 [INFO ] [nhab.model.script.Badezimmer_1:53   ] - Status Deckenlicht ist OFF
19:45:21.511 [INFO ] [runtime.busevents             :22   ] - Badezimmer_1_Deckenlicht received command ON
19:45:21.519 [DEBUG] [.b.h.i.c.HomematicCommunicator:243  ] - Received command ON for item Badezimmer_1_Deckenlicht
19:45:21.541 [DEBUG] [.h.i.c.s.AbstractTypeConverter:66   ] - Converting type OnOffType with value 'ON' to (Boolean) value with OnOffTypeConverter for HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
19:45:21.547 [DEBUG] [o.o.b.h.i.c.HomematicPublisher:73   ] - Sending to Homematic server HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
19:45:21.794 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'true' for DatapointConfig[address=LEQ0900581,channel=1,parameter=STATE]
19:45:21.799 [DEBUG] [.h.i.c.s.AbstractTypeConverter:105  ] - Converting (Boolean) value 'true' with OnOffTypeConverter for HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
19:45:21.813 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_Deckenlicht state updated to ON
19:45:21.817 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'false' for DatapointConfig[address=LEQ0900581,channel=1,parameter=WORKING]
19:45:21.824 [INFO ] [nhab.model.script.Badezimmer_1:53   ] - Aussenschalter schaltet Deckenlicht ON
19:45:25.844 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'true' for DatapointConfig[address=LEQ1097103,channel=1,parameter=INSTALL_TEST]
19:45:25.849 [DEBUG] [.h.i.c.s.AbstractTypeConverter:105  ] - Converting (Boolean) value 'true' with OnOffTypeConverter for HmDatapoint[address=LEQ1097103,channel=1,parameter=INSTALL_TEST]
19:45:25.854 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_3fach_1 state updated to ON
19:45:25.861 [DEBUG] [m.r.internal.engine.RuleEngine:305  ] - Executing rule 'Aussenschalter Deckenlicht Badezimmer_1'
19:45:25.878 [INFO ] [nhab.model.script.Badezimmer_1:53   ] - Status Deckenlicht ist ON
19:45:25.913 [INFO ] [runtime.busevents             :22   ] - Badezimmer_1_Deckenlicht received command OFF
19:45:25.919 [DEBUG] [.b.h.i.c.HomematicCommunicator:243  ] - Received command OFF for item Badezimmer_1_Deckenlicht
19:45:25.925 [DEBUG] [.h.i.c.s.AbstractTypeConverter:66   ] - Converting type OnOffType with value 'OFF' to (Boolean) value with OnOffTypeConverter for HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
19:45:25.931 [DEBUG] [o.o.b.h.i.c.HomematicPublisher:73   ] - Sending to Homematic server HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
19:45:26.133 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'false' for DatapointConfig[address=LEQ0900581,channel=1,parameter=STATE]
19:45:26.138 [DEBUG] [.h.i.c.s.AbstractTypeConverter:105  ] - Converting (Boolean) value 'false' with OnOffTypeConverter for HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
19:45:26.146 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_Deckenlicht state updated to OFF
19:45:26.173 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'false' for DatapointConfig[address=LEQ0900581,channel=1,parameter=WORKING]
19:45:26.161 [INFO ] [nhab.model.script.Badezimmer_1:53   ] - Aussenschalter schaltet Deckenlicht OFF

Deckenlicht per Wandtaster

Zuguterletzt darf auch HM-PB-6-WM55 mitspielen, ein 6-fach-Wandtaster, der sich äusserst variabel einsetzen lässt. Ich reserviere für mein Deckenlicht Channel 1 und Channel 2, beliebige andere Konstellationen sind denkbar.

Switch  Badezimmer_1_6fach_1_release    "Wandtaster: Deckenlicht an/ aus"    { homematic="address=MEQ0385873, channel=1, parameter=PRESS_LONG_RELEASE" }
Switch  Badezimmer_1_6fach_2_release    "Wandtaster: Deckenlicht an/ aus"    { homematic="address=MEQ0385873, channel=2, parameter=PRESS_LONG_RELEASE" }

Das Schalten des Deckenlichts lege ich auf das Event PRESS_LONG_RELEASE, also auf den Moment, in dem die Taste nach einem langen Tastendruck losgelassen wird (PRESS_SHORT werde ich beim Einbinden der Wandlampen nutzen, welche auch dimmbar sein werden; auf Channel 1 und Channel 2 belasse ich dieses Event vorerst unbelegt, ebenso wie PRESS_LONG). Das Regelwerk zur Schaltung lässt sich nun leicht anpassen, indem lediglich der when-Teil der Regel erweitert wird (vgl. Badezimmer_1_Deckenlicht.rulesGITHUB):

//---------------------------------------------------------
rule "Schaltung Deckenlicht Badezimmer_1"
when
	Item Badezimmer_1_3fach_1 received update ON or
	Item Badezimmer_1_6fach_1_release received update ON or
	Item Badezimmer_1_6fach_2_release received update ON
then
	...
11:42:49.659 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_6fach_1_release state updated to ON
11:42:49.667 [DEBUG] [m.r.internal.engine.RuleEngine:305  ] - Executing rule 'Schalte Deckenlicht Badezimmer_1'
11:42:50.678 [INFO ] [nhab.model.script.Badezimmer_1:53   ] - Status Deckenlicht ist OFF
11:42:51.880 [INFO ] [runtime.busevents             :22   ] - Badezimmer_1_Deckenlicht received command ON
11:42:51.888 [DEBUG] [.b.h.i.c.HomematicCommunicator:243  ] - Received command ON for item Badezimmer_1_Deckenlicht
11:42:51.894 [DEBUG] [.h.i.c.s.AbstractTypeConverter:66   ] - Converting type OnOffType with value 'ON' to (Boolean) value with OnOffTypeConverter for HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
11:42:51.900 [DEBUG] [o.o.b.h.i.c.HomematicPublisher:73   ] - Sending to Homematic server HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
11:42:52.083 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'true' for DatapointConfig[address=LEQ0900581,channel=1,parameter=STATE]
11:42:52.087 [DEBUG] [.h.i.c.s.AbstractTypeConverter:105  ] - Converting (Boolean) value 'true' with OnOffTypeConverter for HmDatapoint[address=LEQ0900581,channel=1,parameter=STATE]
11:42:52.103 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_Deckenlicht state updated to ON
11:42:52.108 [DEBUG] [.b.h.i.c.HomematicCommunicator:174  ] - Received new (Boolean) value 'false' for DatapointConfig[address=LEQ0900581,channel=1,parameter=WORKING]
11:42:52.566 [DEBUG] [.h.i.c.s.AbstractTypeConverter:66   ] - Converting type OnOffType with value 'OFF' to (Boolean) value with OnOffTypeConverter for HmDatapoint[address=MEQ0385873,channel=1,parameter=PRESS_LONG_RELEASE]
11:42:52.571 [DEBUG] [.h.i.c.s.AbstractTypeConverter:105  ] - Converting (Boolean) value 'false' with OnOffTypeConverter for HmDatapoint[address=MEQ0385873,channel=1,parameter=PRESS_LONG_RELEASE]
11:42:52.583 [INFO ] [runtime.busevents             :26   ] - Badezimmer_1_6fach_1_release state updated to OFF
11:42:52.587 [DEBUG] [.h.i.communicator.ItemDisabler:98   ] - Disabled Item Badezimmer_1_6fach_1_release with binding DatapointConfig[address=MEQ0385873,channel=1,parameter=PRESS_LONG_RELEASE]
11:42:52.695 [INFO ] [nhab.model.script.Badezimmer_1:53   ] - Schalte Deckenlicht in Badezimmer_1 ON

HM-PB-6-WM55, der Wandtaster, äussert sich in der DEBUG-Ausgabe von OpenHAB anders als HM-SwI-3-FM, an welchem der Wandschalter hängt: beim Betätigen von PRESS_LONG_RELEASE sendet er ein ON und einen Moment später dann ein OFF, so dass bei ihm der Default-Zustand jederzeit OFF, also false, ist. Deshalb ist es auch sehr wichtig, das Regelwerk von received update ON abhängig zu machen und nicht lediglich von received update — die obenstehende Regel würde sonst bei (einmaligem!) Betätigen des Wandtasters im ersten Schritt das Licht an- und im nächsten Moment direkt wieder abschalten.

Weitere Beiträge der Artikelserie »Heimautomatisierung mit OpenHAB« findest du an dieser Stelle.

4
  1. Hut ab,alleine beim lesen schwirrt mir der Kopf🙈 und du machst das so nebenbei, zu all deinen anderen Aufgaben

Keine weitere Reaktionen mehr möglich.