Ich habe schon intensiv hier im Forum gesucht aber komme nicht weiter... Ich habe ein notify was bei Änderung des Zeitstempels eines Readings auslöst
Cam1:last:.* set Telegram sendImage @#AlleBewohner /opt/fhem/www/snapshots/Cam1_snapshot.jpg
Das ganze möchte ich aber nun als Trigger für ein DOIF umsetzen. Ich habe bereits bei dem Device dessen Reading ich als Trigger brauche ein event-on-update Attribut gesetzt -
aber wie muss die DOIF Bedingung aussehen wenn ich nur die Aktualisierung des Zeitstempels als Auslöser brauche?
Das Device mit dem Reading (last) :
Internals:
AUTHORITY 192.168.178.101
DEF 192.168.178.101
FUUID 5e1824a7-f33f-55ed-ae56-33b839a0c4da8d44
NAME Cam1
NR 1175
SEQ 0
STATE last: 2020-10-16 14:19:35
TYPE IPCAM
READINGS:
2020-10-16 14:19:36 last Cam1_snapshot.jpg
2020-10-16 14:19:35 snapshot1 Cam1_snapshot_1.jpg
2020-10-16 14:19:36 snapshots 1
Attributes:
event-on-update-reading last:.*
path cgi-bin/api.cgi?cmd=Snap&channel=0&rs=wuuPhkmUCeI9WG7C&user=admin&password=Taubenhauch
room Kamera
snapshots 1
storage ./www/snapshots
Danke schonmal....
Warum willst du auf DOIF gehen, wenn das notify tut!?
Wenn ich es richtig verstehe: du willst, wenn sich Datum/Uhrzeit beim Reading "last" ändert getriggert werden!?
Das geht nicht (direkt)!
EDIT:
ZitatIch habe ein notify was bei Änderung des Zeitstempels eines Readings auslöst
ist somit unfug.
Bzw. gibt es ja wohl einen Event (Änderung des Readings "last") was dann eben auch Datum/Uhrzeit beim Reading "last" ändert.
Auf das Event kannst du triggern (tut doch dein notify schon!?) aber eben NICHT auf die Uhrzeitänderung, die ist nur Anzeige.
(Außer ich habe nicht verstanden was du willst)
Dein event-on-update-reading: das ist so Quatsch (denke ich)!
Was soll das deiner MEinung nach bewirken!?
Ohne event-on-change-reading gibt es doch sowieso Events bei JEDER Änderung/Aktualisierung.
Also brauchst du doch überhaupt kein event-on-update-reading...
EDIT: wenn es keinen Event gibt, wenn ein neues Bild erzeugt wird, dann muss da am Modul was geändert werden...
EDIT: lösche doch mal das event-on-update-reading Attribut (wenn dann müsste es eh nur "event-on-update-reading last" heißen nix mit Doppelpunkt, weil das Reading ja nicht last: heißt und .* auch nicht, es gibt ja keine weiteren last:123 oder last:XYZ Readings mehr oder!?). Und dann öffne den EventMonitor und erzeuge ein Bild. Da sollte dann ja der Event auftauchen. Den dann markieren und ein notify/DOIF erzeugen lassen -> fertig. https://wiki.fhem.de/wiki/Event_monitor
EDIT: du solltest hier https://wiki.fhem.de/wiki/Event-on-update-reading und die "verwandten" Attribute noch mal nachlesen... ;)
Gruß, Joachim
Hallo Joachim,
Ich habe 2 Klingeltaster an der Haustüre und dafür eine Kamera. Bisher war es so - wenn jemand geklingelt hat, habe ich in dem Moment wo der Taster gedrückt wird ein Foto
aus dem IPCAM Modul ausgelöst (Die Taster hab ich mit einem ESP abgefragt). Mit diesem DOIF (wenn Taste gedrückt schieße Foto und versende es mit Telegram) gab es aber durch Zeitverzögerungen durch das abspeichern des Fotos gab es immer wieder Probleme so dass das alte Foto verschickt wurde.
Ich habe es dann mit dem obenen gelisteten Notify hinbekommen. Heißt: Klingel gedrückt schieße Foto - und der Notify hat es dann verschickt wenn das neue Bild (mit geändertem Zeitstempel)
quasi fertig abgespeichert war.
Hat alles super funktioniert - jetzt soll aber eine Erweiterung her. Die 2 Klingeln gehören zu zwei verschiedenen Parteien im Haus. Wenn jemand Klingel 1 betätigt, soll das Foto nur an die Telegram Gruppe 1 verschickt werden. Bei Klingel 2 die Gruppe 2. Auch noch überschaubar - aber in den Gruppen sollen nur die Personen das Foto nur an die anwesenden Personen geschickt werden.
Zitat
Bzw. gibt es ja wohl einen Event (Änderung des Readings "last") was dann eben auch Datum/Uhrzeit beim Reading "last" ändert.
Auf das Event kannst du triggern (tut doch dein notify schon!?) aber eben NICHT auf die Uhrzeitänderung, die ist nur Anzeige.
Ja so ist es. Die Änderung des Readings "last" - der Wert "Cam1_snapshot.jpg" ändert sich nicht - sondern es aktualisiert sich und darauf möchte ich reagieren. So wie mein Notify.... Nur eben mit DOIF
Ich habe sehr lange versucht es nach vielen Beispielen hier im Forum hinzubasteln (notify - if / elsif - usw.) aber es will einfach nicht bzw. habe ich es nicht hinbekommen. Ich bin ein DOIF Anhänger und habe damit schon viele Erfahrungen sammeln dürfen - daher hätte ich es gerne mit DOIF umgesetzt. Mit Perlcodes komme ich einfach nicht klar.
Das event-on-change-reading hab ich hier aus dem Forum bei einem ähnlichen Fall gelesen... Ok hab ich gelöscht.
Meine Frage ist nun - wie muss genau diese Bedingung im DOIF aussehen ...
Das hier passiert im Event Monitor wenn ich manuell 2 Fotos schieße:
2020-10-16 16:21:33 IPCAM Cam1 last: Cam1_snapshot.jpg
2020-10-16 16:21:33 IPCAM Cam1 snapshots: 1
2020-10-16 16:21:48 IPCAM Cam1 last: Cam1_snapshot.jpg
2020-10-16 16:21:48 IPCAM Cam1 snapshots: 1
Anhand diesem vereinfachten Beispiel:
define SendePicOG DOIF ([Cam1:last] ??????) (set Telegram sendImage @#AlleBewohner /opt/fhem/www/snapshots/Cam1_snapshot.jpg)
Danke Dir schonmal
Mit DOIF bin ich raus...
Aber warum die Fragezeichen?
Hast du dir das DOIF vom Eventmonitor erzeugen lassen?
Verm. nicht, denn sonst wären keine Fragezeichen...
Aber es fehlt noch Info.
Z.B. lists von Klingel1 und Klingel2 und auch wie du Anwesenheit erkennst...
Evtl. kann ich dann was mit notify liefern oder jemand anders mit DOIF...
EDIT: ich glaube, dass wenn du alles was du geschildert hast umsetzen willst, wirst an Perl verm. eh nicht vorbeikommen (evtl. sogar gleich auf DOIF-Perl wechseln und dann ist zu notify ja nicht mehr viel Unterschied, wenn es eh nur einen Trigger gibt)...
Gruß, Joachim
P.S.: event-on-change-reading != event-on-update-reading
Hallo Joachim,
Die Fragezeichen hab ich rein gemacht um Dir zu zeigen das mir dieser Teil fehlt. Ich habe schon eine DOIF Lösung im Kopf, auch eine andere (Stümperhafte) Lösung
mit vielen Dummys als "Hilfsmerker".
Nachfolgend der letzte (noch nicht mit allen meinen Anforderungen wie ZB Trennung der Klingeln) notify Versuch - wenn Du mir sagen kannst was falsch ist dann würde ich weiter kommen und das ganze dann so aufbauen...
Cam1:last:.* IF ([rr_Claudia:presence] eq "present" and [Daniel:presence] eq "present")
(set Telegram sendImage @#Nelkenweg /opt/fhem/www/snapshots/Cam1_snapshot.jpg)
ELSIF ([rr_Claudia:presence] eq "absent" and [Daniel:presence] eq "present")
(set Telegram sendImage @Daniel /opt/fhem/www/snapshots/Cam1_snapshot.jpg)
ELSIF ([rr_Claudia:presence] eq "present" and [Daniel:presence] eq "absent")
(set Telegram sendImage @Claudia /opt/fhem/www/snapshots/Cam1_snapshot.jpg)
hier noch die Lists der Bewohner:
Internals:
DEF Bewohner
DURATIONTIMER 1602872992.45558
FUUID 5cfe2791-f33f-55ed-ef2f-b0c1babe56ad48c8
FVERSION 20_ROOMMATE.pm:0.195330/2019-06-02
NAME Daniel
NOTIFYDEV global,Daniel_wakeuptimer1,gTag.Daniel.dy
NR 726
NTFY_ORDER 50-Daniel
READY 1
RESIDENTGROUPS Bewohner
STATE zuhause
SUBTYPE adult
TYPE ROOMMATE
READINGS:
2020-10-16 16:20:50 durTimerAbsence 00:00:00
2020-10-16 16:20:50 durTimerAbsence_cr 0
2020-10-16 20:28:52 durTimerPresence 04:08:02
2020-10-16 20:28:52 durTimerPresence_cr 248
2019-06-21 07:31:07 durTimerSleep 00:00:00
2019-06-21 07:31:07 durTimerSleep_cr 0
2020-10-16 16:20:50 lastArrival 2020-10-16 16:20:50
2019-12-08 13:34:05 lastAwake 2019-12-08 13:34:05
2020-10-16 16:19:12 lastDeparture 2020-10-16 16:19:12
2020-10-16 16:20:50 lastDurAbsence 00:01:38
2020-10-16 16:20:50 lastDurAbsence_cr 2
2020-10-16 16:19:12 lastDurPresence 00:02:12
2020-10-16 16:19:12 lastDurPresence_cr 2
2019-12-08 13:34:05 lastDurSleep 00:00:02
2019-12-08 13:34:05 lastDurSleep_cr 0
2020-10-16 16:19:12 lastLocation home
2020-10-16 16:19:12 lastMood calm
2019-12-08 13:34:03 lastSleep 2019-12-08 13:34:03
2020-10-16 16:20:50 lastState absent
2020-10-16 16:20:50 location home
2020-10-16 16:20:50 mood calm
2019-06-14 08:55:03 nextWakeup OFF
2020-10-16 16:20:50 presence present
2020-10-16 16:20:50 state home
2019-06-10 11:49:39 wayhome 0
TIMER:
Daniel_DurationTimer:
HASH Daniel
MODIFIER DurationTimer
NAME Daniel_DurationTimer
Attributes:
alias Daniel
devStateIcon .*zuhause:user_available@green:absent@red .*anwesend:user_available@green:absent@red .*abwesend:user_away:home@red .*verreist:user_ext_away:home@green .*bettfertig:scene_toilet:asleep@green .*schlaeft:scene_sleeping:awoken@green .*schläft:scene_sleeping:awoken@green .*aufgestanden:scene_sleeping_alternat@green:home@green .*:user_unknown:home@green
event-on-change-reading .*
eventMap home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
group Daniel
icon people_sensor
room Residents
rr_lang DE
rr_presenceDevices gTag.Daniel.dy:STATE
rr_realname alias
rr_wakeupDevice Daniel_wakeuptimer1
sortby 1
webCmd state
widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist
Internals:
DEF Bewohner
DURATIONTIMER 1602873044.25682
FUUID 5d033a2b-f33f-55ed-d4a8-6d21f597a3ce1100
FVERSION 20_ROOMMATE.pm:0.195330/2019-06-02
NAME rr_Claudia
NOTIFYDEV global,rr_Claudia_wakeuptimer1,gTag.Claudia.dy
NR 822
NTFY_ORDER 50-rr_Claudia
READY 1
RESIDENTGROUPS Bewohner
STATE zuhause
SUBTYPE adult
TYPE ROOMMATE
READINGS:
2020-10-15 12:32:20 durTimerAbsence 00:00:00
2020-10-15 12:32:20 durTimerAbsence_cr 0
2020-10-16 20:29:44 durTimerPresence 31:57:24
2020-10-16 20:29:44 durTimerPresence_cr 1917
2019-07-14 23:51:21 durTimerSleep 00:00:00
2019-07-14 23:51:21 durTimerSleep_cr 0
2020-10-15 12:32:20 lastArrival 2020-10-15 12:32:20
2019-07-14 23:51:21 lastAwake 2019-07-14 23:51:21
2020-10-15 10:57:50 lastDeparture 2020-10-15 10:57:50
2020-10-15 12:32:20 lastDurAbsence 01:34:30
2020-10-15 12:32:20 lastDurAbsence_cr 94
2020-10-15 10:57:50 lastDurPresence 00:02:40
2020-10-15 10:57:50 lastDurPresence_cr 3
2019-07-14 23:51:21 lastDurSleep 03:40:17
2019-07-14 23:51:21 lastDurSleep_cr 220
2020-10-15 10:57:50 lastLocation home
2020-10-15 10:57:50 lastMood calm
2019-07-14 20:11:04 lastSleep 2019-07-14 20:11:04
2020-10-15 12:32:20 lastState absent
2019-07-18 10:42:00 lastWakeup 10:42
2019-07-18 10:42:00 lastWakeupDev rr_Claudia_wakeuptimer1
2020-10-15 12:32:20 location home
2020-10-15 12:32:20 mood calm
2019-08-02 20:30:15 nextWakeup OFF
2019-08-02 20:30:15 nextWakeupDev
2020-10-15 12:32:20 presence present
2020-10-15 12:32:20 state home
2019-07-18 10:42:00 wakeup 0
2019-06-14 08:09:48 wayhome 0
TIMER:
rr_Claudia_DurationTimer:
HASH rr_Claudia
MODIFIER DurationTimer
NAME rr_Claudia_DurationTimer
Attributes:
alias Claudia
comment Auto-created by Bewohner
devStateIcon .*zuhause:user_available@green:absent@red .*anwesend:user_available@green:absent@red .*abwesend:user_away:home@red .*verreist:user_ext_away:home@green .*bettfertig:scene_toilet:asleep@green .*schlaeft:scene_sleeping:awoken@green .*schläft:scene_sleeping:awoken@green .*aufgestanden:scene_sleeping_alternat@green:home@green .*:user_unknown:home@green
event-on-change-reading .*
eventMap home:zuhause absent:abwesend gone:verreist gotosleep:bettfertig asleep:schläft awoken:aufgestanden
group Claudia
icon people_sensor
room Residents
rr_lang DE
rr_presenceDevices gTag.Claudia.dy:STATE
rr_realname group
rr_wakeupDevice rr_Claudia_wakeuptimer1
sortby 1
webCmd state
widgetOverride state:zuhause,bettfertig,schläft,aufgestanden,abwesend,verreist
Wenn es dann später um die Trennung der Klingeln geht würde ich mein notify Gerüst ausbauen - zB wenn eine Klingel gedrückt wird einen Dummy setzen, den dann über das notify als Bedinung reinnehmen, und dann den dummy wieder löschen wenn die Telegram Nachricht rausgeht....
Danke für Deine Geduld und Hilfe
Das ist jetzt aber notify mit fhem-IF...
(quasi fast wie DOIF, ist auch [soweit ich weiß] der selbe Entwickler, daher kann ich da auch nicht wirklich helfen)
Die Fragezeichen müssten doch mit dem autom. vom Eventmonitor erstellten DOIF passend "befüllt" sein...
Ich kann dir nur sagen was falsch ist, wenn du sagst was nicht funktioniert, welche Fehler kommen (wenn), was im fhem-Log kommt (wenn)...
lists der Klingeln fehlen...
Du kannst auch die zuletzt gedrückte Klingel mittels ReadingsAge abfragen...
Also Zeitpunkt der letzten Auslösung...
Musst halt "schätzen" wie lang zwischen Klingel und Bild wobei du schon großzügig sein kannst, da es ja nur um das Separieren der beiden Klingeln geht...
Dummy ist unnötig, auch bei deiner geplanten Lösung.
Du kannst "Werte" auch mittels setreading in einem vorhandenen Device "speichern"...
Gruß, Joachim
Zitat von: Heimweh am 16 Oktober 2020, 16:23:46
Anhand diesem vereinfachten Beispiel:
define SendePicOG DOIF ([Cam1:last] ??????) (set Telegram sendImage @#AlleBewohner /opt/fhem/www/snapshots/Cam1_snapshot.jpg)
Danke Dir schonmal
define SendePicOG DOIF ([Cam1:"last"]) (set Telegram...)
https://fhem.de/commandref_DE.html#DOIF_Ereignissteuerung_ueber_Auswertung_von_Events
Zitat
define SendePicOG DOIF ([Cam1:"last"]) (set Telegram...)
das wars :) vielen Dank!
Vielen Dank auch an Dich Joachim!!!!