neues Modul 98_readingsWatcher , war 98_ReadingsSupervision

Begonnen von Wzut, 15 Februar 2016, 20:49:53

Vorheriges Thema - Nächstes Thema

TK67

#45
Habe gerade noch mal verglichen, ist die aktuelle Version bei mir in Fhem.
# Version 1.5    - 19.02.19
# Version 1.3    - 26.01.18 Wzut use ReadingsAge
# Version 1.2    - 15.02.16 Wzut add Set, Get
# Version 1.1    - 14.02.16 Wzut
# Version 1.0    - (c) HCS, first version

Fhem ist auch aktuell. Habe trotzdem die Version aus dem ersten Post nochmals drüber gezogen, es bleibt aber bei dem "no Timestamp".

In der Version die bei mir in den Readings no Timestamp gebracht hatte funktionierte die Anzeige noch.
https://forum.fhem.de/index.php/topic,49408.msg908195.html#msg908195
FHEM auf Raspberry Pi 3 Model B+

OdfFhem

@Wzut
Aktuell "spiele" ich ein wenig mit diesem Modul und habe dabei folgende "Ungereimtheiten" festgestellt:


get <myRS> devices liefert falsche Ergebnisse; dies liegt an einer vertauschten Logik in Zeile 137 - verursacht dabei auch das hier angesprochene "no Timestamp"-Problem.

line 137
--         if (defined($age))
++         if (!defined($age))


Das Reading timeouts wird nach einem bereinigten timeout-Zustand nicht wieder auf 0 zurückgesetzt - bleibt also auch dann ungleich 0, wenn kein timeout mehr vorliegt.  Dies liegt wohl an der Verwendung untypisierter Variablen; $deads ist für den angesprochenen Fall (in Zeile 260 bzw. 261) nicht 0, da es nie einen Wert erhalten hat. Die @timeOutdevs-Deklaration musste ich aus der Gruppe rausziehen, da das Array ansonsten bereits ab hier ein Element enthielt.

line 184
--    my ($alives, $deads, @timeOutdevs ,$state);
++    my ($alives, $deads, $state) = (0, 0, '');
++    my @timeOutdevs = ();

line 261
--    readingsBulkUpdate($hash,'state'    , ($deads) ? 'timeout' : 'ok');
++    readingsBulkUpdate($hash,'state'    , ($deads == 0) ? 'ok' : 'timeout');

line 263
--    if (int(@timeOutdevs))
++    if (scalar(@timeOutdevs) > 0)



Vielleicht kannst Du die geschilderten Fälle ja nachvollziehen und die Code-Korrekturen so oder in ähnlicher Form - bekanntlich führen ja viele Wege nach Rom - übernehmen.

TK67

@OdfFhem

Habe die Änderungen von dir gerade mal eingebaut, jetzt läuft alles so wie es soll.
Dankeschön :) 
FHEM auf Raspberry Pi 3 Model B+

Wzut

@OdfFhem, ich freue mich immer wenn sich andere User statt zu meckern gleich Lösungen präsentieren :)
Der erste Punkt in Zeile 137 : Volle Zustimmung. Auf meinem Live System ist das heute schon so, k.A. warum da ne andere Version in den ersten Post gerutscht ist (erklärt dann auch warum TK67 das Problem hat).
Beim Reading timeouts stimme ich dir auch zu, blieb bis jetzt unbemerkt weil ich es nicht verwende.
Mit den beiden anderen Änderungen habe ich allerdings ein Problem den Sinn zu erkennen. Wenn jetzt am Anfang my $dead =0 steht
passt doch nach wie vor   ($deads) ? 'timeout' : 'ok' und auch int(@timeOutdevs) führt heute zum gewünschten Erfolg.




Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

OdfFhem

@Wzut
Ich kann derzeit nichts testen, aber von der zweiten Änderung reicht mit seeeeeehr großer Wahrscheinlichkeit die Änderung zu Zeile 184 - man beachte den Rom-Hinweis ;-)

curt

@Wzut
Zitat von: Wzut am 04 März 2019, 14:22:44
Auf meinem Live System ist das heute schon so, k.A. warum da ne andere Version in den ersten Post gerutscht ist (erklärt dann auch warum TK67 das Problem hat).

Welches ist denn die aktuelle Version und wo ist sie zu finden?

BTW: Nach kleineren anfänglichen Schwierigkeiten macht es bei mir das, was es soll. Ich bin zufrieden und glücklich, danke!
RPI 4 - Jeelink HomeMatic Z-Wave

Gisbert

Zitat von: betateilchen am 16 Februar 2016, 09:47:34
Etwas ähnliches habe ich seit mindestens zwei Jahren viel einfacher gelöst. Ich prüfe mit ReadingsTimestamp() ob der Wert des readings älter ist als ein bestimmtes Limit. Das ganze passiert in einer eigenen Funktion der 99_myUtils.pm die ich als Ersatz für ReadingsVal() immer da verwende, wo ich diese Altersprüfung tatsächlich brauche.

Ich finde es immer kritisch, wenn readings eines devices "von aussen" verändert werden und nicht vom device selbst.

Hallo Udo,

ich bin auf deinen Beitrag gestoßen und interessiere für deine Lösung mit ReadingsTimestamp() in einer eigenen Funktion der 99_myUtils.pm. Könnte ich daran partizipieren?

Viele​ Grüße​ Gisbert​
Aktuelles FHEM | PROXMOX | Fujitsu Futro S740 | Debian 12 | UniFi | Homematic, VCCU, HMUART | ESP8266 | ATtiny85 | Wasser-, Stromzähler | Wlan-Kamera | SIGNALduino, Flamingo Rauchmelder FA21/22RF | RHASSPY

Wzut

Update, ich habe das erste Posting editiert :

Zitat von: Wzut am 15 Februar 2016, 20:49:53
Das Modul ist ab morgen unter dem neuen Namen 98_readingsWatcher via Update verfügbar.
Wer von der alten 98_ReadingsSupervison auf die neue Version umsteigen möchte kann dies nach und nach tun da sich auch das Attribut in den überwachten Geräten von readingsSupervision auf readingsWatcher ändert.
Neu dazu gekommen sind die Attribute deleteUnusedReadings und readingActivity
(Erklärung zu beiden , siehe command.ref )
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

binford6000

Moin,
nach heutigem Update steht im Log:
2019.09.05 10:03:39 1:  reload: Error:Modul 98_readingsWatcher deactivated:
syntax error at ./FHEM/98_readingsWatcher.pm line 136, near ") if"


VG Sebastian

Wzut

ja ich habe mit Schrecken heute morgen gemerkt das ich gestern Abend die falsche Version hochgeladen habe.
Entweder die die Zeile 136 auskommentieren / löschen oder noch bis morgen früh warten auf die richtige Version warten.
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

binford6000


nuccleon

Kann es sein, dass dir ein Tippfehler unterlaufen ist?

Im dem gemonitortem Device jist der Wert von Reading Activity aöive ( s. Screenshot)

Hier das List vom readingsWatcher

Internals:
   CFGFN     
   DEF        global
   FUUID      5d721370-f33f-88d3-cc14-b66135daebedbb6a
   INTERVAL   60
   NAME       rdwatcher
   NR         105
   STATE      ok
   TYPE       readingsWatcher
   OLDREADINGS:
   READINGS:
     2019-09-06 11:06:16   MQTT2_espeasy_dht_aussen_state ok
     2019-09-06 11:06:16   alive           1
     2019-09-06 11:06:16   devices         1
     2019-09-06 11:06:16   readings        1
     2019-09-06 11:06:16   state           ok
     2019-09-06 11:06:16   timeoutdevs     none
     2019-09-06 11:06:16   timeouts        0
Attributes:
   interval   60
   readingActivity activity

Wzut

oh Mann das wird ja langsam oberpeinlich .... :(
aber Glück im Unglück du kannst es gleich selbst beheben und das ö mit einem l überschreiben, setz das Attribut readingActivity statt nur auf activity
auf activity:dead:alive oder activity:0:1 je nach Geschmack
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

nuccleon

Zitat von: Wzut am 06 September 2019, 11:22:02
auf activity:dead:alive oder activity:0:1 je nach Geschmack

Sehr gut, das mache ich. Magst du es trotzdem fixen?

Wzut

ja sicher. Diese Woche steht eh noch ein Update an, ich muß nur noch die command.ref  nachziehen.
a. habe ich die Ausgabe bei get <name> devices etwas aufgeräumt
b. können heute zwar mehrere Readings eines Devices überwacht werden, allerdings unterliegen sie der gleichen Regel in Bezug auf Timeoutwert und
Ersatzwert. In der nächsten Version können beliebig viele Regeln für ein Device vergeben werden.
 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher