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
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.
@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
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 :)
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.
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
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.
wie meinst du "umwandeln"?Sorry stehe gerade auf dem Schlauch da ich so viel durcheinander mache hier :-(
mfg Torben
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>
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
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");}}}
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!