[gelöst] DOIF mit Trigger auf Aktualisierung des Zeitstempels

Begonnen von Heimweh, 16 Oktober 2020, 14:55:50

Vorheriges Thema - Nächstes Thema

Heimweh

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....
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

MadMax-FHEM

#1
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Heimweh

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
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

MadMax-FHEM

#3
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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

Heimweh

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

RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,

MadMax-FHEM

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
FHEM PI3B+ Bullseye: HM-CFG-USB, 40x HM, ZWave-USB, 13x ZWave, EnOcean-PI, 15x EnOcean, HUE/deCONZ, CO2, ESP-Multisensor, Shelly, alexa-fhem, ...
FHEM PI2 Buster: HM-CFG-USB, 25x HM, ZWave-USB, 4x ZWave, EnOcean-PI, 3x EnOcean, Shelly, ha-bridge, ...
FHEM PI3 Buster (Test)

amenomade

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
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

Heimweh

Zitat
define SendePicOG DOIF ([Cam1:"last"]) (set Telegram...)

das wars :) vielen Dank!

Vielen Dank auch an Dich Joachim!!!!
RaspberryPi, 8 x Intertechnosteckdosen, ETA PU15 über HTTPMOD, Youless Eneergiemonitor, 8 x Technoline Funk Temperatur / Feuchtesensoren über jeeLink, Fritzbox Anbindung, Homematic Rolladen Aktoren, MAX Heizkörperventile + Cube, SONOFF S20, S26, POW, 4ch, OWD, Alexa-fhem, enOcean / Eltako,