DOIF/Operatorenrangfolge

Aus FHEMWiki
Info green.pngEine aktuelle DOIF-Version ist erforderlich


Operatorenrangfolge.png

Rangfolge von Operatoren in der Bedingung

Die Operatorenrangfolge bestimmt das Ergebnis einer Bedingung mit. Die Nichtbeachtung kann zu unerwarteten Ergebnissen führen. Mit dieser Laborgruppe kann das Verhalten verschiedener Operatoren ausprobiert werden.

Beschreibung

Info green.pngHinweis
  • Verwendung von $SELF mit Zusatz, um ein anderes Gerät zu referenzieren [$SELF1:<Reading>] entspricht [operatorenRang_Labor11:<Reading>]
  • triggern auf Status mit $SELF [$SELF:<Reading>]


Die Rangfolge von Operatoren in Perl ist festgelegt. Durch Benutzung von Klammern erfolgt die eingeklammerte Berechnung vorrangig.
In der Laborgruppe können verschieden Werte für A, B und C eingestellt und das Ergebnis der Verknüpfung beobachtet werden. Beispiel a) Verwendet die Rangfolge der Perlvogabe (and vor or).
Beispiel b) Verwendet die Rangfolge der Perlvogabe (|| vor and). Das bitweise Oder hat Vorrang vor dem logischen Und.
Beispiel c) Legt die Rangfolge mit einer Klammer fest (A or B) vor and). Das entspricht dem Ergebnis von Beispiel c).
Beispiel d) mit einem regulären Ausdruck.

Definition

define operatorenRang_Labor11 DOIF ([$SELF:A,0] or [$SELF:B,0] and [$SELF:C,0])
define operatorenRang_Labor1 DOIF (([$SELF1:A] or [$SELF1:B]) and [$SELF1:C]) ## $SELF1 referenziert hier operatorenRang_Labor11
([operatorenRang_Labor11:A] || [operatorenRang_Labor11:B] and [operatorenRang_Labor11:C])
([operatorenRang_Labor11:A] =~ "ein|1")

Übungsvorschlag

  • Durchspielen der Kombinationen von A, B und C
  • Ändern der Bedingungen mit anderen Operatoren
  • Nutzung von Readings aus dem Wirkbetrieb

Laborgruppe zum Import mit Raw definition

define operatorenRang_Labor1 DOIF (([$SELF1:A] or [$SELF1:B]) and [$SELF1:C]) ## operatorenRang_Labor2 operatorenRang_Labor11
attr operatorenRang_Labor1 alias c) (A or B) and C
attr operatorenRang_Labor1 cmdState Bedingung wahr|Bedingung falsch
attr operatorenRang_Labor1 group Labor: Operatorenrangfolge
attr operatorenRang_Labor1 room DOIF_Labor

define operatorenRang_Labor11 DOIF ([$SELF:A,0] or [$SELF:B,0] and [$SELF:C,0]) ## operatorenRang_Labor1 operatorenRang_Labor2
attr operatorenRang_Labor11 alias a) A or B and C
attr operatorenRang_Labor11 cmdState Bedingung wahr|Bedingung falsch
attr operatorenRang_Labor11 group Labor: Operatorenrangfolge
attr operatorenRang_Labor11 readingList A B C
attr operatorenRang_Labor11 room DOIF_Labor
attr operatorenRang_Labor11 setList A:0,#,null,1,-1,eins B:0,#,null,1,-1,eins C:0,#,null,1,-1,eins
attr operatorenRang_Labor11 webCmd A:B:C

define operatorenRang_Labor2 DOIF ([operatorenRang_Labor11:A] || [operatorenRang_Labor11:B] and [operatorenRang_Labor11:C]) ## operatorenRang_Labor1 operatorenRang_Labor3 operatorenRang_Labor11
attr operatorenRang_Labor2 alias b) A || B and C
attr operatorenRang_Labor2 cmdState Bedingung wahr|Bedingung falsch
attr operatorenRang_Labor2 group Labor: Operatorenrangfolge
attr operatorenRang_Labor2 room DOIF_Labor

define operatorenRang_Labor3 DOIF ([operatorenRang_Labor11:A] =~ "ein|1") ## operatorenRang_Labor1 operatorenRang_Labor2 operatorenRang_Labor11
attr operatorenRang_Labor3 alias d) A =~ "ein|1"
attr operatorenRang_Labor3 cmdState Bedingung wahr|Bedingung falsch
attr operatorenRang_Labor3 group Labor: Operatorenrangfolge
attr operatorenRang_Labor3 room DOIF_Labor
save

Links