FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Torben80 am 12 Juli 2017, 22:47:59

Titel: event-min-interval und UserReadings
Beitrag von: Torben80 am 12 Juli 2017, 22:47:59
Moin, ich mal wieder.

Ich habe ein HTTPMOD-Device Sensoren, in dem ich per RegEx diverse Zustände meiner Öffnungskontakte abfrage. Wenn einer der Kontakte offen ist steht "Open" drin.

Nun habe ich aber ein Reading selber hinzugefügt über UserReadings, und zwar das Reading "Status".
Ich möchte nun dass auch wenn keine Events auftreten (httpmod alle 5 Sekunden und keine Fenster/Türen wurden geöffnet oder geschlossen) trotzdem das Reading "Status" ein Event auslösen lassen.

Also schnell ein "event-min-interval Status:10" hinzugefügt uuuuuund ....NICHTS.
Wenn ich ein  "event-min-interval Bad_Eg:10" anlege, dann läufts. Das löst er schön alle 10 Sekunden aus.

Hat jemand eine Idee? Ich habe aber auch komische Sachen immer ;-)

Internals:
   BUSY       0
   CHANGED
   DEF        http://BENUTZER:Passwort@192.168.11.65/action/sensorListGet 5
   Interval   5
   LASTSEND   1499891862.3791
   MainURL    http://BENUTZER:Passwort@192.168.11.65/action/sensorListGet
   ModuleVersion 3.3.11 - 8.5.2017
   NAME       Sensoren
   NR         29
   STATE      Close
   TRIGGERTIME 1499891867.37862
   TRIGGERTIME_FMT 2017-07-12 22:37:47
   TYPE       HTTPMOD
   addr       http://192.168.11.65:80
   auth       BENUTZER:Passwort
   buf        HTTP/1.0 200 OK

Server: GoAhead-Webs

Pragma: no-cache

Cache-control: no-cache

Expires: 0

Content-Type: application/json; charset=ISO-8859-1



/*-secure-
{ senrows : [
{no : "1", type : "Remote Controller", area : "1", zone : "1", name : "Benutzer", attr : "Personal Att", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "2", type : "Remote Keypad", area : "1", zone : "2", name : "Flur_unten", attr : "", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "3", type : "Door Contact", area : "1", zone : "3", name : "Haustuer", attr : "Entry", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "4", type : "BX15", area : "1", zone : "4", name : "Blinklicht", attr : "", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "5", type : "Door Contact", area : "1", zone : "5", name : "Kellertuer", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "6", type : "Door Contact", area : "1", zone : "6", name : "Esszimmer", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "7", type : "Door Contact", area : "1", zone : "7", name : "Wohnzimmer_DF_Rechts", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "8", type : "Door Contact", area : "1", zone : "8", name : "Wohnzimmer_DF_Links", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "9", type : "Door Contact", area : "1", zone : "9", name : "Terassentuer", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "10", type : "Door Contact", area : "1", zone : "10", name : "Fenster_Flur_EG", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "11", type : "Door Contact", area : "1", zone : "11", name : "Kueche", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"},
{no : "12", type : "Door Contact", area : "1", zone : "12", name : "Bad_EG", attr : "Burglar", cond : "", battery : "", tamp : "", bypass : "No"}]
}
*/
   code       200
   conn
   data
   displayurl http://BENUTZER:Passwort@192.168.11.65/action/sensorListGet
   header
   host       192.168.11.65
   httpheader HTTP/1.0 200 OK

Server: GoAhead-Webs

Pragma: no-cache

Cache-control: no-cache

Expires: 0

