Autor Thema: DOIF beachtet scheinbar event-on-change-reading nicht  (Gelesen 596 mal)

Offline Jensmaier2

  • Jr. Member
  • **
  • Beiträge: 93
Ich weiß jedoch nicht ob es an DOIF oder KNX liegt.

Ich habe meine Lüftungsanlage angelegt mit ein paar Readings (KNX Adressen) das KNX Modul von Wolf sendet scheinbar in unregelmäßigen abständen, wenn jedoch gleich alle Daten auf einmal.

hier mal das listing
Internals:
   DEF        3/7/3:dpt5:programm 3/7/7:dpt1:intensivlueftung 3/7/8:dpt9:temp_frischluft 3/7/9:dpt9:temp_abluft 3/7/10:dpt13:vol_frischluft 3/7/11:dpt13:vol_abluft 3/7/12:dpt1:bypass_offen 3/7/13:dpt1:bypass_geschlossen
   DEVNAME    kwl_wolf_cwl400
   IODev      KNX
   KNX_MSGCNT 30
   KNX_RAWMSG C01107w0370b00189110
   KNX_TIME   2017-06-11 14:51:28
   LASTInputDev KNX
   MSGCNT     30
   NAME       kwl_wolf_cwl400
   NR         42
   NTFY_ORDER 50-kwl_wolf_cwl400
   STATE      1610000
   TYPE       KNX
   Gaddr:
     1          3/7/3
     2          3/7/7
     3          3/7/8
     4          3/7/9
     5          3/7/10
     6          3/7/11
     7          3/7/12
     8          3/7/13
   Gcode:
     1          03703
     2          03707
     3          03708
     4          03709
     5          0370a
     6          0370b
     7          0370c
     8          0370d
   Model:
     1          dpt5
     2          dpt1
     3          dpt9
     4          dpt9
     5          dpt13
     6          dpt13
     7          dpt1
     8          dpt1
   Readings:
     2017-06-11 14:30:40   bypass_geschlossen-get on
     2017-06-11 14:30:40   bypass_offen-get off
     2017-06-11 14:30:36   intensivlueftung-get off
     2017-06-11 14:21:47   intensivlueftung-set off
     2017-06-11 14:51:28   last-sender     1/1/7
     2017-06-11 14:30:35   programm-get    1
     2017-06-11 14:23:16   programm-set    1
     2017-06-11 14:51:28   state           1610000
     2017-06-11 14:30:39   temp_abluft-get 24.30
     2017-06-11 14:41:41   temp_frischluft-get 26.70
     2017-06-11 14:51:28   vol_abluft-get  1610000
     2017-06-11 14:30:40   vol_frischluft-get 1590000
   Readingsname:
     1          programm
     2          intensivlueftung
     3          temp_frischluft
     4          temp_abluft
     5          vol_frischluft
     6          vol_abluft
     7          bypass_offen
     8          bypass_geschlossen
Attributes:
   IODev      KNX
   event-on-change-reading .*
   eventMap   /value 1 g1:160m3/value 3 g1:100m3/on g2:intensiv an/off g2:intensiv aus
   group      Lueftung
   room       1 Zentral
   webCmd     100m3:160m3:intensiv an:intensiv aus

leider erzeugt trotz gesetztem event-on-Change-reading.* das objekt trigger für die Readings

und das doif löst dann natürlich immer cmd_1 aus.

hier mal das doif
Internals:
   DEF        ([kwl_wolf_cwl400:temp_frischluft-get])(set alle_rtr_s2 string [kwl_wolf_cwl400:temp_frischluft-get]/ g1)
DOELSEIF ([kwl_wolf_cwl400:temp_abluft-get])(set alle_rtr_s2 string [kwl_wolf_cwl400:temp_abluft-get] g4)
DOELSEIF ([kwl_wolf_cwl400:vol_frischluft-get])(set alle_rtr_s2 string {([kwl_wolf_cwl400:vol_frischluft-get])/10000}/ g2)
DOELSEIF ([kwl_wolf_cwl400:vol_abluft-get])(set alle_rtr_s2 string {([kwl_wolf_cwl400:vol_abluft-get])/10000} g5)
   NAME       doif_kwl_frischluft_temp
   NR         44
   NTFY_ORDER 50-doif_kwl_frischluft_temp
   STATE      cmd_1
   TYPE       DOIF
   Readings:
     2017-06-11 14:51:28   Device          kwl_wolf_cwl400
     2017-06-11 14:51:28   cmd             1
     2017-06-11 14:51:28   cmd_event       kwl_wolf_cwl400
     2017-06-11 14:51:28   cmd_nr          1
     2017-06-11 14:51:28   e_kwl_wolf_cwl400_temp_abluft-get 24.30
     2017-06-11 14:51:28   e_kwl_wolf_cwl400_temp_frischluft-get 26.70
     2017-06-11 14:51:28   e_kwl_wolf_cwl400_vol_abluft-get 1610000
     2017-06-11 14:51:28   e_kwl_wolf_cwl400_vol_frischluft-get 1590000
     2017-06-11 14:51:28   state           cmd_1
   Condition:
     0          ReadingValDoIf($hash,'kwl_wolf_cwl400','temp_frischluft-get')
     1          ReadingValDoIf($hash,'kwl_wolf_cwl400','temp_abluft-get')
     2          ReadingValDoIf($hash,'kwl_wolf_cwl400','vol_frischluft-get')
     3          ReadingValDoIf($hash,'kwl_wolf_cwl400','vol_abluft-get')
   Devices:
     0           kwl_wolf_cwl400
     1           kwl_wolf_cwl400
     2           kwl_wolf_cwl400
     3           kwl_wolf_cwl400
     all         kwl_wolf_cwl400
   Do:
     0:
       0          set alle_rtr_s2 string [kwl_wolf_cwl400:temp_frischluft-get]/ g1
     1:
       0          set alle_rtr_s2 string [kwl_wolf_cwl400:temp_abluft-get] g4
     2:
       0          set alle_rtr_s2 string {([kwl_wolf_cwl400:vol_frischluft-get])/10000}/ g2
     3:
       0          set alle_rtr_s2 string {([kwl_wolf_cwl400:vol_abluft-get])/10000} g5
     4:
   Helper:
     event      vol_abluft-get: 1610000,1610000
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   kwl_wolf_cwl400
     timerevent vol_abluft-get: 1610000,1610000
     triggerDev kwl_wolf_cwl400
     timerevents:
       vol_abluft-get: 1610000
       1610000
     timereventsState:
       vol_abluft-get: 1610000
       state: 1610000
     triggerEvents:
       vol_abluft-get: 1610000
       1610000
     triggerEventsState:
       vol_abluft-get: 1610000
       state: 1610000
   Internals:
   Itimer:
   Readings:
     0           kwl_wolf_cwl400:temp_frischluft-get
     1           kwl_wolf_cwl400:temp_abluft-get
     2           kwl_wolf_cwl400:vol_frischluft-get
     3           kwl_wolf_cwl400:vol_abluft-get
     all         kwl_wolf_cwl400:temp_frischluft-get kwl_wolf_cwl400:temp_abluft-get kwl_wolf_cwl400:vol_frischluft-get kwl_wolf_cwl400:vol_abluft-get
   Regexp:
     0:
     All:
   State:
     State:
   Trigger:
Attributes:
   do         always
   group      Lueftung
   room       1 Zentral

zu erkennen ist das alle Reading im DOIF den Timestamp 2017-06-11 14:51:28 haben
jedoch nur das Reading vol_abluft-get  um 14:51:28 im objekt geupdatet wurde.

Puh das ist sogar kompliziert zu erklären :)

LG


Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #1 am: 11 Juni 2017, 16:50:27 »
Hi,

ganz unabhängig vom DOIF kannst Du klären ob dein kwl_wolf_cwl400 Events generiert oder nicht, quasi Dein event-on-change-reading überprüfen -> Eventmonitor.

Dein DOIF triggert nach meiner Meinung nicht auf den Event sondern auf die Zustandsänderung, ich habe keine Ahnung an welcher Stelle sich da DOIF einklinkt und eventuell doch getriggert wird obwohl nur der Zustand neu geschrieben wird und gar kein Event erzeugt wird. Aber das ist nur graue Theorie von mir und als Randbemerkung zu verstehen.
Du hast do always gesetzt, meines Erachtens brauchst Du das nicht, da Du ja mehrere Alterativen Zweige hast und Du eh bloß etwas auslösen willst wenn sich der Zustand ändert. Eventuell ist aber in den DOELSEIF Zweigen nicht alles berücksichtigt und Du musst noch einen DOELSE vorsehen.

Gruß Otto
« Letzte Änderung: 11 Juni 2017, 17:01:08 von Otto123 »
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10383
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #2 am: 11 Juni 2017, 16:59:18 »
Als erstes bitte einmal das do always weg. Es sei denn Du kannst das erklären.
Als nächstes zu Verständnis. In den meisten Modulen ist es so eingestellt das jedes setzen von Readings ein Event aus löst. Auf dieses Event können dann DOIF oder Notify triggern.
Damit nun nicht auf alles und jeden ein Event erzeugt wird, kann der User die Eventgenerierung eines Modules überschreiben. So kann er sagen generieren nur ein Event wenn sich der Wert des Readings geändert hat. Das machst du ja bereits.
Aber jeder Modulauthor kann auch bestimmen das der User sowas nicht darf. Daher Ottos Ansatz schaue ob und wenn ja was überhaupt an Events generiert wird. Eventmonitor!
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Offline Jensmaier2

  • Jr. Member
  • **
  • Beiträge: 93
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #3 am: 11 Juni 2017, 17:05:59 »
Schonmal danke für eure Hinweise

habe das do always entfernt und im Event Monitor geschaut was passiert:
2017-06-11 17:01:21 readingsGroup cwl400 kwl_wolf_cwl400.vol_frischluft-get: 1000000
 2017-06-11 17:01:21 KNX kwl_wolf_cwl400 vol_frischluft-get: 1000000
 2017-06-11 17:01:21 KNX kwl_wolf_cwl400 last-sender: 1/1/7
 2017-06-11 17:01:21 KNX kwl_wolf_cwl400 1000000
2017-06-11 17:01:21 readingsGroup cwl400 kwl_wolf_cwl400.vol_abluft-get: 990000
 2017-06-11 17:01:21 KNX kwl_wolf_cwl400 vol_abluft-get: 990000
 2017-06-11 17:01:21 KNX kwl_wolf_cwl400 990000
^^das sieht gut aus denn nur diese beiden Werte haben sich auch geändert.
Auch der Timestamp der Readings war und bleibt korrekt.

Leider beteht das Problem unverändert weiter!

Ich habe auch ein timestamp-on-change-reading .* versucht leider ändert auch das nichts.

Ich bin da ziemlich ratlos !?

Gruß
« Letzte Änderung: 11 Juni 2017, 17:11:44 von Jensmaier2 »

Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10383
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #4 am: 11 Juni 2017, 17:12:46 »
Ich glaube es Du verstehst nicht ganz.
Natürlich ändert sich der Timestamp der Readings, sie werden ja auch gesetzt, was richtig ist. Es wird halt nur kein Event ausgelöst bei einem event-on-change-reading

Wird wohl so eine DOIF Sache sein. Stell mal auf Event basiert um dein DOIF, ich denke mir daran liegt es.
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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Offline Otto123

  • Hero Member
  • *****
  • Beiträge: 6619
    • Otto's Technik Blog
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #5 am: 11 Juni 2017, 17:13:39 »
wenn die Events stimmen, dann versuche doch mal auf den Event und nicht auf den Status (Änderung) zu triggern.
Beispiel: anstatt
[kwl_wolf_cwl400:temp_frischluft-get] -> [kwl_wolf_cwl400:"temp_frischluft-get"]

Wenn ich das in der commandref richtig verstanden habe.  :-[

Um sicher zu gehen kannst Du Dir auch im Eventmonitor ein Beispiel DOIF generieren lassen.

Gruß Otto
Viele Grüße aus Leipzig
RaspberryPi,HMLAN,HMUART,Homematic,Fritz!Box 7490,Sonos,ET9200,Arduino nano,ESP8266

Offline Jensmaier2

  • Jr. Member
  • **
  • Beiträge: 93
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #6 am: 11 Juni 2017, 17:22:30 »
@CoolTux
bin nicht ganz sicher wie du das meinst also das im Eventmonitor "erscheinende" Readings geschrieben werden und einen neuen Timestamp bekommen ist klar aber warum bekommen alle Readings im DOIF einen neuen Timestamp (also auch nicht neu geschriebene)?

@Otto123 und CoolTux
Perfekt das funzt DANKE DANKE :)

würde mich mal interessieren was genau der unterschied ist zwischen den beiden Varianten??

Gruß



Offline CoolTux

  • Developer
  • Hero Member
  • ****
  • Beiträge: 10383
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #7 am: 11 Juni 2017, 17:33:17 »
Dann hatte ich dich falsch verstanden. Ich dachte du meinst Dein KNX Device und nicht DOIF.

Deine Version reagiert auf alles was irgendwie mit Readings und dem Device zu tun hat. Nicht auf Events sondern liest wohl direkt das Device aus. Dir fehlt noch ein Vergleich bei Deiner Abfrage was ungewöhnlich ist daher reagiert er auch auf alles und sofort.

Ottos Version reagiert nur auf Events. Ereignisgesteuert heißt das in der Commandref dref zu 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.me/MOldenburg
Mein GitHub: https://github.com/LeonGaultier

Offline Andi291

  • Developer
  • Sr. Member
  • ****
  • Beiträge: 853
Antw:DOIF beachtet scheinbar event-on-change-reading nicht
« Antwort #8 am: 11 Juni 2017, 19:25:19 »
Auch, wenn das Thema gelöst zu sein scheint - gibt es einen Grund, warum Du mit solch einer fetten Logik arbeitest und nicht auf Notify ausweichst?

Mit DoIF habe ich keine Erfahrung, aber mit Notify kann ich sehr feingranular steuern.