DOIF schaltet nicht / Bestimmt nur ein Gedankenfehler

Begonnen von Thoffi1978, 24 Februar 2018, 07:00:56

Vorheriges Thema - Nächstes Thema

Thoffi1978

Hallo,

ich habe hier ein DOIF welches leider nicht schaltet.

([06:00-21:45] and [handy_da] eq "present" and [Helligkeit:state] < 25)(set WZ_Licht on)
DOELSEIF
([handy_da] eq "absent" or [Helligkeit:state] > 50)(set WZ_Licht off)


Ich denke ein DO Always benötige ich, da ja bei Dunkel an und bei Hell an geschaltet wird.?

Anbei die List:
Internals:
   DEF        ([06:00-21:45] and [handy_da] eq "present" and [Helligkeit:state] < 25)(set WZ_Licht on)
DOELSEIF
([handy_da] eq "absent" or [Helligkeit:state] > 50)(set WZ_Licht off)
   NAME       di_handy_da
   NR         143
   NTFY_ORDER 50-di_handy_da
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-02-24 06:57:41   Device          Helligkeit
     2018-02-23 17:45:39   cmd             1
     2018-02-23 17:45:39   cmd_event       Helligkeit
     2018-02-23 17:45:39   cmd_nr          1
     2018-02-24 06:57:41   e_Helligkeit_state 0.6
     2018-02-23 21:51:35   e_handy_da_STATE present
     2018-02-23 06:43:18   mode            enabled
     2018-02-23 17:45:39   state           cmd_1
     2018-02-23 21:45:00   timer_01_c01    24.02.2018 06:00:00
     2018-02-23 21:45:00   timer_02_c01    24.02.2018 21:45:00
     2018-02-23 16:49:18   wait_timer      no timer
   Regex:
   condition:
     0          DOIF_time($hash,0,1,$wday,$hms) and InternalDoIf($hash,'handy_da','STATE') eq "present" and ReadingValDoIf($hash,'Helligkeit','state') < 25
     1          InternalDoIf($hash,'handy_da','STATE') eq "absent" or ReadingValDoIf($hash,'Helligkeit','state') > 50
   days:
   devices:
     0           handy_da Helligkeit
     1           handy_da Helligkeit
     all         handy_da Helligkeit
   do:
     0:
       0          set WZ_Licht on
     1:
       0          set WZ_Licht off
     2:
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      0.6
     globalinit 1
     last_timer 2
     sleeptimer -1
     timerdev   Helligkeit
     timerevent 0.6
     triggerDev Helligkeit
     timerevents:
       0.6
     timereventsState:
       state: 0.6
     triggerEvents:
       0.6
     triggerEventsState:
       state: 0.6
   internals:
     0           handy_da:STATE
     1           handy_da:STATE
     all         handy_da:STATE
   interval:
     0          -1
     1          0
   itimer:
   localtime:
     0          1519448400
     1          1519505100
   readings:
     0           Helligkeit:state
     1           Helligkeit:state
     all         Helligkeit:state
   realtime:
     0          06:00:00
     1          21:45:00
   time:
     0          06:00:00
     1          21:45:00
   timeCond:
     0          0
     1          0
   timer:
     0          0
     1          0
   timers:
     0           0  1
   trigger:
   triggertime:
     1519505100:
       localtime  1519505100
       hash:
   uiState:
   uiTable:
Attributes:
   room       Steckdosen
   wait       0:500


Muss da doch ein Do always rein, oder habe ich was falsch gemacht?

Vielen Dank
Hoffi

CoolTux

Es hat doch geschalten. Zu mindest ist das DOIF im cmd1 und musste also WZ_Licht on geschalten haben.
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

Thoffi1978

Ja,Entschuldigung.

Es hat es gestern einnmal angeschalter. Aber bei "absent" nicht wieder aus, bzw. heute morgen nicht wieder an.

Hoffi

CoolTux

Dan mach dich mal absent und gib noch mal ein list vom DOIF
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

Otto123

Hallo Hoffi,

do always brauchst Du immer, wenn sich der Zustand des gesamten DOIF nicht ändert (CMD 1 ausgeführt) Du aber bei erneutem wahr werden der () eine erneute Ausführung wünschst.

Also wenn in deinem Fall der DOELSEIF Zweig nicht eintritt aber der DOIF Zweig wiederholt wird (und geschaltet werden soll) brauchst Du do always.

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

Thoffi1978

Ich glaube ich habe den Fehler gefunden.
Der "Fehler" wird durch ein anderes DOIF ausgelöst, weiß aber nicht wie ich das ändern kann.

Der State/Readings werden unterschiedlich angezeigt, bzw. aktualisiert.
Bei den Readings steht "on" und bei Probably associated with "off"

e_Bwm_WZ_state   on
Bwm_WZ   off    FS20

Anbei die List von DOIF:
Internals:
   DEF        ([Bwm_WZ:state] eq "on")(set WZ_Anwesend present)(set Bwm_WZ off)
DOELSE
(set WZ_Anwesend absent)
   NAME       di_BWM_WZ_FS20
   NR         390
   NTFY_ORDER 50-di_BWM_WZ_FS20
   STATE      cmd_1
   TYPE       DOIF
   READINGS:
     2018-02-25 09:47:30   Device          Bwm_WZ
     2018-02-25 09:56:30   cmd             1.2
     2018-02-25 09:56:30   cmd_event       Bwm_WZ
     2018-02-25 09:56:30   cmd_nr          1
     2018-02-25 09:56:30   cmd_seqnr       2
     2018-02-25 09:47:30   e_Bwm_WZ_state  on
     2018-02-23 06:41:17   mode            enabled
     2018-02-25 09:56:30   state           cmd_1
     2018-02-25 09:56:30   wait_timer      no timer
   Regex:
   condition:
     0          ReadingValDoIf($hash,'Bwm_WZ','state') eq "on"
   devices:
     0           Bwm_WZ
     all         Bwm_WZ
   do:
     0:
       0          set WZ_Anwesend present
       1          set Bwm_WZ off
     1:
       0          set WZ_Anwesend absent
   helper:
     DOIF_Readings_events
     DOIF_eventas
     event      on
     globalinit 1
     last_timer 0
     sleepdevice Bwm_WZ
     sleepsubtimer -1
     sleeptimer -1
     timerdev   Bwm_WZ
     timerevent on
     triggerDev Bwm_WZ
     timerevents:
       on
     timereventsState:
       state: on
     triggerEvents:
       on
     triggerEventsState:
       state: on
   internals:
   itimer:
   readings:
     0           Bwm_WZ:state
     all         Bwm_WZ:state
   trigger:
   uiState:
   uiTable:
Attributes:
   do         resetwait
   wait       0,540:120


List vom Bewegungsmelder:
Internals:
   BTN        00
   CUL_MSGCNT 529
   CUL_RAWMSG 810b04xx0101a001f52a000011
   CUL_RSSI   -81.5
   CUL_TIME   2018-02-25 09:47:30
   DEF        f52a 00
   IODev      CUL
   LASTInputDev CUL
   MSGCNT     529
   NAME       Bwm_WZ
   NR         271
   STATE      off
   TYPE       FS20
   XMIT       f52a
   CODE:
     1          f52a 00
   READINGS:
     2018-02-25 09:56:30   state           off
Attributes:
   IODev      CUL
   model      fs20pira
   room       FS20,Wohnzimmer


Hoffi

Otto123

Moin,

gibt es zwischen #5 und Deiner Ausgangsfrage außer Deinem Namen noch irgendeinen Zusammenhang?  :-[
Ich kann ihn nicht erkennen.

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

Thoffi1978

Hallo Otto,

In meiner ersten Frage hatte ich das Problem, dass das in #1 gelistete DOIF nicht richtig schaltet.

Die funktion mit Do Always habe ich ausprobiert und verstehe ich auch.

Ich habe dadurch den Fehler nicht gefunden und habe mich auf die Suche gemacht und bin dann in dem gelisteteten DOIF in #5 den Fehler gefunden.

Nun sehe ich den Zusammenhang des in #1 gelisteten in der falschen Übergabe des Readings in #5.
Erst wenn das Reading auf "off" steht wird der zweite Zweig (#5) ausgelöst. Leider wird das Reading nicht geändert und belibt auf "ON" stehen


Ich hoffe das ich jetzt  meine Gedanken wieder geben konnte und nichts vergessen habe.

Hoffi

Otto123

([06:00-21:45] and [handy_da] eq "present" and [Helligkeit:state] < 25)(set WZ_Licht on)
DOELSEIF
([handy_da] eq "absent" or [Helligkeit:state] > 50)(set WZ_Licht off)


([Bwm_WZ:state] eq "on")(set WZ_Anwesend present)(set Bwm_WZ off)
DOELSE
(set WZ_Anwesend absent)


Also die einzige Textkette die in Beiden vorkommt ist WZ aber in unterschiedlichsten Stringkombinationen. Tut mir leid, ich sehe es nicht....
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

Otto123

Ich verstehe das zweite DOIF so:
Wenn Bwm_WZ auf off geht wird sofort WZ_Anwesend  auf present gesetzt  nach 540 sec wird Bwm_WZ  auf off gesetzt.

Jeder andere Event von Bwm_WZ  setzt nach 120 sec den WZ_Anwesend  auf absent. Allerdings setzt jeder Event auch die Timer zurück.
wait       0,540:120

Was das wirklich für Auswirkungen hat kann ich nicht sagen. Insbesondere ist mir nicht klar was passiert wenn Du den Bwm_WZ von "aussen" setzt.

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

Thoffi1978

 ::)
Entschuldigung. Stimmt. Da war ich doch schneller mit dem Wiedergeben.

Durch das
set WZ_Anwesend present
wird dann das DOIF in #1 getritggert
([06:00-21:45] and [handy_da] eq "present" and [Helligkeit:state] < 25)(set WZ_Licht on)
DOELSEIF
([handy_da] eq "absent" or [Helligkeit:state] > 50)(set WZ_Licht off)


Der BWM_WZ sendet nur ein "on", kein "off",das ich dann von "aussen" zurücksetze.

Problem ist, so denke ich, das der State im DOIF anders ausgewertet wird, als es beim BWM_WZ angezeigt wird.
Das Reading "e_Bwm_WZ_state" scheint sich im DOIF nicht zu aktualisieren.
([Bwm_WZ:state] eq "on")(set WZ_Anwesend present)(set Bwm_WZ off)
DOELSE
(set WZ_Anwesend absent)



Otto123

#11
Zitatwird dann das DOIF in #1 getritggert
Keine Ahnung wie das gehen soll, aber Du wirst es wissen.
[Bwm_WZ:state] wertet das reading state aus, das muss mit dem Internal STATE nicht unbedingt etwas zu tun haben.
State gibt es genau genommen nicht  ;D

Zitat aus der DOIF Doku
ZitatEs kommt immer wieder vor, dass in der Definition des DOIF-Moduls angegebene Readings oder Status zur Laufzeit nicht existieren. Der Wert ist dann leer. Bei der Definition von Status oder Readings kann für diesen Fall ein Vorgabewert oder sogar eine Perlberechnung am Ende des Ausdrucks kommagetrennt angegeben werden.


Dann ändere den Trigger doch auf den Event ([Bwm_WZ:"on"]) allerdings musst Du im Eventmonitor den Event auch kontrollieren, ob wirklich so kommt.

Schau Dir das in der Doku genau an, damit Du weißt was ich meine. Das ist ausführlichst beschrieben!

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

Thoffi1978

Hallo Otto,

ich habe das einmal geändert,
doch auch so, wird das "off" nicht registriert.

e_Bwm_WZ_events   on
Probably associated with
Bwm_WZ off


Irgendwie verhext. Das ist der einzige BWM, mit dem ich das Problem gerade habe.

Vielen dank für deine Gedanken und Hilfe

Hoffi

Otto123

Mit solchen zerpflückten Schnipseln kann Dir keiner helfen  :o über was soll man da nachdenken? Ich weiß weder wie Dein DOIF gerade aussieht noch wie Deine Events aussehen.  :o
Also wie sehen die Events von Bwm_WZ aus? Eine komplette Folge von on bis off
Und ein list vom DOIF zu einem konkreten Zeitpunkt und dessen Erklärung (vorm Trigger oder nach dem Trigger oder am Ende wenn es "schief" lief)
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