Content-Type: application/json; charset=ISO-8859-1
   httpversion 1.0
   hu_blocking 0
   hu_filecount 6214
   hu_portSfx
   ignoreredirects 0
   loglevel   4
   path       /action/sensorListGet
   protocol   http
   redirects  0
   timeout    2
   url        http://BENUTZER:Passwort@192.168.11.65/action/sensorListGet
   value      0
   Helper:
     Dblog:
       Haustuer:
         Logdb:
           TIME       1499877643.86662
           VALUE      Open
       Status:
         Logdb:
           TIME       1499889916.80152
           VALUE      Close
       Terassentuer:
         Logdb:
           TIME       1499888101.10098
           VALUE      Open
       Wohnzimmer_df_links:
         Logdb:
           TIME       1499888816.0992
           VALUE      Open
       State:
         Logdb:
           TIME       1499891277.37988
           VALUE      Kueche:
   QUEUE:
   Readings:
     2017-07-12 22:37:42   Bad_Eg
     2017-07-12 22:37:42   Esszimmer
     2017-07-12 22:37:42   Fenster_Flur_EG
     2017-07-12 22:37:42   Haustuer
     2017-07-12 22:37:42   Kellertuer
     2017-07-12 22:37:42   Kueche
     2017-07-12 22:27:57   Status          Close
     2017-07-12 22:37:42   Terassentuer
     2017-07-12 22:37:42   Wohnzimmer_DF_Links
     2017-07-12 22:37:42   Wohnzimmer_DF_Rechts
   Request:
     data
     header
     ignoreredirects 0
     retryCount 0
     type       update
     url        http://BENUTZER:Passwort@192.168.11.65/action/sensorListGet
     value      0
   Defptr:
     Readingbase:
       Bad_Eg     reading
       Esszimmer  reading
       Fenster_Flur_EG reading
       Haustuer   reading
       Kellertuer reading
       Kueche     reading
       Terassentuer reading
       Wohnzimmer_DF_Links reading
       Wohnzimmer_DF_Rechts reading
     Readingnum:
       Bad_Eg     12
       Esszimmer  06
       Fenster_Flur_EG 10
       Haustuer   03
       Kellertuer 05
       Kueche     11
       Terassentuer 09
       Wohnzimmer_DF_Links 08
       Wohnzimmer_DF_Rechts 07
     Readingoutdated:
     Requestreadings:
       Update:
         Bad_Eg     reading 12
         Esszimmer  reading 06
         Fenster_Flur_EG reading 10
         Haustuer   reading 03
         Kellertuer reading 05
         Kueche     reading 11
         Terassentuer reading 09
         Wohnzimmer_DF_Links reading 08
         Wohnzimmer_DF_Rechts reading 07
   Sslargs:
Attributes:
   devStateIcon Close:fts_window_2w Open:fts_window_2w_open_lr
   event-on-change-reading .*
   group      Zustände
   reading03Name Haustuer
   reading03Regex no : "3".*?cond : "([a-zA-Z]*)"
   reading05Name Kellertuer
   reading05Regex no : "5".*?cond : "([a-zA-Z]*)"
   reading06Name Esszimmer
   reading06Regex no : "6".*?cond : "([a-zA-Z]*)"
   reading07Name Wohnzimmer_DF_Rechts
   reading07Regex no : "7".*?cond : "([a-zA-Z]*)"
   reading08Name Wohnzimmer_DF_Links
   reading08Regex no : "8".*?cond : "([a-zA-Z]*)"
   reading09Name Terassentuer
   reading09Regex no : "9".*?cond : "([a-zA-Z]*)"
   reading10Name Fenster_Flur_EG
   reading10Regex no : "10".*?cond : "([a-zA-Z]*)"
   reading11Name Kueche
   reading11Regex no : "11".*?cond : "([a-zA-Z]*)"
   reading12Name Bad_Eg
   reading12Regex no : "12".*?cond : "([a-zA-Z]*)"
   room       Alarmanlage
   userReadings Status
   userattr   reading03Name reading03Regex reading05Name reading05Regex reading06Name reading06Regex reading07Name reading07Regex reading08Name reading08Regex reading09Name reading09Regex reading10Name reading10Regex reading11Name reading11Regex reading12Name reading12Regex
Titel: Antw:event-min-interval und UserReadings
Beitrag von: CoolTux am 12 Juli 2017, 23:12:45
Ein userReading wird immer nur dann erstellt wenn ein Event für das konfigurierte Reading oder wenn nicht anders eingestellt für irgendein Reading des Devices kommt. Es ist also wie eine Art Notify welches ein Reading im selbigen Device erstellt auf das getriggert wird wenn man so will.
Titel: Antw:event-min-interval und UserReadings
Beitrag von: Torben80 am 13 Juli 2017, 09:58:51
@CoolTux
Ich habe meine Medizin noch nicht genommen oder du bist gerade in der Matrix.
Selbst nach 3 x lesen habe ich es nicht verstanden :-)
Kannst du das bitte für doofe schreiben? War wahrscheinlich schon so geschrieben oder?
:'( :'( :'(

Gruß Torben
Titel: Antw:event-min-interval und UserReadings
Beitrag von: CoolTux am 13 Juli 2017, 10:02:45
Zitat
Nun habe ich aber ein Reading selber hinzugefügt über UserReadings, und zwar das Reading "Status".
Ich möchte nun dass auch wenn keine Events auftreten (httpmod alle 5 Sekunden und keine Fenster/Türen wurden geöffnet oder geschlossen) trotzdem das Reading "Status" ein Event auslösen lassen.

Geht nicht!!! Ohne Events für das Device hat ein Userreading keine Funktion  :)
Titel: Antw:event-min-interval und UserReadings
Beitrag von: frank am 13 Juli 2017, 11:41:28
grundsätzlich solltest du es hinbekommen können, da dein aktualisierungsintervall 5s beträgt.

du musst dann allerdings für mindestens ein reading bei jedem aktualisieren ein event erzeugen lassen. mit
event-on-change-reading .*
wird aber immer nur bei änderung irgendeines readings ein event erzeugt. du darfst dieses attribut also nicht für alle readings nutzen.

wenn du nun zusätzlich event-on-update für irgendein reading setzt, wird dann dieses reading bei jeder aktualisierung ein event erzeugen. event-on-update "überschreibt" also event-on-change. dieses reading nutzt du nun als "trigger" für das userreading. jetzt müsstest du für das userreading noch event-min-interval setzen, da es sonst auch nur bei änderung ein event erzeugen würde.
Titel: Antw:event-min-interval und UserReadings
Beitrag von: Torben80 am 15 Juli 2017, 14:55:34
Hm, da komme ich noch nicht ganz hinter.

Wenn ich mein Problem nocheinmal von GAAAAANZ vorne beschreiben darf:

Ich habe Fenster / Türkontakte ---> an Alarmanlage. Diese lese ich mit httpmod aus. Wenn einer auf ist, dann steht im String bei cond : "" Open drin.
Den komplette String lese ich aus und packe mir für jeden Kontakt ein den Inhalt in eine Reading (per RegEx). Wenn sich nun also der Inhalt eines der Readings ändert, wird ein Event erzeugt. (ist mir klar)

Nun habe ich eine DOIF gebaut, welches Linien heißt.
Das überprüft eugentlich nur ob einer der ganzen Kontakte "Open" ist und wenn ja, dann soll er von meinem eingangs gelistetem Device "Sensoren" den STATE per "setstate Sensoren Open" auf Open setzen.
Warum? Weil ich bei Sensoren mit dem "devStateIcon Close:fts_window_2w Open:fts_window_2w_open_lr" - Wert arbeite, um zu sehen ob ein Kontakt auf ist oder zu ist.

Hier erst einmal der Azszug aus meinem Linien-DoIf:
Internals:
   DEF        ([Sensoren:Bad_Eg] eq "Open" or [Sensoren:Esszimmer] eq "Open" or [Sensoren:Fenster_Flur_EG] eq "Open" or [Sensoren:Haustuer] eq "Open" or [Sensoren:Kueche] eq "Open" or [Sensoren:Terassentuer] eq "Open" or [Sensoren:Wohnzimmer_DF_Links] eq "Open" or [Sensoren:Wohnzimmer_DF_Rechts] eq "Open") (setstate Sensoren Open, setreading Sensoren Status Open) DOELSE (setstate Sensoren Close, setreading Sensoren Status Close)
   NAME       Linien
   NR         30
   NTFY_ORDER 50-Linien
   STATE      cmd_1
   TYPE       DOIF
   Helper:
     DBLOG:
       cmd:
         logdb:
           TIME       1500121843.25828
           VALUE      1
       cmd_event:
         logdb:
           TIME       1500121843.25828
           VALUE      Sensoren
       cmd_nr:
         logdb:
           TIME       1500121843.25828
           VALUE      1
       state:
         logdb:
           TIME       1500121843.25828
           VALUE      cmd_1
   READINGS:
     2017-07-15 14:30:43   Device          Sensoren
     2017-07-15 14:30:43   cmd             1
     2017-07-15 14:30:43   cmd_event       Sensoren
     2017-07-15 14:30:43   cmd_nr          1
     2017-07-15 14:30:43   e_Sensoren_Bad_Eg
     2017-07-15 14:30:43   e_Sensoren_Esszimmer
     2017-07-15 14:30:43   e_Sensoren_Fenster_Flur_EG
     2017-07-15 14:30:43   e_Sensoren_Haustuer
     2017-07-15 14:30:43   e_Sensoren_Kueche
     2017-07-15 14:30:43   e_Sensoren_Terassentuer Open
     2017-07-15 14:30:43   e_Sensoren_Wohnzimmer_DF_Links
     2017-07-15 14:30:43   e_Sensoren_Wohnzimmer_DF_Rechts
     2017-07-15 14:30:43   state           cmd_1
   condition:
     0          ReadingValDoIf($hash,'Sensoren','Bad_Eg') eq "Open" or ReadingValDoIf($hash,'Sensoren','Esszimmer') eq "Open" or ReadingValDoIf($hash,'Sensoren','Fenster_Flur_EG') eq "Open" or ReadingValDoIf($hash,'Sensoren','Haustuer') eq "Open" or ReadingValDoIf($hash,'Sensoren','Kueche') eq "Open" or ReadingValDoIf($hash,'Sensoren','Terassentuer') eq "Open" or ReadingValDoIf($hash,'Sensoren','Wohnzimmer_DF_Links') eq "Open" or ReadingValDoIf($hash,'Sensoren','Wohnzimmer_DF_Rechts') eq "Open"
   devices:
     0           Sensoren
     all         Sensoren
   do:
     0:
       0          setstate Sensoren Open, setreading Sensoren Status Open
     1:
       0          setstate Sensoren Close, setreading Sensoren Status Close
   helper:
     event      Terassentuer: Open
     globalinit 1
     last_timer 0
     sleeptimer -1
     timerdev   Sensoren
     timerevent Terassentuer: Open
     triggerDev Sensoren
     timerevents:
       Terassentuer: Open
     timereventsState:
       Terassentuer: Open
     triggerEvents:
       Terassentuer: Open
     triggerEventsState:
       Terassentuer: Open
   internals:
   itimer:
   readings:
     0           Sensoren:Bad_Eg Sensoren:Esszimmer Sensoren:Fenster_Flur_EG Sensoren:Haustuer Sensoren:Kueche Sensoren:Terassentuer Sensoren:Wohnzimmer_DF_Links Sensoren:Wohnzimmer_DF_Rechts
     all         Sensoren:Bad_Eg Sensoren:Esszimmer Sensoren:Fenster_Flur_EG Sensoren:Haustuer Sensoren:Kueche Sensoren:Terassentuer Sensoren:Wohnzimmer_DF_Links Sensoren:Wohnzimmer_DF_Rechts
   regexp:
     0:
     all:
   state:
     STATE:
   trigger:
Attributes:
   do         always
   room       Alarmanlage


Nun kam mein nächster Clou, alles über ESP8266 und NeoPixel anzeigen lassen.
Das NeoPixel-ESP Projekt läuft einwandfrei.

Ich habe mir also ein Notify gebaut (Ich weiss, Notify reagiert auf Events) der auf mein ACHTUNG DA IST ES UserReadings Status vom Device Sensoren reagiert und meine LEDs ansteuert.
Internals:
   DEF        Sensoren:Status:.* {if (ReadingsVal("Sensoren","Status",0) eq "Open") {fhem ("set LED_Rahmen pixel 1 50 0 0");} else {if (ReadingsVal("Sensoren","Status",0) eq "Close") {fhem ("set LED_Rahmen pixel 1 0 50 0");}}}
   NAME       led_alarm_kontaktzustand
   NOTIFYDEV  Sensoren
   NR         57
   NTFY_ORDER 50-led_alarm_kontaktzustand
   REGEXP     Sensoren:Status:.*
   STATE      2017-07-15 14:26:33
   TYPE       notify
   READINGS:
     2017-07-14 21:56:23   state           active
Attributes:
   room       Alarmanlage,LED-Rahmen


Jetzt das eigentlich Problem, mit Schilderung des Großen Ganzen.

HttpMod fragt Alamzentrale ab, alles ok und alles zu. Wenn Fenster geöffnet wird, und httpmod wieder die Zantrale abfragt, kommt irgendwo bei Bad_EG als Bsp. ein Open heraus. Event wird somit erzeugt, das DoIF Linien greift und setzt somit beim HttpMod das STATE auf Open und das UserReadings Status auch auf Open.
Das Notify schaut ob eine Änderung bei Sensoren:Status:.* kommt und ändert die LEDs.

Wenn nun aber der LED streifen gerade Offline war oder was auch immer und ich ihn dann erst online bringe sind alle LEDs aus und ich sehe nicht wie der Zustand meiner Alarmanlage bzw der Kontakte ist.

Daaaas ist mein großes Problem UND dass ich scheinbar keine Ahnung von Events usw habe, obwohl ich dachte, dass ich es langsam hätte ;-)

So, schönen Samstag ersteinmal nocht.

p.s. Ich kann bestimmt einige DoIfs und Notifies zusammenfassen, oder?

mfg Torben
Titel: Antw:event-min-interval und UserReadings
Beitrag von: amenomade am 15 Juli 2017, 21:09:58
Kannst dein led_alarm_kontaktzustand in ein "at +*00:00:10 " umwandeln. Somit wird jede 10. Sekunde den Zustand geprüft, egal ob Sensor eine Aktualisierung gekriegt hat, oder nicht.
Titel: Antw:event-min-interval und UserReadings
Beitrag von: Torben80 am 15 Juli 2017, 22:00:08
wie meinst du "umwandeln"?Sorry stehe gerade auf dem Schlauch da ich so viel durcheinander mache hier  :-(

mfg Torben
Titel: Antw:event-min-interval und UserReadings
Beitrag von: kumue am 15 Juli 2017, 22:09:37
mit "umwandeln" meint er, daß du aus dem notify "led_alarm_kontaktzustand" ein at machen kannst/sollst.
define led_alarm_kontaktzustand at +*00:00:10 <gewünschte Aktion>
Titel: Antw:event-min-interval und UserReadings
Beitrag von: Torben80 am 15 Juli 2017, 22:24:14
Werde ich morgen mal ausprobieren, vielen Dank erst einmal bis hier.

Schönen Abend und vielen Dank für Eure imm schnelle Antworten!

Gruß Torben
Titel: Antw:event-min-interval und UserReadings
Beitrag von: amenomade am 15 Juli 2017, 23:41:32
Tatsächlich. Ich meinte statt:
define led_alarm_kontaktzustand notify Sensoren:Status:.* {if (ReadingsVal("Sensoren","Status",0) eq "Open") {fhem ("set LED_Rahmen pixel 1 50 0 0");} else {if (ReadingsVal("Sensoren","Status",0) eq "Close") {fhem ("set LED_Rahmen pixel 1 0 50 0");}}} 

einfach
define led_alarm_kontaktzustand at +*00:00:10 {if (ReadingsVal("Sensoren","Status",0) eq "Open") {fhem ("set LED_Rahmen pixel 1 50 0 0");} else {if (ReadingsVal("Sensoren","Status",0) eq "Close") {fhem ("set LED_Rahmen pixel 1 0 50 0");}}}
Titel: Antw:event-min-interval und UserReadings
Beitrag von: Torben80 am 18 Juli 2017, 15:00:43
Huhu @amenomade!

Das war genau richtig! Ich lasse nun erstmal mein Notify drin, dass ändert ja bei READING-ON-CHANGE, gut so!
Aber dein AT war genau das, was ich gesucht habe, so kann ich jeglichen Fehler umgehen, da er nun trotzdem alle 30 Sek mal prüft ob nicht doch irgendwo etwas anders ist, als es sein sollte ;-)

Vielen Dank!