Homematic Schaltaktoren für Markenschalter mit Signal-Leuchte via openHAB2 einfach gleichzeitg ansteuern

Der Markenschalter von Homematic IP ist ein schönes gerät – wenngleich er leider nicht ganz billig ist – um bestimmte Sachen visualisieren zu können. Bei mir visualisiert er mit bestimmten Farben den Zustand des Briefkastens (also ob Post drin liegt) und ein paar andere Sachen, z.B. ob das Licht im Haus überall aus ist oder ob noch Fenster offen sind…

Zudem habe ich mehrere Aktoren im Einsatz – bei jeder Eingangstüre (Keller und Haustür) einen und beiden sollen das Gleiche visualisieren. So müsste ich entweder alle in allen Regeln jeweils separat ansteuern – oder man macht es sich einfach und bastelt sich sozusagen einen „virtuellen Schalter“.

Farbcodes kann der Schalter folgende:

  • BLACK
  • GREEN
  • BLUE
  • TURQUOISE
  • RED
  • VIOLET
  • YELLOW
  • WHITE

Zudem kann der Schalter die Farben in unterschiedlicher Helligkeit darstellen (1-99). Wichtig an der Stelle: Ein „100“, wie andre Dimmer es können, kann er nicht, das Maximale ist 99 und wer die 100 versucht erhält meist einfach kein Licht. Das hat mich tatsächlich einige Zeit gekostet…

D.h. wir schaffen uns zentral vier items (default.items)

// Farbcode oben und unten und Helligkeit oben unten für alle Farbschalter
String farbschalter_oben_farbe "Farbe oben" (debugLichtschalterFarbig)
Number farbschalter_oben_helligkeit "Helligkeit oben [%d]" (debugLichtschalterFarbig)
String farbschalter_unten_farbe "Farbe unten" (debugLichtschalterFarbig)
Number farbschalter_unten_helligkeit "Helligkeit unten [%d]" (debugLichtschalterFarbig)

Grundsätzlich habe ich natürlich auch die Aktoren selbst als Items definiert (default.items)

String  KG_LICHT_SCHLEUSE_OBEN_COLOR    "Farbe oben[%s]"                                                               {channel="homematic:HmIP-xxx:xxx:8#COLOR"}
Dimmer KG_LICHT_SCHLEUSE_OBEN_LEVEL "Helligkeit unten [%d]" {channel="homematic:HmIP-xxx:xxx:8#LEVEL"}
String KG_LICHT_SCHLEUSE_UNTEN_COLOR "Farbe unten [%s]" {channel="homematic:HmIP-xxx:xxx:12#COLOR"}
Dimmer KG_LICHT_SCHLEUSE_UNTEN_LEVEL "Helligkeit unten [%d]" {channel="homematic:HmIP-xxx:xxx:12#LEVEL"}

Dann die zuständigen Regeln (Lichtschalter.rules)

// Farbcodes: BLACK, BLUE, GREEN, TURQUOISE, RED, VIOLET, YELLOW, WHITE 
var boolean log = false
val String logPrefix = 'Lichtschalter - '

rule "Farbcode ändern oben"
when
Item farbschalter_oben_farbe changed
then
var String farbe = farbschalter_oben_farbe.state.toString()
if (EG_LICHT_HAUSTUER_OBEN_COLOR.state != farbe) EG_LICHT_HAUSTUER_OBEN_COLOR.sendCommand(farbe)
if (KG_LICHT_SCHLEUSE_OBEN_COLOR.state != farbe) KG_LICHT_SCHLEUSE_OBEN_COLOR.sendCommand(farbe)
end

rule "Farbcode ändern unten"
when
Item farbschalter_unten_farbe changed
then
var String farbe = farbschalter_unten_farbe.state.toString()
if (EG_LICHT_HAUSTUER_UNTEN_COLOR.state != farbe) EG_LICHT_HAUSTUER_UNTEN_COLOR.sendCommand(farbe)
if (KG_LICHT_SCHLEUSE_UNTEN_COLOR.state != farbe) KG_LICHT_SCHLEUSE_UNTEN_COLOR.sendCommand(farbe)
end


rule "Helligkeit ändern oben"
when
Item farbschalter_oben_helligkeit changed
then
var Integer helligkeit = Integer::parseInt(farbschalter_oben_helligkeit.state.toString())
if (EG_LICHT_HAUSTUER_OBEN_LEVEL.state != helligkeit) EG_LICHT_HAUSTUER_OBEN_LEVEL.sendCommand(helligkeit)
if (KG_LICHT_SCHLEUSE_OBEN_LEVEL.state != helligkeit) KG_LICHT_SCHLEUSE_OBEN_LEVEL.sendCommand(helligkeit)
end

rule "Helligkeit ändern unten"
when
Item farbschalter_unten_helligkeit changed
then
var Integer helligkeit = Integer::parseInt(farbschalter_unten_helligkeit.state.toString())
if (EG_LICHT_HAUSTUER_UNTEN_LEVEL.state != helligkeit) EG_LICHT_HAUSTUER_UNTEN_LEVEL.sendCommand(helligkeit)
if (KG_LICHT_SCHLEUSE_UNTEN_LEVEL.state != helligkeit) KG_LICHT_SCHLEUSE_UNTEN_LEVEL.sendCommand(helligkeit)
end

… und das war es auch schon. Nun kann man bequem einfach die vier „virtuellen“ items bedienen (Farbe und Helligkeit) und die beiden Aktoren werden automatisch aktualisiert.

Wer noch mehr Aktoren haben möchte oder wer die Regeln unabhängig von bestimmten Aktoren haben möchte kann natürlich auch mit Gruppen arbeiten und dann mit einem foreach alle Mitglieder der Gruppe generisch durchgehen und schalten. Bei nur zwei Aktoren hat sich das in meinen Augen einfach nicht rentiert.

Beispielhaft verwende ich das dann wie folgt innerhalb meiner Briefkasten-Rule:

farbschalter_oben_farbe.postUpdate("TURQUOISE")
farbschalter_oben_helligkeit.postUpdate(99)

Viel Spaß damit…

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.