DOIF _ ich les' mir ne'n Wolf

Begonnen von ischgucke, 19 Oktober 2016, 00:28:34

Vorheriges Thema - Nächstes Thema

ischgucke

Ich weiß nicht mal wie ich fragen soll...

der unten aufgeführte Code funktioniert soweit. Nur möchte ich zusätzlich, dass wenn sich der Wert in 'flur_wand_farbe' ändert auch sofort dieser Wert an 'flur_white_1 ' übergeben wird.

was bewirkt der code jetzt:
wenn der orange button gedrückt ist und es noch dunkel ist und mindestens einer von uns dreien zu Hause ist, soll im Flur das Licht angehen.

Unter den Bedingungen von Lichtstand und Sunset,sunrise habe ich einen dummy namens Tageslicht. Wenn sich also das Tageslicht ändert und damit gewisse Variablen, soll auch das Licht (flur_white_1), obwohl es schon an ist, den neuen Wert aus der Variablen [flur_wand_farbe:state] bekommen.

define d_flur_wandlicht DOIF ([ZW_wall_orange:basicSet] == 255 and [ZW_eye1:luminance] <= 20 and ([iPhone_Andre] eq "on" or [iPhone_Cordula] eq "on" or [iPhone_lennox] eq "on")) \
(set flur_white_1 [flur_wand_farbe:state]) \
DOELSE (set flur_white_1 off)
attr d_flur_wandlicht do always
attr d_flur_wandlicht room admin
attr d_flur_wandlicht verbose 5
attr d_flur_wandlicht widgetOverride state:textField-long


define flur_wand_farbe dummy
attr flur_wand_farbe event-on-change-reading state
define d_licht_farbe DOIF ([Tageslicht] eq "dunkel") (set lichtwert RGB 96125A1415) ((set flur_wand_farbe hsv 3000,0,9))\
DOELSEIF ([Tageslicht] eq "hell") ((set flur_wand_farbe hsv 4400,0,63)) (set lichtwert RGB 9270FF7F7F)



Ich bin schon seid Tagen am lesen und versuchen, komme aber nicht auf die Lösung.

wer kann bitte helfen?

Danke
Andre

Ma_Bo

Versuchs mal mit nem DOELSEIF hinter deinem Code

DOELSEIF ([flur_wand_farbe:state])(set flur_white_1 [flur_wand_farbe:state])


Gesendet von iPhone mit Tapatalk
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Ellert

Um festzustellen, was genau nicht funktioniert solltest Du mal alle Geräte, die beteiligt sind mit loggen, siehe http://www.fhemwiki.de/wiki/DOIF/Tools_und_Fehlersuche#Verhaltensanalyse_des_DOIF, dann kannst Du feststellen wo der set flur_white_1 nicht augeführt wird, falls der Tip von Ma_Bo nicht hilft.

ischgucke

Danke!

aber es funktioniert nicht.

Das log sag auch nichts neues, weil die doif schleife gar nicht erst durch laufen wird.

Es müsste was sein welches bei einer Werteänderung das bereits erfolgte Ergebnis noch einmal beeinflusst. Also, da das (set flur_white_1 [flur_wand_farbe:state]) ja schon ausgeführt wurde und bereis "an" ist, wird nicht noch mal "set" ausgeführt.
Wie kann ich DOIF dazu bewegen set noch mal auszuführen?

Ellert

#4
Das geht mit dem Attribut do always, dann wird mit jeder Aktualisierung des Helligkeitsmessers "Tageslicht" des set-Befehl ausgeführt.

Und dann fügst Du Tageslicht hier ein

... and  ([iPhone_Andre] eq "on" or [iPhone_Cordula] eq "on" or [iPhone_lennox] eq "on" or ([?iPhone_Andre] eq "on" or [?iPhone_Cordula] eq "on" or [?iPhone_lennox] eq "on") and [Tageslicht]))

Ma_Bo

Oder versuch einfach das alles wie du es hattest zu lassen und dann ein zusätzliches DOIF mit :

define d_flur_wandlicht2 DOIF ([flur_wand_farbe:state])(set flur_white_1 [flur_wand_farbe:state]) DOELSE
attr d_flur_wandlicht2 do always


Somit wird jedes mal wenn sich der flur_wand_farbe state ändert, auch flur_white_1 geändert.
ggfs noch ein

attr d_flur_wandlicht2 wait 1:0
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

Ma_Bo

Hattest du mein Beispiel von gestern hinter dein DOELSE gemacht oder vor das DOELSE...?
Es muss vor das DOELSE.
NUC mit FHEM, HM Heizungsthermostate, HM Wandthermostate, Intertechno Funksteckdosen, 10" Tablet als Wanddisplay, KeyMatic, Fensterkontakte, Fensterkontakte umgebaut als Wassermelder und Briefkastenmelder, Aussenthermostat, Anwesenheitssteuerung über Fritz Box, Google Home usw. usw.

ischgucke

Zitat von: Ma_Bo am 19 Oktober 2016, 18:27:26
Hattest du mein Beispiel von gestern hinter dein DOELSE gemacht oder vor das DOELSE...?
Es muss vor das DOELSE.

Ich hatte dein Beispiel nach dem DOELSE. Auch vor dem DOELSE funktioniert es nur ein mal und dann auch nicht mehr. Außerdem schaltet diese Bedingung das Licht ein auch wenn es durch den ZW_wall_orange:basicSet aus sein sollte.
Gleiches gilt für ein zusätzliches DOIF  wie du es vorgeschlagen hast.

Die Sache von Ellert hatte ich so ähnlich schon mal. Werde es jetzt gleich aber noch mal neu genau so machen wie Ellert vorschlägt.

ischgucke

Zitat von: Ellert am 19 Oktober 2016, 17:49:55
Das geht mit dem Attribut do always, dann wird mit jeder Aktualisierung des Helligkeitsmessers "Tageslicht" des set-Befehl ausgeführt.

Und dann fügst Du Tageslicht hier ein

... and  ([iPhone_Andre] eq "on" or [iPhone_Cordula] eq "on" or [iPhone_lennox] eq "on" or ([?iPhone_Andre] eq "on" or [?iPhone_Cordula] eq "on" or [?iPhone_lennox] eq "on") and [Tageslicht]))

...dass zusammen mit dem attr do always hat die gewünschte Lösung gebracht. Vielen Dank an Euch!