Hallo,
ich bekomme mein DoIF nicht hin:
define di_Rollo_AZ DOIF ([Wetter:temperature]>5 and [Bewegungsmelder1:brightness]>[([du_Helligkeit_hell]+20)] and [([du_Rollo_Zeit_hoch]+[00:15]) - ([du_Rollo_spaetestens_hoch]-[00:05])]\
or [[du_Rollo_spaetestens_hoch]] or [([du_Rollo_Zeit_hoch]+[01:35])|7]) (set Rollo_AZ:FILTER=level!=100 on)\
DOELSEIF\
([Bewegungsmelder1:brightness]<[du_Helligkeit_hell] and [[du_Rollo_Zeit_runter] - ([du_Rollo_spaetestens_runter] - [00:05])] and [EG_Wz_TerrasseTuer] eq "geschlossen") (set Rollo_AZ:FILTER=level!=0 off) \
DOELSEIF\
([du_Rollo_spaetestens_runter] and [EG_Wz_TerrasseTuer] eq "geschlossen") (set Rollo_AZ:FILTER=level!=0 off)
Es wohl ein Klammerfehler bei der letzten DOELSEIF, der letzte Timer_7 (du_Rollo_spaetestens_runter) wird nicht gesetzt.
siehe
Zitat2016-05-31 10:29:37 state cmd_1
2016-05-31 10:29:16 timer_1_c1 01.06.2016 00:02:10
2016-05-31 10:30:00 timer_2_c1 01.06.2016 07:15:00
2016-05-31 10:30:00 timer_3_c1 01.06.2016 10:30:00
2016-05-31 10:35:00 timer_4_c1 01.06.2016 10:35:00
2016-05-31 10:29:16 timer_5_c1 01.06.2016 08:35:00|7
2016-05-31 10:29:16 timer_6_c2 31.05.2016 16:00:00
2016-05-31 10:29:16 timer_7_c2 31.05.2016 22:30:00
Wer kann mir helfen und wie prüfe ich die einzelnen Klammern?
Die geöffneten hochzählen und die geschlossenen runter. Am Ende muss 0 stehen. Deine Bedingung in ein Editor mit Syntaxhighlighting laden.
Benutzt du den JavaScript Editor? Der markiert zugehörige Klammern.
Ansonsten helfen Zeilenumbrüche und Einrückungen.
So würde ich es schreiben
define di_Rollo_AZ DOIF
([Wetter:temperature] > 5 and
[Bewegungsmelder1:brightness] > [([du_Helligkeit_hell] + 20)] and
[([du_Rollo_Zeit_hoch]+[00:15]) - ([du_Rollo_spaetestens_hoch]-[00:05])]
or
[[du_Rollo_spaetestens_hoch]] or
[([du_Rollo_Zeit_hoch]+[01:35])|7]
)(
set Rollo_AZ:FILTER=level!=100 on
)
DOELSEIF
([Bewegungsmelder1:brightness]<[du_Helligkeit_hell] and
[[du_Rollo_Zeit_runter] - ([du_Rollo_spaetestens_runter] - [00:05])] and
[EG_Wz_TerrasseTuer] eq "geschlossen"
)(
set Rollo_AZ:FILTER=level!=0 off
)
DOELSEIF
([du_Rollo_spaetestens_runter] and
[EG_Wz_TerrasseTuer] eq "geschlossen"
)(
set Rollo_AZ:FILTER=level!=0 off
)
Ich bin mir nicht sicher, dass das
[([du_Helligkeit_hell] + 20)]
so funktioniert.
Grüße
igami
ZitatBenutzt du den JavaScript Editor
Ja für kleine DEF.
Sonst nehme ich notepad++
Was mir noch nicht ganz klar ist: Wann nehme ich runde Klammern? Das ein Zustand in eckige kommt ist klar.
Ich denke das ist mein Problem.
Zitat von: Otto am 31 Mai 2016, 12:08:01
Wann nehme ich runde Klammern?
define <name> DOIF (<Bedingung>) (<Befehle>) DOELSEIF (<Bedingung>) (<Befehle>) DOELSEIF ... DOELSE (<Befehle>)
Bei and und or wird and zuerst ausgewertet (wie Punkt vor Strich bei Mathe)
Und genau wie in der Mathematik kann man das Bevorzugen auch erzwingen. Hierfür nimmt man dann zusätzlich Runde Klammern
Mit runden Klammern werden bei Zeitangaben oder Zeitintervallen Zeitberechnung initiiert:
Die Angabe:
[([du_Helligkeit_hell] + 20)]
oder
[[du_Rollo_Zeit_runter] - ([du_Rollo_spaetestens_runter] - [00:05])]
sollte kein Problem sein.
Immer aktuelle DOIF-Version verwenden.
Gruß
Damian
Zitat von: Damian am 31 Mai 2016, 20:33:07
sollte kein Problem sein.
Wenn ich das richtig gesehen habe wird
[([du_Helligkeit_hell] + 20)]
aber nicht als Zeitangabe sondern Vergleich verwendet.
Da müstte es doch
{([du_Helligkeit_hell] + 20)}
sein, oder?
Zitat von: igami am 31 Mai 2016, 20:55:47
Wenn ich das richtig gesehen habe wird
[([du_Helligkeit_hell] + 20)]
aber nicht als Zeitangabe sondern Vergleich verwendet.
Da müstte es doch
{([du_Helligkeit_hell] + 20)}
sein, oder?
OK. Für Zeitvergleiche ist es nicht gedacht, sondern für Timer, die auch gesetzt werden. Für Zeitvergleich wird es nicht funktionieren, auch nicht mit geschweiften Klammern. Da kann man besser mit nicht triggernden Zeitintervallen arbeiten.
Gruß
Damian
Ist nutze es an der Stelle nicht als Zeitvergleich, sondern als Wertevergleich:
[Bewegungsmelder1:brightness]>130
habe ich als dummy du_Helligkeit_hell mit state 110, ergibt dann
[Bewegungsmelder1:brightness]>[([du_Helligkeit_hell]+20)]
geht das? Habe es noch nicht getestet :)
Zitat von: Otto am 31 Mai 2016, 23:23:29
Ist nutze es an der Stelle nicht als Zeitvergleich, sondern als Wertevergleich:
[Bewegungsmelder1:brightness]>130
habe ich als dummy du_Helligkeit_hell mit state 110, ergibt dann
[Bewegungsmelder1:brightness]>[([du_Helligkeit_hell]+20)]
geht das? Habe es noch nicht getestet :)
Dann musst du angeben:
[Bewegungsmelder1:brightness] > ([du_Helligkeit_hell]+20)