FHEM Forum

FHEM => Automatisierung => DOIF => Thema gestartet von: n0bbi am 06 Juli 2017, 14:09:18

Titel: DOIF in Verbindung mit struct
Beitrag von: n0bbi am 06 Juli 2017, 14:09:18
Hallo zusammen,

ich habe ein mir nicht erklärbares Phänomen und hoffe hier auf Hilfe.

Folgendes DOIF ist definiert:


DOIF ([Bewegungsmelder1:brightness] > [rollosteuerung:beschattung_brightness_grenzwert] and                                                          # Bestimmter Helligkeitswert überschritten?
[Sensor.Wohnzimmer:temperature] > [rollosteuerung:beschattung_temp_grenzwert] and                                                                      # Wohnzimmertemperatur über einem Schwellwert
[str_handy] eq "absent" and                                                                                                                                                               # Niemand mehr daheim?
[EG.rollo.seite] eq "oben" and                                                                                                                                                             # Sind die Rollos ganz oben?
[rollosteuerung:beschattung] eq "an")                                                                                                                                                 # Ist die Automatik an?
   (set EG.rollo.seite 30, setreading EG.rollo.seite_beschattung beschattung aktiv, set telebot message Beschattung: Rollos runter)         # Wenn alles erfüllt ist, wird beschattet

DOELSEIF (([Bewegungsmelder1:brightness] < [rollosteuerung:beschattung_brightness_grenzwert] or
[Sensor.Wohnzimmer:temperature] < [rollosteuerung:beschattung_temp_grenzwert]) and
[str_handy] eq "absent" and [EG.rollo.seite_beschattung:beschattung] eq "aktiv")
   (set EG.rollo.seite 100, setreading EG.rollo.seite_beschattung beschattung inaktiv)

DOELSEIF ([str_handy] eq "present" and
[EG.rollo.seite_beschattung:beschattung] eq "aktiv")
   (set EG.rollo.seite 100, setreading EG.rollo.seite_beschattung beschattung inaktiv)


Mein Problem ist aktuell die erste DOIF-Bedingung, da die Beschattung teilweise einsetzt, obwohl jemand zuhause ist. Wenn das passiert, führe ich im struct "str_handy" einen Statusrequest durch und die Rollos gehen wie von Zauberhand nach oben. Im Struct selber ändert sich nichts, der Status ist vor dem Statusrequest und danach auf "present".

Hier ein List vom struct:

Internals:
   ATTR       str_handy
   CHANGEDCNT 239
   DEF        str_handy ????_presence ????_presence ????_presence ????_presence ????_presence
   NAME       str_handy
   NR         72
   NTFY_ORDER 50-str_handy
   STATE      present
   TYPE       structure
   Content:
     ????_presence absent
     ????_presence present
     ????_presence absent
     ????_presence absent
     ????_presence absent
   Readings:
     2017-07-06 14:03:08   LastDevice      ????_presence
     2017-07-06 14:03:08   LastDevice_Abs  ????_presence
     2017-07-06 14:03:08   state           present
Attributes:
   alias      Alle Handys
   clientstate_behavior relative
   clientstate_priority present absent
   devStateIcon present:rc_GREEN absent:rc_RED
   evaluateSetResult 1
   event-on-change-reading .*
   group      Anwesend
   room       Übersicht

(Die Namen habe ich unkenntlich gemacht :))

Den Parameter evaluateSetResult habe ich testweise auf 1 und 0 gesetzt. Das hat keinen Unterschied gemacht.

Kann mir hier jemand auf die Sprünge helfen?

Vielen Dank!
Titel: Antw:DOIF in Verbindung mit struct
Beitrag von: CoolTux am 06 Juli 2017, 14:26:34
Interessant wäre ein list kurz nach der Beschatungsfahrt obwohl jemand zu Hause ist.
Titel: Antw:DOIF in Verbindung mit struct
Beitrag von: n0bbi am 06 Juli 2017, 14:31:33
Sobald das der Fall ist, werde ich den List hier posten.
Titel: Antw:DOIF in Verbindung mit struct
Beitrag von: Otto123 am 06 Juli 2017, 14:53:44
Hi,

klingt danach, dass Deine logische Abfolge nicht stimmt und Du einen erneuten Event auslösen musst.

setreading EG.rollo.seite_beschattung beschattung ... wird in den Zweigen überall gesetzt und abgefragt, dass passt eventuell nicht wenn der erste present kommt.
DOIF arbeitet alle Zweige von vorn nach hinten durch wenn ein Event von einer Teilbedingung kommt. Wenn ein Zweig stimmt ist für diesen Event erstmal Schluss. So habe ich das zumindest verstanden, kann sein es stimmt nicht.

Gruß Otto
Titel: Antw:DOIF in Verbindung mit struct
Beitrag von: CoolTux am 06 Juli 2017, 14:57:25
Zitat von: Otto123 am 06 Juli 2017, 14:53:44
Hi,

klingt danach, dass Deine logische Abfolge nicht stimmt und Du einen erneuten Event auslösen musst.

setreading EG.rollo.seite_beschattung beschattung ... wird in den Zweigen überall gesetzt und abgefragt, dass passt eventuell nicht wenn der erste present kommt.
DOIF arbeitet alle Zweige von vorn nach hinten durch wenn ein Event von einer Teilbedingung kommt. Wenn ein Zweig stimmt ist für diesen Event erstmal Schluss. So habe ich das zumindest verstanden, kann sein es stimmt nicht.

Gruß Otto

Macht auch rein logisch keinen Sinn darauf zu triggern. Ich würde hier lediglich eine Abfrage, also ? davor, machen.
Titel: Antw:DOIF in Verbindung mit struct
Beitrag von: n0bbi am 06 Juli 2017, 16:16:39
Zitat von: CoolTux am 06 Juli 2017, 14:57:25
Macht auch rein logisch keinen Sinn darauf zu triggern. Ich würde hier lediglich eine Abfrage, also ? davor, machen.

Danke für den Hinweis, du hast natürlich Recht.

Aber mein Problem liegt ja vermutlich eher beim structure, weil die Bedingung ja eigentlich nicht wahr sein dürfte. Ich hoffe jetzt das passiert bald wieder, damit ich den List hier posten kann. Manchmal läuft es aber auch eine ganze Woche fehlerfrei...