wie mache ich eine Klammerprüfung bei vielen Bedingungen

Begonnen von Otto, 31 Mai 2016, 11:07:22

Vorheriges Thema - Nächstes Thema

Otto

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?
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

CoolTux

Die geöffneten hochzählen und die geschlossenen runter. Am Ende muss 0 stehen. Deine Bedingung in ein Editor mit Syntaxhighlighting laden.
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

igami

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
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Otto

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.
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

igami

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)
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

CoolTux

Und genau wie in der Mathematik kann man das Bevorzugen auch erzwingen. Hierfür nimmt man dann zusätzlich Runde Klammern
Du musst nicht wissen wie es geht! Du musst nur wissen wo es steht, wie es geht.
Support me to buy new test hardware for development: https://www.paypal.com/paypalme/MOldenburg
My FHEM Git: https://git.cooltux.net/FHEM/
Das TuxNet Wiki:
https://www.cooltux.net

Damian

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

Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

igami

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?
Pi3 mit fhem.cfg + DbLog/logProxy
Komm vorbei zum FHEM Treffen im Kreis Gütersloh! Das nächste Mal im April 2020.

MAINTAINER: archetype, LuftdatenInfo, monitoring, msgDialog, Nmap, powerMap
ToDo: AVScene, FluxLED

Damian

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
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Otto

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 :)
Gruss Otto

.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.oOo.

docker - homematic

Damian

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)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF