FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: ThomasMagnum am 31 März 2017, 14:22:59

Titel: DOIF mit "or" und "and"
Beitrag von: ThomasMagnum am 31 März 2017, 14:22:59
Hallo,

ich möchte ein DOIF zur Steuerung meines Rollos implementieren. In diesem DOIF soll geprüft werden ob Bedingung1 entweder 1, 2 oder 3 ist und Bedingung2 und Bedingung 3 muss erfüllt sein. Nach lesen des Artikels "DOIF/Operatorenrangfolge" in der Wiki müsste meinem Verständnis nach die DEF folgenderm. aussehen.

([Bedingung1:state] eq "1" || [Bedingung1:state] eq "2" || [Bedingung1:state] eq "3" and [Bedingung2] eq "n" [Bedingung3] > 20 ) (set Rollo on)

Habe ich das richtig verstanden oder bin ich auf dem Holzweg?
Eingebaut und getestet habe ich das noch nicht, da ich kein Testsystem habe und nicht irgendwas im produktiven FHEM implementieren möchte.

Gruß, Thomas
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Jorge3711 am 31 März 2017, 14:34:37
Zwischen Bedingung2 und Bedingung3 fehlt ein "and". Ansonsten würde ich sage passt das.
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Damian am 31 März 2017, 15:28:49
Zitat von: ThomasMagnum am 31 März 2017, 14:22:59
Hallo,

ich möchte ein DOIF zur Steuerung meines Rollos implementieren. In diesem DOIF soll geprüft werden ob Bedingung1 entweder 1, 2 oder 3 ist und Bedingung2 und Bedingung 3 muss erfüllt sein. Nach lesen des Artikels "DOIF/Operatorenrangfolge" in der Wiki müsste meinem Verständnis nach die DEF folgenderm. aussehen.

([Bedingung1:state] eq "1" || [Bedingung1:state] eq "2" || [Bedingung1:state] eq "3" and [Bedingung2] eq "n" [Bedingung3] > 20 ) (set Rollo on)

Habe ich das richtig verstanden oder bin ich auf dem Holzweg?
Eingebaut und getestet habe ich das noch nicht, da ich kein Testsystem habe und nicht irgendwas im produktiven FHEM implementieren möchte.

Gruß, Thomas

Wahrscheinlich meinst du das aber so:
(([Bedingung1:state] eq "1" or [Bedingung1:state] eq "2" or [Bedingung1:state] eq "3") and [Bedingung2] eq "n" and [Bedingung3] > 2)...
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: ThomasMagnum am 01 April 2017, 00:54:51
Hallo Jorge3711, hallo Damian,

vielen Dank für eure Hilfen / Kommentare.
Nur noch mal für mich zum Verständnis, die Klammersetzung um den Block der Bedingung1 sorgt dafür das diese separat zu den Bedingungen2 und 3 behandelt werden - richtig?
Also entweder Bedingung1-1 oder Bedingung1-2 oder Bedingung1-3 und dann noch Bedingung2 und Bedingung3.

Aber was bedeuten dann die ||? Ich dachte nach dem Lesen des Artikels das dies genau in solch einem Fall zu nutzen ist. Wobei mir die Variante mit der "inneren" Klammer nach dem Vorbild des Klammerechnens natürlich lieber ist.  ;)

Gruß, Thomas
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Damian am 01 April 2017, 08:54:48
Zitat von: ThomasMagnum am 01 April 2017, 00:54:51
Hallo Jorge3711, hallo Damian,

vielen Dank für eure Hilfen / Kommentare.
Nur noch mal für mich zum Verständnis, die Klammersetzung um den Block der Bedingung1 sorgt dafür das diese separat zu den Bedingungen2 und 3 behandelt werden - richtig?
Also entweder Bedingung1-1 oder Bedingung1-2 oder Bedingung1-3 und dann noch Bedingung2 und Bedingung3.

Aber was bedeuten dann die ||? Ich dachte nach dem Lesen des Artikels das dies genau in solch einem Fall zu nutzen ist. Wobei mir die Variante mit der "inneren" Klammer nach dem Vorbild des Klammerechnens natürlich lieber ist.  ;)

Gruß, Thomas

1. || entspricht or, genauso wie && and entspricht
2. and hat eine höhere Rangstufe als or  (so wie Punkt- vor Strichrechnung), daher musst du entsprechend mit Klammern arbeiten
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Ellert am 01 April 2017, 11:46:06
Zitat von: Damian am 01 April 2017, 08:54:48
1. || entspricht or, genauso wie && and entspricht
2. and hat eine höhere Rangstufe als or  (so wie Punkt- vor Strichrechnung), daher musst du entsprechend mit Klammern arbeiten

Doch || hat eine höhere Rangstufe als and, daher können die Klammern entfallen

A || B and C entspricht (A or B) and C
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Damian am 01 April 2017, 12:44:28
Zitat von: Ellert am 01 April 2017, 11:46:06
Doch || hat eine höhere Rangstufe als and, daher können die Klammern entfallen

A || B and C entspricht (A or B) and C

Das ist richtig, genauso wie && höhere Rangstufe als and hat. Ich finde, dass gerade für Anfänger or bzw. and besser verständlich ist. Eine Mischung aus || or and && halte ich für ungünstig, denn dann kommt man mit den Rangstufen noch mehr durcheinander und die Regel: Punkt- (and) vor Strichrechnung (or) ausgehebelt wird.
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Ellert am 01 April 2017, 18:27:33
Zitat von: Damian am 01 April 2017, 12:44:28
Das ist richtig, genauso wie && höhere Rangstufe als and hat. Ich finde, dass gerade für Anfänger or bzw. and besser verständlich ist. Eine Mischung aus || or and && halte ich für ungünstig, denn dann kommt man mit den Rangstufen noch mehr durcheinander und die Regel: Punkt- (and) vor Strichrechnung (or) ausgehebelt wird.

Es war nicht als Empfehlung gedacht, sondern als Ergänzung. Der Artikel https://wiki.fhem.de/wiki/DOIF/Operatorenrangfolge auf den sich ThomasMagnum vermutlich bezog, sollte deutlich machen, dass man die Operatorentypen nur mit Vorsicht mischen sollte.
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Damian am 02 April 2017, 09:52:10
Zitat von: Ellert am 01 April 2017, 18:27:33
Es war nicht als Empfehlung gedacht, sondern als Ergänzung. Der Artikel https://wiki.fhem.de/wiki/DOIF/Operatorenrangfolge auf den sich ThomasMagnum vermutlich bezog, sollte deutlich machen, dass man die Operatorentypen nur mit Vorsicht mischen sollte.

Du müsstest den Wiki-Artikel anpassen. Die Erklärung zu || ist nicht korrekt. || ist in Perl ebenso ein logisches Oder wie or (mit einer anderen Priorität), bitweise Oder ist dagegen | (wie in C) siehe https://wiki.selfhtml.org/wiki/Perl/Operatoren
Titel: Antw:DOIF mit "or" und "and"
Beitrag von: Ellert am 02 April 2017, 10:30:34
Oh, das ist mir entgangen, danke für den Hinweis, ich hab's korrigiert.