[Gelöst] Readings auf Änderung überwachen

Begonnen von Knallfrosch, 16 Oktober 2019, 20:39:57

Vorheriges Thema - Nächstes Thema

Knallfrosch

Hallo,

ich suche schon einige Zeit nach einer Lösung für meine Idee, aber entweder finde ich nichts passendes oder ich verstehe es einfach nicht.
Ich hoffe das sich jemand die Mühe machen kann mir hier zu helfen.

Folgendes:
Immer wieder passiert es das meine Thermometer (LaCrosse) "unbemerkt" ausfallen. D.h. die Werte im Reading sind dann auch entsprechend veraltet.
Mein Gedanke war:

Sende eine eMail wenn das Reading <temperature> von <Esszimmer_Klima>  über einen Zeitraum von >7200sec unverändert bleibt.

Eine email Benachrichtigung für diverse Dinge über ein Notify habe ich in folgender Form schon zur Hand  {exmail('FHEM@FHEM.de', 'FHEM Warnung', 'Warntext, je nach Anforderung ')}


Kann mir bitte jemand einen Weg aufzeigen wie ich das lösen kann.

Vielen Dank.

Grüße



Nachtrag:

define di_push DOIF ([Esszimmer_Klima])( {exmail('FEHM@FHEM.de', 'FHEM Warnung', ' Keine aktuellen Daten')})
setuuid di_push 5da73052
attr di_push do resetwait
attr di_push room 1 TEST
attr di_push wait 20


Folgendes erschien mir sehr Erfolgversprechend.
Ab und an kommen sogar Mails, aber was nicht funktioniert hat war das attr Wait auf 2 zu stellen.
Dann hätte ja eigentlich alle 2sec eine Mail kommen müssen. Da das Themometer nur alle 4 sec. einen neuen Wert sendet.


amenomade

Es gibt auch ein Modul dafür: https://fhem.de/commandref_DE.html#readingsWatcher

ZitatAb und an kommen sogar Mails, aber was nicht funktioniert hat war das attr Wait auf 2 zu stellen.
Dann hätte ja eigentlich alle 2sec eine Mail kommen müssen. Da das Themometer nur alle 4 sec. einen neuen Wert sendet.
Ich dachte Du willst aber 7200? Warum willst Du jetzt 2 oder 4 - oder 20 - setzen?

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

rabehd

https://wiki.fhem.de/wiki/DOIF/Einsteigerleitfaden,_Grundfunktionen_und_Erl%C3%A4uterungen#wait

ZitatDann hätte ja eigentlich alle 2sec eine Mail kommen müssen.
Aber nicht weil Du wait auf 2 gesetzt hast.
Auch funktionierende Lösungen kann man hinterfragen.

kumue

ich hatte mal was gefunden und bei mir dann so implementiert...
+*1:30:00 {
  my @lcdev=devspec2array("TYPE=LaCrosse");
  my $age_in_seconds;;
  my $max_seconds;;
  $max_seconds=1800;
    foreach(@lcdev){
$age_in_seconds=ReadingsAge("$_","temperature","");;
if ($age_in_seconds>$max_seconds) {
fhem("set myTelegramBot send $_ - Reading zu alt ($age_in_seconds sec.)");
}
    }
}


Ein AT, welches die Devices vom Type LaCrosse auf alte Temperatur-Readings (hier älter als 30min) prüft und im Fehlerfall per Telegram informiert.

Das Modul readingsWatcher kannte ich noch nicht - mal anschauen...

Wzut

Zitat von: Knallfrosch am 16 Oktober 2019, 20:39:57
wenn das Reading <temperature> von <Esszimmer_Klima>  über einen Zeitraum von >7200sec unverändert bleibt.
Fast richtig der Gedankengang :) aber nicht der Wert ist entscheidend sondern der Zeitstempel, und genau da setzt readingsWatcher an .....
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Damian

Zitat von: amenomade am 16 Oktober 2019, 21:57:10
Es gibt auch ein Modul dafür: https://fhem.de/commandref_DE.html#readingsWatcher
Ich dachte Du willst aber 7200? Warum willst Du jetzt 2 oder 4 - oder 20 - setzen?

Damit er den Ausfall mitbekommt, muss er wenigstens ein Event vom Device mitbekommen, damit der Timer aktiviert werden kann. Wenn das Device bereits nicht mehr sendet - wird auch nichts mehr kommen

Alternativ, eine Lösung, die immer funktioniert:

DOIF ([+02:00] and [Esszimmer_Klima:temperature:sec] > 7200) {exmail('FEHM@FHEM.de', 'FHEM Warnung', ' Keine aktuellen Daten')}
attr repeatsame 3


Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Knallfrosch

Hallo,

danke für eure Antworten.
Ich werde mir eure Lösungsvorschläge am WE in Ruhe anschauen.

Spontan scheint mir der readingsWatcher passend zu sein.

Den "Überwachungswert" habe ich nur zu Testzwecken so tief gestellt. Über Nacht kamen auch eine Vielzahl an "Warnmeldungen".
Mein "Versuch" scheint also doch (irgendwie) zu funktionieren.

Grüße

Knallfrosch

Hallo,

ich hatte etwas Zeit mich mit der Lösung zu beschäftigen.
Entschieden habe ich mich für readingsWatcher.


Falls jemand so etwas nachbauen möchte, ich habe es folgend gelöst:

define Readings_Ueberwachung readingsWatcher global
setuuid Readings_Ueberwachung 5da9abd8-f33f-a358-4aca-3e8a292e61790e2f
attr Readings_Ueberwachung interval 60
attr Readings_Ueberwachung readingActivity none
attr Readings_Ueberwachung room Raum-Klima


in den zu überwachenden Thermometern kam jeweils folgendes hinzu:

attr Aussen_Klima readingsWatcher 3600,???,temperature,humidity

um auch eine Nachricht zu erhalten:

define Readings_Ueberwachung_push at +*02:00:00 {if (ReadingsVal("Readings_Ueberwachung","state",0) eq "timeout") {my $test=ReadingsVal("Readings_Ueberwachung","timeoutdevs",0);; fhem ("set Pushnachricht msg 'TIMEOUT' 'Werte sind nicht aktuell.\\n$test \\nmuss geprüft werden.'")}}
setuuid Readings_Ueberwachung_push 5da9b7b0-f33f-a358-0fb8-a8674de90d586eb0
attr Readings_Ueberwachung_push room Benachrichtigungen


Vielen Dank nochmal.

Grüße

Wzut

Ähh es freut mich ja das du dich für readingsWatcher entschieden hast , aber warum das at ?
So kann es bis zu drei Stunden dauern bis die Nachricht kommt, ich hätte ein notify genommen das auf timeoutdevs != none triggert
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Knallfrosch

Hallo,

ja, mit zeitverzögerung kann ich leben.
Jedoch kommt so dann alle 2h eine "Erinnerung".
Push-Nachrichten können ja auch mal ungünstig kommen und dann vergessen werden.
Daher alle 2h eine Nachricht, bis der Fehler behoben ist.


Oder gibt es da eine "schönere" Lösung?


Wzut

schöner geht immer :)
Ok, das mit der Erinnerung ist ein Argument. Das hatte ich so damals nicht auf meinem Radar, da ich meine Meldungen am TV dauerhaft unten einblende.
Ich könnte dem Modul allerdings intern noch einen Timer spendieren bzw ein temp at anlegen, dann könnte der User beim notify bleiben für die sofortige Meldung
und optional den Trigger für die Erinnerungen wiederholen. Ich schau mal nächste Woche danach. 
Maintainer der Module: MAX, MPD, UbiquitiMP, UbiquitiOut, SIP, BEOK, readingsWatcher

Damian

Zitat von: Knallfrosch am 19 Oktober 2019, 18:50:55
Oder gibt es da eine "schönere" Lösung?

Weniger als einen Einzeiler, kann ich auch nicht ;)
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

Knallfrosch

@WZUT, wenn du da etwas einbauen könntest wäre das natürlich toll.

Ich als absoluter Laie, der sich alles mühsam zusammen bastelt, gehe sicherlich oft komplizierte Wege.  :-)
Ich bin erstmal froh, das es so funktioniert.


@Damian, deinen Einzeiler habe ich mir natürlich auch angeschaut. 
Aber dann hätte ich für jedes Thermometer (14St.) ein DoIf bauen müssen.
Das hat mir nicht so zugesagt.


Auch wenn das "Problem" für mich erstmal gelöst ist, sind Erweiterungen/Verbesserungen natürlich toll.


Grüße

Damian

Zitat von: Knallfrosch am 19 Oktober 2019, 23:56:03
@Damian, deinen Einzeiler habe ich mir natürlich auch angeschaut. 
Aber dann hätte ich für jedes Thermometer (14St.) ein DoIf bauen müssen.
Das hat mir nicht so zugesagt.

Hättest du gesagt, dass du verschiedene Devices überwachen willst, dann hätte ich dir einen Einzeiler für alle präsentiert.
Programmierte FHEM-Module: DOIF-FHEM, DOIF-Perl, DOIF-uiTable, THRESHOLD, FHEM-Befehl: IF

amenomade

Zitat von: Damian am 20 Oktober 2019, 00:38:48
Hättest du gesagt, dass du verschiedene Devices überwachen willst, dann hätte ich dir einen Einzeiler für alle präsentiert.
Bin interessiert ;)
Vor allem, wie man den Alter der Readings in aggr Funktionen testet.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus