FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Dodger am 20 Dezember 2021, 07:38:20

Titel: OldReadings liefert keinen Wert
Beitrag von: Dodger am 20 Dezember 2021, 07:38:20
Hallo,

ich möchte gerne für eine Status-Abfrage mit dem Wert des vorherigen Readings arbeiten.
Dafür habe ich in meinem Device das Attribut "oldreading" mit dem gewünschten Reading gefüllt:
attr FritzBox_Status oldreadings tam1_newMsg

Meine Erwartung wäre nun, dass oldreadings quasi bei jedem lesen des Readings auf den vorherigen Wert gesetzt wird.
Wenn ich die Beispiele hier im Forum korrekt interpretiere, dann sollte in einem List des Devices ein Bereich "OldReadings" auftauchen.
Das passiert bei mir leider nicht.
Ich habe auch keine Fehler im Log-File.

Wird das OldReadings nur dann befüllt, wenn sich der Wert des zu "überwachenden" Attributes ändert?

Gruß
Dodger
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 20 Dezember 2021, 08:18:32
Wo ist das list des Devices?

Woher hast du das mit der Liste von OldReadings?

Du kannst mittels OldReadingsVal etc. den "alten Wert" abfragen...

EDIT:
Zitat von: commandref
oldreadings
Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. regex sind erlaubt. Für jedes Reading aus der Liste speichert FHEM intern den vorherigen Wert wenn sich das Reading ändert. Zum Zugriff auf die Werte gibt es die OldReadings.* Routinen.

Was willst du denn tun/erreichen?

Und es geht um Readings, nicht um Attribute!

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 20 Dezember 2021, 09:15:40
Die Info über das Verhalten habe ich aus diesem Post: https://forum.fhem.de/index.php?topic=91003.0
hier taucht das OldReadings im List des devices auf:
ZitatInternals:
   NAME       d_autoBliKitchen
   NR         134
   STATE      1
   TYPE       dummy
   OLDREADINGS:
     2018-09-09 22:08:28   state           1
   READINGS:
     2018-07-07 20:21:44   altitude_min    10
     2018-07-07 20:21:23   azimuth_max     280
Der Teil fehlt bei mir im list.
Allerdings wird mir bei Eingabe von
{OldReadingsNum('FritzBox_Status','tam1_newMsg',0)}
zumindest ein Rückgabewert geliefert.
Scheint also zu funktionieren, auch wenn das "Kapitel" "OLDREADINGS" nicht im List auftaucht.

Das List kann ich erst heute abend liefern, wenn ich wieder zu Hause bin.

Gruß
Dodger
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 20 Dezember 2021, 09:24:52
Zitat von: Dodger am 20 Dezember 2021, 09:15:40
Die Info über das Verhalten habe ich aus diesem Post: https://forum.fhem.de/index.php?topic=91003.0
hier taucht das OldReadings im List des devices auf:Der Teil fehlt bei mir im list.

...

Scheint also zu funktionieren, auch wenn das "Kapitel" "OLDREADINGS" nicht im List auftaucht.

Ich weiß immer noch nicht wovon du sprichst?

Es gibt keinen Eintrag von OldReadings im list...
...also auch in dem verlinkten Beitrag komnnte ich nichts finden.

Poste doch mal den Ausschnitt, den du meinst...


Zitat von: Dodger am 20 Dezember 2021, 09:15:40
Allerdings wird mir bei Eingabe von
{OldReadingsNum('FritzBox_Status','tam1_newMsg',0)}
zumindest ein Rückgabewert geliefert.

Mehr gibt es auch nicht...
Siehe commandref...
(bzw. kenne ich auch nicht mehr und ist bei mir auch nicht mehr vorhanden, also die Möglichkeit alte Werte abzufragen bzw. halt den letzten vor dem aktuellen / Achtung: wenn der letzte Wert "derselbe" war wie der aktuelle siehst du auch keinen Unterschied! -> event-on-change-reading usw.)

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 20 Dezember 2021, 19:06:12
Also, was ich gerne machen möchte:
In der Fritzbox gibt es einen Wert, der die Anzahl der neuen Nachrichten auf dem Anrufbeantworter anzeigt.
Ich hätte nun gerne eine Push- Nachricht,  sobald sich dieser Wert verändert.
Daher wollte ich den Wert des neuen Reading mit dem Oldrrading vergleichen und wenn die Änderung größer 1 ist die Nachricht versenden.
Leider enthält Oldreading offensichtlich nicht den Wert des vorherigen readings sondern den Wert vor der letzten Änderung.
Beispiel:
Reading1: 0
Old: 0
Reading2: 1
Old: 0
Reading3: 1
Old: 0 ----> hier hätte ich erwartet, dass Old auf 1 geht
Reading4: 2
Old: 1
Reading 1-4 sind das gleiche Reading nur andere Zeitpunkte.
Der Vergleich Reading > Old triggern nun leider bei 2, 3 und 4, sollte aber nur bei 2 und 4 ansprechen.
Jetzt verständlich?

Gruß
Dodger
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: juemuc am 20 Dezember 2021, 20:22:27
Hallo Dodger,

warum nutzt Du dafür nicht einfach ein notify oder doif?

Viele Grüße
Jürgen
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 20 Dezember 2021, 20:40:40
Zitat von: juemuc am 20 Dezember 2021, 20:22:27
Hallo Dodger,

warum nutzt Du dafür nicht einfach ein notify oder doif?

Viele Grüße
Jürgen

Ganz genau.
Dann noch event-on-change-reading und es kommt nur ein Event, wenn sich der Wert ändert (zumindest sollte das so)...

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 20 Dezember 2021, 20:43:33
Wie würde man das mit einem notify oder doif aufbauen?
Ich brauche doch den alten bzw. vorherigen Wert des readings um zu wissen, ob sich der Wert verändert hat....

event-on-change Reading gilt doch dann für das ganze device (Fritzbox), oder?
ZitatWird event-on-change-reading für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.
Ich habe aber noch mehr readings aus diesem Device  die ich für andere Zwecke nutze.
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 20 Dezember 2021, 20:47:18
Zitat von: Dodger am 20 Dezember 2021, 20:43:33
Wie würde man das mit einem notify oder doif aufbauen?

Wie immer: Eventmonitor aufmachen (Filter setzen), auf das passende Event warten oder provozieren, die Zeile markieren und dann notify/DOIF/FileLog/... anlegen lassen. Anpassen und fertig.
https://wiki.fhem.de/wiki/Event_monitor


Zitat von: Dodger am 20 Dezember 2021, 20:43:33
Ich brauche doch den alten bzw. vorherigen Wert des readings um zu wissen, ob sich der Wert verändert hat....
Und nein, genau dazu ist ja event-on-change-reading da...


Zitat von: Dodger am 20 Dezember 2021, 20:43:33
event-on-change Reading gilt doch dann für das ganze device (Fritzbox), oder?
Ich habe aber noch mehr readings aus diesem Device  die ich für andere Zwecke nutze.

Dann doch einfach mal in der commandref nachlesen!

Und es heißt event-on-change-READING und nicht event-on-change-DEVICE ;)

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 20 Dezember 2021, 21:00:59
Irgendwie steh ich auf dem Schlauch....
Ein Notify hab ich schon, Triggern ist das Reading tam1_newMsg.
Das bedeutet aber, dass das Notify mit jedem Lesevorgang der Fritzbox getriggert wird.
Wo setze ich das event-on-change?
Im Fritzbox device oder im Notify?
Das Notify soll eigentlich nur ausgeführt werden, wenn tam1_newMsg vom vorheriger Reading kleiner ist als vom aktuellen Reading...
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 20 Dezember 2021, 21:14:27
Das event-on-change nat. dort wo das Reading ist: commandref/Wiki lesen hilft...

Poste doch mal ein list von der FB und vom notify in code Tags...

Wie setzt du den Wert zurück?
Immer zurück auf 0?
Du kannst doch im notify den alten Wert abfragen, dann halt wieder das Attribut oldreadings und zur Abfrage OldReadingsVal/OldReadingsNum...

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 21 Dezember 2021, 07:18:29
hier die Lists von der Fritzbox (auf das Wesentliche reduziert) und dem Notify:
Internals:
   APICHECKED 1
   FUUID      619b7d3b-f33f-c598-4c64-8d454bd1a06d9cc2
   HOST       fritz.box
   INTERVAL   60
   LUAQUERY   1
   M3U_LOCAL  ./www/images/FritzBox_Status.m3u
   M3U_URL    http://192.168.1.86:8083/fhem/images/FritzBox_Status.m3u
   MODEL      FRITZ!Box 7590
   NAME       FritzBox_Status
   NR         122
   REMOTE     1
   SECPORT    49443
   STATE      WLAN: on gWLAN: off
   TELNET     0
   TR064      1
   TYPE       FRITZBOX
   WEBCM      0
   OLDREADINGS:
     2021-12-20 17:31:56   tam1_newMsg     0
   READINGS:
     2021-12-21 06:54:58   tam1            Anrufbeantworter
     2021-12-21 06:54:58   tam1_newMsg     1
     2021-12-21 06:54:58   tam1_oldMsg     16
     2021-12-21 06:54:58   tam1_state      on

   fhem:
     LOCAL      0
     definedHost undefined
     is_double_wlan 1
     lastHour   0
     modulVersion $Date: 2020-06-06 13:11:54 +0200 (Sat, 06 Jun 2020) $
     radioCount 40
     sid        513667ebc2e99113
     sidTime    1640066098
     610:
       brand      AVM
       id         1
       model      C4
       userId     1
   helper:
     TimerCmd   FritzBox_Status.Cmd
     TimerReadout FritzBox_Status.Readout
Attributes:
   INTERVAL   60
   boxUser    fritz9938
   oldreadings tam1_newMsg
   room       FritzBox


Internals:
   CFGFN     
   DEF        FritzBox_Status:tam1_newMsg:.* {if($EVTPART1 > OldReadingsNum('FritzBox_Status','tam1_newMsg', 0))
{fhem("set Push_Message message " .strftime("%H:%M",localtime). ": Neue Nachricht auf dem Anrufbeantworter | Telefon | Handy");
}}
   FUUID      61be40a1-f33f-c598-cc93-c431abb3730c5ba9
   NAME       push_AB
   NOTIFYDEV  FritzBox_Status
   NR         129222
   NTFY_ORDER 50-FritzBox_Status_notify_1
   REGEXP     FritzBox_Status:tam1_newMsg:.*
   STATE      inactive
   TRIGGERTIME 1640018276.31466
   TYPE       notify
   READINGS:
     2021-12-20 17:38:45   state           inactive
     2021-12-20 17:37:56   triggeredByDev  FritzBox_Status
     2021-12-20 17:37:56   triggeredByEvent tam1_newMsg: 1
Attributes:


natürlich steht das Notify auf "inactive" weil es ja nicht funktioniert.

Nochmal zum zeitlichen Ablauf:
die Readings in der FB werden alle 60 Sekunden aktualisiert. Aus diesen Readings werden mehrere Zustände abgeleitet (z.B. Anwesenheit über MAC Adressen).
Das Reading "tam_newMsg" gibt die Anzahl der neuen Meldungen auf dem Anrufbeantworter wieder.
Wenn dort neue Nachrichten dazukommen, möchte ich eine Push-Message bekommen.
Ob neue NAchrichten dazugekommen sind, kann man ermitteln indem man prüft, ob der neue Wert größer ist als der alte.

Das Problem mit OldReadings:
der Wert wird nicht mit jedem Auslesen (60s) aktualisiert sondern nur, wenn sich das echte Reading ändert.
Somit schlägt die Prüfung im Notify alle 60s an, da OldReading auf 0 steht und Reading auf 1.

Gruß
Dodger
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 07:30:46
in der Fritzbox fehlt schon mal
attr FritzBox_Status event-on-change-reading tam1_newMsg

Im notify darauf reagieren.
Dort das oldreading abfragen und mit dem aktuellen Wert vergleichen.
Wenn aktuell größer als old, dann versende Deine Nachricht.

Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 21 Dezember 2021, 07:32:38
wie schon gesagt:
ZitatWird event-on-change-reading für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.

Ich brauche aber auch die anderen Readings, weil die auch notifys auslösen.
Die würden ja dann nicht mehr funktionieren, da keine Events mehr ausgelöst werden...
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 21 Dezember 2021, 08:15:58
ich habe mir jetzt über ein Dummy-device geholfen.
Finde ich zwar hässlich, funktioniert aber:
FritzBox_Status:tam1_newMsg:.* {if($EVTPART1 > ReadingsNum('tam1_newMsg_old','state', 0))
{fhem("set Push_Message message " .strftime("%H:%M",localtime). ": Neue Nachricht auf dem Anrufbeantworter | Telefon | Handy");
fhem("set tam1_newMsg_old $EVTPART1")}
else
{fhem("set tam1_newMsg_old $EVTPART1")}}
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 09:10:55
Zitat von: Dodger am 21 Dezember 2021, 07:32:38
wie schon gesagt:
Ich brauche aber auch die anderen Readings, weil die auch notifys auslösen.
Die würden ja dann nicht mehr funktionieren, da keine Events mehr ausgelöst werden...

Was hindert Dich daran, die anderen notwqendigen Readings auch anzufügen?
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 21 Dezember 2021, 09:33:43
Zitat von: rabehd am 21 Dezember 2021, 09:10:55
Was hindert Dich daran, die anderen notwqendigen Readings auch anzufügen?

Exakt!

Einfach mal damit beschäftigen.
Es gibt ja auch noch "verwandte": event-on-update usw.

Klar, wenn öfter ein Event kommt, dann nimmt OldReading nat. den Wert an und wenn sich der nicht (im Wert) geändert hat, dann "siehst" du auch keinen Unterschied...

Hatte ich aber ja schon geschrieben...

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 21 Dezember 2021, 09:36:21
wenn ich das event-on-change-reading richtig verstanden habe, dann gilt doch folgendes:
event-on-change-reading: Reading1, Reading2
Zeit: 1
Device:Reading1: 0
Device:Reading2: 0
Device:Reading3: 0

Zeit: 2
Device:Reading1: 0
Device:Reading2: 0
Device:Reading3: 0
-> keine Auslösung eines Events

Zeit: 3
Device:Reading1: 0
Device:Reading2: 0
Device:Reading3: 1
-> keine Auslösung eines Events, da Reading3 nicht in der event-on-change-reading Liste steht

Zeit: 3
Device:Reading1: 0
Device:Reading2: 1
Device:Reading3: 1
-> Auslösung eines Events. Alle notify die auf Device:Reading* triggern werden ausgelöst. Auch, wenn sich Reading1 und Reading3 nicht geändert haben

oder verstehe ich das falsch?

Gruß
Dodger
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 21 Dezember 2021, 09:39:29
Wie geschrieben: entweder mehr in event-on-change aufnehmen oder mit den anderen event-on-... arbeiten...

Was übersichtlicher etc. ist musst du entscheiden, weil (noch) keiner außer dir weiß welche Events du wann/wie oft wozu etc. (noch) brauchst...

Aber: ich wiederhole mich...

Gruß, Joachim

Kann man alles nachlesen und auch ausprobieten, es gibt ja den Dventmonitor...

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 21 Dezember 2021, 09:47:29
nochmal an meinem Beispiel mit OldReadings mit zeitlichem Verlauf:
OLDREADINGS:
    2021-12-21 08:00:00   tam1_newMsg     0
READINGS:
   2021-12-21 08:00:00   tam1_newMsg     0
   
OLDREADINGS:
    2021-12-21 08:01:00   tam1_newMsg     0
READINGS:
   2021-12-21 08:01:00   tam1_newMsg     1

OLDREADINGS:
    2021-12-21 08:02:00   tam1_newMsg     0
READINGS:
   2021-12-21 08:02:00   tam1_newMsg     1

OLDREADINGS:
    2021-12-21 08:03:00   tam1_newMsg     0
READINGS:
   2021-12-21 08:03:00   tam1_newMsg     1

OLDREADINGS:
    2021-12-21 08:04:00   tam1_newMsg     1
READINGS:
   2021-12-21 08:04:00   tam1_newMsg     2

OldReading wird nur aktualisiert, wenn sich der Readings Wert ändert.

Das Notify prüft aber, ob Readings > OldReadings ist.
Und somit würde es auch bei 08:02 und 08:03 auslösen, was es aber nicht soll.

Meine Erwartung von OldReadings wäre gewesen, dass es immer den Wert der Auslesung [n-1] enthält.
Damit würde der zeitliche Verlauf so aussehen:
OLDREADINGS:
    2021-12-21 08:00:00   tam1_newMsg     0
READINGS:
   2021-12-21 08:00:00   tam1_newMsg     0
   
OLDREADINGS:
    2021-12-21 08:01:00   tam1_newMsg     0
READINGS:
   2021-12-21 08:01:00   tam1_newMsg     1

OLDREADINGS:
    2021-12-21 08:02:00   tam1_newMsg     1
READINGS:
   2021-12-21 08:02:00   tam1_newMsg     1

OLDREADINGS:
    2021-12-21 08:03:00   tam1_newMsg     1
READINGS:
   2021-12-21 08:03:00   tam1_newMsg     1

OLDREADINGS:
    2021-12-21 08:04:00   tam1_newMsg     1
READINGS:
   2021-12-21 08:04:00   tam1_newMsg     2

und die Bedingung wäre nur bei dem tatsächlichen Wechsel des Readings wahr.
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 09:48:08
ZitatZeit: 3
Device:Reading1: 0
Device:Reading2: 1
Device:Reading3: 1
-> Auslösung eines Events. Alle notify die auf Device:Reading* triggern werden ausgelöst. Auch, wenn sich Reading1 und Reading3 nicht geändert haben

Falsch! Weißt Du überhaupt was ein Event ist?
Es wird das Event für/mit Reading2 (nach Deiner Konfiguration) ausgelöst.

Mach Dir ein Dummy mit mehreren Readings. Öffne in einem Fenster den EventMonitor mit Filter auf den Dummy. In einem anderen Fenster änderst Du Readings und event-on.* und dann beobachtest Du mal was im Eventmonitor passiert.
...
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 09:51:24
ZitatUnd somit würde es auch bei 08:02 und 08:03 auslösen, was es aber nicht soll.
Nur wenn Du die Bedingung so gesetzt hast. Und selbst wenn, wie wäre es mit einem IF im notify?
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 21 Dezember 2021, 09:53:01
@Dodger: wo hast du denn deine Beispielwerte her?

Tatsächlich Eventmonitor und notify? Oder wie/woher? event-on-change nun gesetzt oder nicht?

Und bitte: nimm code-Tags...

EDIT: du kannst auch erst mal im notify nur loggen welche Werte es gibt. Parallel dazu den Eventmonitor beobachten. Dann mal mit event-on-... "experimentieren" und bei Fragen/Unstimmigkeiten eben genau die Logausgaben und Eventmonitor posten inkl. der (jeweils) dazu passenden event-on- Attribute...

EDIT: es ist unabhängig von deinem aktuellen "Problem" eine gute Idee notify möglichst "genau" zu machen und Events wo möglich einzuschränken. Damit nimmst du "Last" vom System...

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Beta-User am 21 Dezember 2021, 09:57:39
Zitat von: rabehd am 21 Dezember 2021, 09:48:08
Mach Dir ein Dummy mit mehreren Readings.
Weg mit den dummy! Diese "Umpackerei" erhöht nur die Komplexität, und führt sonst zu nichts!

Vermutlich haben wir es hier mal wieder mit einem Reihenfolgeproblem zu tun, weil die "Event-Loop" bereits "vorbei" war, als was neues dazukam.

Ansonsten ist "FRITZBOX" uU. auch etwas "komisch", weil afaik "vorsorglich" alte Readings gelöscht werden.

Zitat von: rabehd am 21 Dezember 2021, 09:48:08
Weißt Du überhaupt was ein Event ist?
+1 für die Vermutung, dass hier wesentliche Teile des Grundverständnisses fehlen, wie FHEM "tickt".

Es bringt aber scheinbar nichts, wenn man den TE mit dem Hinweis auf den Event-Monitor "nervt"...
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 10:03:23
@Beta-User
Der Vorschlag mit dem Dummy war eigentlich nicht als Lösung gedacht, sondern um üver Events und event-on zu lernen. Hätte ich klarer formulieren müssen.
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Dodger am 21 Dezember 2021, 10:05:08
ZitatFalsch! Weißt Du überhaupt was ein Event ist?
Scheinbar nicht :-)
Ich hab nur das hier aus dem Wiki:
ZitatWird event-on-change-reading für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.

ZitatNur wenn Du die Bedingung so gesetzt hast. Und selbst wenn, wie wäre es mit einem IF im notify?
Und genau daran scheitere ich. Offensichtlich komme ich nicht darauf, wie die richtige Bedingung wäre.

Ich kann ja nochmal meinen Use-Case schildern und vielleicht schreibt jemand mal rein, wie er es gelöst hätte:
die FritzBox wird alle 60s ausgelesen.
Jedes Auslesen triggert mehrerer notify die z.B. basierend auf der MAC Adresse den Status der Bewohner anzeigen.
Das Reading "MAC-Adresse" ändert sich nicht, sondern ist einfach nicht vorhanden, sobald das Handy nicht im im WLAN ist.

Jetzt möchte ich gerne eine Info haben, wenn auf dem Anrufbeantworter eine neue Nachricht eintrudelt.
Dafür gibt es ein Reading aus der FB, das die Anzahl der neuen Nachrichten enthält.
Dieses Reading wird alle 60s aktualisiert. Es enthält ganz oft den gleichen Wert (so viele Anrufe bekommen wir ja nicht :-))
Nur wenn der Wert nach oben geht, soll eine Push-Nachricht versendet werden.

Wie würde euer Code dazu aussehen?

Mein Verständnis: ein Event ist ein System-Ereignis, welches alle Elementen des Systems signalisiert:"hier ist etwas passiert".
Das event-on-change-reading würde z.B. sagen:"Achtung an alle System-Teilnehmer: in diesem Gerät hier hat eine Änderung stattgefunden".
Und alle System-Teilnehmer, die etwas mit dem Gerät zu tun haben, würden anfangen ihren Code abzuarbeiten.
Wenn ich mehrere Reading in event-on-change-reading aufnehme, dann kommt die genannte Meldung immer dann, wenn sich irgendeines der Readings ändert.

Das Problem ist nun: der Entfall der MAC Adressen würde ja kein event-on... triggern, oder?
Also würden die angeschlossenen Notify, die nach jedem read-out der FB getriggert werden um den Status der Adressen zu evaluieren nur noch starten, wenn ich einen neuen Anruf auf dem AB habe.
Fände ich suboptimal :-)
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Beta-User am 21 Dezember 2021, 10:10:15
Das bezog sich tendenziell eher auf diesen Post:
Zitat von: Dodger am 21 Dezember 2021, 08:15:58
ich habe mir jetzt über ein Dummy-device geholfen.
Finde ich zwar hässlich, funktioniert aber:
FritzBox_Status:tam1_newMsg:.* {if($EVTPART1 > ReadingsNum('tam1_newMsg_old','state', 0))
{fhem("set Push_Message message " .strftime("%H:%M",localtime). ": Neue Nachricht auf dem Anrufbeantworter | Telefon | Handy");
fhem("set tam1_newMsg_old $EVTPART1")}
else
{fhem("set tam1_newMsg_old $EVTPART1")}}

Generell ist es aber so, dass kein Mensch durchblicken kann, wenn immer nur unvollständige Schnippsel geliefert werden (v.a. dann nicht, wenn der TE selbst keine Idee hat, wie die Zusammenhänge sind).

Zitat
Jedes Auslesen triggert mehrerer notify die z.B. basierend auf der MAC Adresse den Status der Bewohner anzeigen.
Das Reading "MAC-Adresse" ändert sich nicht, sondern ist einfach nicht vorhanden, sobald das Handy nicht im im WLAN ist.
Das kann man übrigens in ein notify zusammenfassen: https://forum.fhem.de/index.php/topic,123886.msg1192757.html#msg1192757 (https://forum.fhem.de/index.php/topic,123886.msg1192757.html#msg1192757)
Das erfasst auch "bin dann mal weg"...

ZitatWird event-on-change-reading für ein einzelnes Reading gesetzt, werden zunächst alle übrigen Readings nicht mehr protokolliert, erzeugen also keine Events mehr.
a) man kann mehrere angeben, und ggf. auch teilweise "wildcards" angeben.
b) es gibt "Wechselwirkungen" mit anderen Attributen aus der "eocr"-Familie (es sind 4, bitte _alle_ nachlesen!).
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: Beta-User am 21 Dezember 2021, 10:17:49
ZitatMein Verständnis: ein Event ist ein System-Ereignis, welches alle Elementen des Systems signalisiert:"hier ist etwas passiert".
Das event-on-change-reading würde z.B. sagen:"Achtung an alle System-Teilnehmer: in diesem Gerät hier hat eine Änderung stattgefunden".
Und alle System-Teilnehmer, die etwas mit dem Gerät zu tun haben, würden anfangen ihren Code abzuarbeiten.
Wenn ich mehrere Reading in event-on-change-reading aufnehme, dann kommt die genannte Meldung immer dann, wenn sich irgendeines der Readings ändert.
Jein.

a) Ein Event wird in der Regel durch die Module erzeugt. Es ist also die Entscheidung eines Maintainers, "die Allgemeinheit" zu informieren, dass etwas potentiell relevantes passiert ist.
b) "Event" ist eine Verkürzung. Tatsächlich kann eine "Event-Loop" aus vielen einzelnen solcher Meldungen bestehen. fhem.pl muss die alle abarbeiten, und zwar so, dass irgendwann auch der Ausgang erreicht wird => was "später" an einem bereits abgearbeiteten Device passiert, wird uU. nicht mehr von allen "Event-Handlern" berücksichtigt, weil die schon "durch" sind.
c) Mit den "eocr"-Attributen kann man die Entscheidung des Maintainers _ändern_, und Events (oder: einzelne Ereignisse aus dem Ereignis-Stapel) unterdrücken bzw. einzelne Aspekte manipulieren (z.B. auch den timestamp).

Das ist alles nicht sonderlich einfach zu verstehen, aber es ist wichtig, das mal akkurat durchzuarbeiten, damit man versteht, warum solche Empfehlungen wie "alles auf .*" einerseits "hilfreich" sind und andererseits totaler Unsinn...

PS: das obige notify sollte ich mal umbenennen, das sollte durch die Namensgebung "ganz nach vorne" kommen und eher "00_rr_xn_MAC_Check" heißen...
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 21 Dezember 2021, 10:21:42
Zitat von: Beta-User am 21 Dezember 2021, 10:10:15
Generell ist es aber so, dass kein Mensch durchblicken kann, wenn immer nur unvollständige Schnippsel geliefert werden (v.a. dann nicht, wenn der TE selbst keine Idee hat, wie die Zusammenhänge sind).

:)

Das habe ich auch schon x-mal "haben wollen" ;)

Und zwar nicht irgendwelche "Scheindaten", sondern tatsächliche Daten (Evtnmonitor, Log etc.).
Weil genau da würde man auch ein (evtl. wobei ich das [nun] auch vermute) "komisches" Verhalten des Moduls erkennen.
Und evtl. dann doch weiterhelfen kann (trotz "komischem" Verhalten)...

Zitat von: Beta-User am 21 Dezember 2021, 10:10:15
a) man kann mehrere angeben, und ggf. auch teilweise "wildcards" angeben.
b) es gibt "Wechselwirkungen" mit anderen Attributen aus der "eocr"-Familie (es sind 4, bitte _alle_ nachlesen!).

Da schreibe ich mich ja schon fusselig dran ;)

Aber vielleicht hilft es ja, wenn mehrere das schreiben...

Gruß, Joachim
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 10:23:31
Trotz anderer Reaktionen während meines Schreiben:

Fang doch nochmal von vorn an.
Nimm Dir Dein Fritzbox-Device und überlege welche Readings für Dich für weitere Routinen wichtig sind.
Willst Du nur auf Änderungen reagieren (ggf. loggen), dann event-on-change.
Willst Du auch auf Aktuallisierungenreagieren, dann auch event-on-update.

Dann schaue im EventMonitor, ob die Events der Readings dort alle zum richtigen Zeitpunkt erscheinen.

Dann gehe das Thema neu an.
Du willst auf eine Änderungen der Anzahl Nachrichten reagieren.
In der Reaktion (notify) prüfst Du ob es im Verhältnis zu Old eine Erhöhung gibt. Nur bei ja tust Du etwas.

Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: rabehd am 21 Dezember 2021, 10:28:47
ZitatMein Verständnis: ein Event ist ein System-Ereignis, welches alle Elementen des Systems signalisiert:"hier ist etwas passiert".
Das event-on-change-reading würde z.B. sagen:"Achtung an alle System-Teilnehmer: in diesem Gerät hier hat eine Änderung stattgefunden".

Falsch!
nicht "hier ist etwas passiert", sondern hier wurde das Reading geändert/aktualisiert!
Das ist aber gut im EventMonitor zu sehen. Ich würde auch sagen, wer ein notify über den EventMonitor erstellt, der sieht auch das die Reaktion nicht auf das Gerät passiert.
Titel: Antw:OldReadings liefert keinen Wert
Beitrag von: MadMax-FHEM am 21 Dezember 2021, 10:31:10
Zitat von: rabehd am 21 Dezember 2021, 10:23:31
Trotz anderer Reaktionen während meines Schreiben:

Fang doch nochmal von vorn an.
Nimm Dir Dein Fritzbox-Devie und überlege welche Readings für Dich für weitere Routinen wichtig sind.
Willst Du nur auf Änderungen reagieren (ggf. loggen), dann event-on-change.
Willst Du auch auf Aktualiiserungenreagieren, dann auch event-on-update.

Dann schaue im EventMonitor, ob die Events der Readings dort alle zum richtigen Zeitpunkt erscheinen.

Dann gehe das Thema neu an.
Du willst auf eine Änderungen der Anzahl Nachrichten reagieren.

Jep!


Zitat von: rabehd am 21 Dezember 2021, 10:23:31
In der Reaktion (notify) prüfst Du ob es im Verhältnis zu Old eine Erhöhung gibt. Nur bei ja tust Du etwas.

Das sollte zwar mit event-on-change-reading eigentlich nicht nötig sein (gut, um zu verhindern, dass bei einem Zurücksetzen auch eine Meldung kommt)...
...schaden tut es mal nicht,

Sollte das Modul tatsächlich ein "eigenartiges" Verhalten bzgl. Events/event-on-change haben, dann entweder den Modulautor ansprechen oder z.B. per userReadings etc. "nachhelfen"...

EDIT: aber wie schon zig mal geschrieben, ohne tatsächliche Daten aus dem Eventmonitor (und Log wie oben ganannt, also OldReadings-Abfragen in notify loggen) kann man ein "eigenartiges" Verhalten nur vermuten... Und: nicht weiter helfen als schon getan...

Gruß, Joachim