zurück zur Startseite

zurück zur Übersicht der Heimautomatisierung

42. Das Eisenbahnzimmer (Stand 07.12.2018)

Das Eisenbahnzimmer heißt so, weil sich da meine gesamte Modelleisenbahn findet. Dieses Hobby dient im wesentlichen auch zum Erhalt meiner feinmotorischen Fähigkeiten (so erhoffe ich mir das zumindest). Weiterhin steht da auch mein PC und eben die Zentrale der Heimautomatisierung. Das bereits im letzten Kapitel gezeigte bunte Licht dient weitgehend nur zum Testen, bevor ich es für den Wellnessbereich einsetze.

Das meiste davon kennen wir bereits, neu sind die beiden Felder links oben. Mit der Taste kann man 4 Modi des bunten Licht schalten:

Spannend ist nun, wie die Information von der Bedienoberfläche der Zentrale zur Lichtsteuerung des Assistenten kommt. Dazu benötigt man nur 2 dummy-Variable in der Zentrale, für jedes angezeigte Element auf der Bedienoberfläche eine. Dazu kommt noch ein kleines notify, damit der bei manueller Einstellung gewünschte Farbwert auch im Status der Variable steht.

define ff_rgb_ezstatus dummy
attr ff_rgb_ezstatus devStateIcon 0:20_k_lichtRGB0:1 1:20_k_lichtRGB1:2 2:20_k_lichtprogramm2:3 3:20_k_lichtprogramm1:0
attr ff_rgb_ezstatus fp_zw_eisenbahnzimmer 100,200,0
attr ff_rgb_ezstatus room Eisenbahn

define ff_rgb_ezwert dummy
attr ff_rgb_ezwert fp_zw_eisenbahnzimmer 100,400,7
attr ff_rgb_ezwert readingList RGB
attr ff_rgb_ezwert room RGB,Eisenbahn
attr ff_rgb_ezwert setList RGB:colorpicker,RBG state
attr ff_rgb_ezwert webCmd RGB
attr ff_rgb_ezwert widgetOverride RGB:colorpicker,HSV

define ez_rgbwert notify ff_rgb_ezwert.RGB:.* {\
my $rgb = ReadingsVal("ff_rgb_ezwert","RGB",0);;\
fhem("set ff_rgb_ezwert $rgb")\
}
attr ez_rgbwert room Eisenbahn,RGB

Diese beiden Variable sind auch im Assistenten definiert. Weil sie mit ff_ anfangen, werden sie entsprechend der Definition von Kapitel 40 vom Assitenten bei jeder Änderung von der Zentrale abgeholt.

define ff_rgb_ezstatus dummy
attr ff_rgb_ezstatus room Kopplung,RGB

define ff_rgb_ezwert dummy
attr ff_rgb_ezwert room Kopplung,RGB

Da es hier nur um die Variable an sich geht, fällt die Definition einfacher aus. Jedes Ereignis, weches die Farbe des Lichts ändern soll (=Änderung des Werts einer Variablen) wird über entsprechende notify erkannt und triggert ein Makro.

define ez_controlstatus notify ff_rgb_ezstatus trigger ez_control
attr ez_controlstatus room RGB

define ez_controlpreset notify rgb_presetwert:.* trigger ez_control
attr ez_controlpreset room RGB

define ez_controlumlauf notify rgb_umlaufwert.* trigger ez_control
attr ez_controlumlauf room RGB

define ez_controlzufall notify rgb_zufallswert:.* trigger ez_control
attr ez_controlzufall room RGB

define ez_controlsonne notify rgb_sonnenwert:.* trigger ez_control
attr ez_controlsonne room RGB

define ez_controlmanuell notify ff_rgb_ezwert:.* trigger ez_control
attr ez_controlmanuell room RGB

Das Makro stellt dann entsprechend das Licht ein.

define ez_control notify ez_control {\
my $wert;;\
my $verlauf;;\
my $alterwert = ReadingsVal("ez_wellness","RGB",0);;\
if (Value("ff_rgb_ezstatus") == 0) {\
# einfach nur ausschalten\
fhem("set ez_wellness off 10")\
}\
elsif (Value("ff_rgb_ezstatus") == 1) {\
# den Wert von der Bedienoberfläche übernehmen\
$wert = Value("ff_rgb_ezwert");;\
fhem("set ez_wellness RGB $wert")\
}\
elsif (Value("ff_rgb_ezstatus") == 2) {\
# ein- oder umschalten auf den gewählten Wert\
$wert = ReadingsVal("rgb_presetwert","RGB",0);;\
fhem("set ez_wellness RGB $wert 10")\
}\
elsif (Value("ff_rgb_ezstatus") == 3) {\
# das gewählte Programm anwählen\
if (Value("bl_programm") eq "umlauf") {\
$verlauf = ReadingsVal("rgb_umlaufwert","verlauf",0);;\
$wert = Value("rgb_umlaufwert")\
}\
elsif (Value("bl_programm") eq "zufall") {\
$verlauf = ReadingsVal("rgb_zufallswert","verlauf",0);;\
$wert = Value("rgb_zufallswert")\
}\
elsif (Value("bl_programm") eq "sonne") {\
$verlauf = ReadingsVal("rgb_sonnenwert","verlauf",0);;\
$wert = Value("rgb_sonnenwert")\
}\
elsif (Value("bl_programm") eq "saettigung") {\
$verlauf = ReadingsVal("rgb_saettigungswert","verlauf",0);;\
$wert = Value("rgb_saettigungswert")\
}\
if (Value("bl_mode") == 0 && (Value("ff_tagnacht") == 1\
|| Value("uj_statushaus") eq "home" || Value("uj_statushaus") eq "gotosleep" || Value("uj_statushaus") eq "asleep" || Value("uj_statushaus") eq "awoken")) {\
$wert = "000000"\
}\
if (Value("bl_mode") == 1 && Value("ff_tagnacht") == 1) {\
$wert = "000000"\
}\
if ($wert ne $alterwert) {fhem("set ez_wellness RGB $wert $verlauf")}\
}\
}
attr ez_control room RGB

Nur mal so am Rande zur Erinnerung: häufig habe ich hier den Code aus fhem.cfg kopiert. Hier werden u.U. die Semikolon gedoppelt und der Rückwärtsschrgstrich eingeführt, was man in der Weboberfläche aber nicht sieht und auch nicht eingibt.

weiter zu: 43. Das Gästebad