DOIF in Verbindung mit struct

Begonnen von n0bbi, 06 Juli 2017, 14:09:18

Vorheriges Thema - Nächstes Thema

n0bbi

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!

CoolTux

Interessant wäre ein list kurz nach der Beschatungsfahrt obwohl jemand zu Hause ist.
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

n0bbi

Sobald das der Fall ist, werde ich den List hier posten.

Otto123

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
Viele Grüße aus Leipzig  ⇉  nächster Stammtisch an der Lindennaundorfer Mühle
RaspberryPi B B+ B2 B3 B3+ ZeroW,HMLAN,HMUART,Homematic,Fritz!Box 7590,WRT3200ACS-OpenWrt,Sonos,VU+,Arduino nano,ESP8266,MQTT,Zigbee,deconz

CoolTux

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

n0bbi

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