FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: holle75 am 05 Juni 2018, 00:35:28

Titel: [gelöst] Syntax Negierung von DOIF Fall in Klammer
Beitrag von: holle75 am 05 Juni 2018, 00:35:28
Vielleicht für andere eine Selbstverständlichkeit, aber da die Info zu finden (zumindest mir) schwer fiel, wollte ich es für andere festhalten.

Idee war, dass die Beregnung NICHT läuft wenn die vorhergesagte Regenmenge über 4 UND die Regenwahrscheinlichkeit über 50 liegt.
Da ich es über Negierung IN der Klammer nicht geschafft habe:

<4 and <50
6 false and 60 false -> false
3 true and 60 false -> false
6 false and 40 true -> false

!>4 and !>50
6 false and 60 false -> false
3 true and 60 false -> false
6 false and 40 true -> false

ich aber das hier NEGIERT haben wollte:

>4 and >50
6 true and 60 true -> true
3 false and 60 true -> false
6 true and 40 false -> false

ist dann das draus geworden. Morgen weiß ich, ob es funktioniert.


gekürzt

DOIF ([?Wetterstation:israining] eq "0" and (!([?WetterProplanta:fc0_rain] > 4 and [?WetterProplanta:fc0_chOfRainDay] > 50)) and ["BeregnungDOIF_NachSonneElevation:cmd_1"])

(Beregnung läuft los)


Falls jemand für meine obigen "Gedankenkünste" einen Ausweg weiß, sprich ohne die Negierung der ganzen Klammer, gerne her damit. Ansonsten wird ab demnächst auch jemand anderes unter "DOIF Negierung Klammer" etwas finden :) ... hoffe mal, dass es stimmt.
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: amenomade am 05 Juni 2018, 00:44:22
! ( X and Y ) = !X or !Y
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: holle75 am 05 Juni 2018, 00:56:33
mmh, würde aber bedeuten, dass die Beregnung ENTWEDER bei Wahrscheinlichkeit über 50 ODER Regen über 4 laufen würde. Ich wünsch mir aber die Kombi.

... dieser eine Fall macht mich jetzt schon (mal wieder) seit Stunden wuschig. Es macht einfach nicht klick.


Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: amenomade am 05 Juni 2018, 07:28:57
Zitatdie Beregnung NICHT läuft wenn die vorhergesagte Regenmenge über 4 UND die Regenwahrscheinlichkeit über 50 liegt.
heisst auch
die Beregnung DOCH läuft, ENTWEDER wenn die Regenmenge UNTEN 4 ODER die Regenwahrscheinlichkeit UNTEN 50 liegt

Ich gehe NICHT raus wenn es regnet, UND ich keinen Regenschirm habe
heisst auch
ich gehe raus, ENTWEDER wenn es NICHT regnet, ODER ich DOCH einen Regenschirm habe.

! ( X>4 and Y>50 ) <=> (X <= 4  or Y<=50)
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: holle75 am 05 Juni 2018, 10:44:07
Zitat von: amenomade am 05 Juni 2018, 07:28:57
heisst auch
die Beregnung DOCH läuft, ENTWEDER wenn die Regenmenge UNTER 4 ODER die Regenwahrscheinlichkeit UNTEN 50 liegt


..... und genau das ist ja mein Problem :) ... Ich möchte:

Zitat von: holle75 am 05 Juni 2018, 00:35:28

Idee war, dass die Beregnung NICHT läuft wenn die vorhergesagte Regenmenge über 4 UND die Regenwahrscheinlichkeit über 50 liegt.


um es im Wort zu sagen: eine eventuelle Regenmenge von über 4 mm bringt mir nicht viel, solange die Wahrscheinlichkeit gering ist, dass sie auch runterkommt.
eine Regenwahrscheinlichkeit von 100 Prozent bringt nix solange die Regenmenge 0.1 mm ist. Deswegen brauche ich die Kombi.

Vielleicht habe ich auch einen Knoten im Kopf, aber die OR-Variante erklärt sich mir nicht.

Danke für dein Mitdenken.
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: Per am 05 Juni 2018, 11:01:31
Übernimm einfach das Beispiel und schau dir später an, wie es funktioniert. Wenn es sooo falsch wäre, könntest du hier nix schreiben, denn dein PC/Handy auch diese Logik verwendet und die gäbe es sonst so nicht ;).

Mach doch einfach die vier Kästchen
a: 0 0
b: 0 1
c: 1 0
d: 1 1...
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: amenomade am 05 Juni 2018, 11:18:36
Hmmm... ich weiss nicht mehr, wie es zu erklären.

Zitatdie Beregnung NICHT läuft wenn die vorhergesagte Regenmenge über 4 UND die Regenwahrscheinlichkeit über 50 liegt.
, was Du im Moment programmiert hast,
bedeutet genau das gleiche (strikte mathematische / logische Äquivalenz) wie:
Zitatdie Beregnung läuft, wenn die Regenmenge UNTER (oder gleich) 4 ODER die Regenwahrscheinlichkeit UNTER (oder gleich) 50 liegt
, und zwar:

Falls Regenmenge < 4 und Regenwahrscheinlichkeit < 50:
   1-Regenmenge < 4 ist wahr
   2-Regenwahrscheinlichkeit < 50 ist wahr
   Ergebnis: (Regenmenge < 4 oder Regenwahrscheinlichkeit < 50) = (wahr oder wahr) = wahr => Beregnung

Falls Regenmenge < 4 und Regenwahrscheinlichkeit > 50:
   1-Regenmenge < 4 ist wahr
   2-Regenwahrscheinlichkeit < 50 ist falsch
   Ergebnis: (Regenmenge < 4 oder Regenwahrscheinlichkeit < 50) = (wahr oder falsch) = wahr => Beregnung

Falls Regenmenge > 4 und Regenwahrscheinlichkeit < 50:
   1-Regenmenge < 4 ist falsch
   2-Regenwahrscheinlichkeit < 50 ist wahr
   Ergebnis: (Regenmenge < 4 oder Regenwahrscheinlichkeit < 50) = (falsch oder wahr) = wahr => Beregnung

Falls Regenmenge > 4 und Regenwahrscheinlichkeit > 50:
   1-Regenmenge < 4 ist falsch
   2-Regenwahrscheinlichkeit < 50 ist falsch
   Ergebnis: (Regenmenge < 4 oder Regenwahrscheinlichkeit < 50) = (falsch oder falsch) = falsch=> Keine Beregnung


Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: holle75 am 05 Juni 2018, 11:35:36
Hallo Per! wie immer schön von dir zu hören (zumal das hier ja alles mit auf dich zurückgeht) :D

das blöde ist nur, dass diese Fälle soooo selten eintreten, dass ein Ausprobieren wenn man es nicht versteht dann sehr, sehr lange dauern kann.
Ich könnte es auch abstrahieren und aufs Testsystem packen, dann hab ich aber wieder später das Problem die Modifikation im Hauptsystem zu testen.

Also Kästchen:

<= 4 or <= 50
6 false or 60 false -> false
3 true or 60 false -> true
6 false or 40 true -> true
3 true or 40 true -> true

verdammt, es geht. Na wenigstens weiß ich jetzt trotzdem wie man eine Klammer negiert :)

Wie immer vielen Dank an euch. Fühle mich gerade minderbemittelt, aber kann ja noch werden.

dann sollte das hier funktioneren:

gekürzt

DOIF ([?Wetterstation:israining] eq "0" and ([?WetterProplanta:fc0_rain] <= 4 or [?WetterProplanta:fc0_chOfRainDay] <= 50) and ["BeregnungDOIF_NachSonneElevation:cmd_1"])

(Beregnung läuft los)
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: holle75 am 05 Juni 2018, 11:37:43
@Amenomade.

Vielen Dank für deine Mühe. Wie eben geschrieben hab auch ich es jetzt kapiert. Warum es so lange gedauert hat ... ich hoffe, ich hatte schlechte 24 Stunden.
Titel: Antw:Syntax Negierung von DOIF Fall in Klammer
Beitrag von: Per am 05 Juni 2018, 14:22:35
Zitat von: holle75 am 05 Juni 2018, 11:37:43
Warum es so lange gedauert hat...
Urlaubsreif? Willkommen im Club!