FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: betonmoewe am 04 Oktober 2016, 13:50:11

Titel: Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: betonmoewe am 04 Oktober 2016, 13:50:11
Hallo Leute,

schone wieder ich ...

Ich habe mittlerweile einige mySensors Devices im Einsatz. Leider Habe ich derzeit 1 Device, welches alle paar Tage mal ausfällt (ich denke, schlechtes Sendemodul). Darauf hin ist mir die Idee gekommen, einfach zu überwachen, wann bei einem Device zum letzten mal ein Reading geändert wurde (z.B. mittels ReadingAge) und darauf hinzuweisen, wenn dies bei einem Device zu lange her ist (da kein activity reading vorhanden). Nun wäre es jedoch mühsam, je nach Device Art alle Readings einzeln zu überprüfen.
Nun die Frage: gibt es eigentlich eine Abfrage die ermittelt, wann sich irgendein Reading geändert hat ohne das Reading genauer zu spezifizieren? Oder aber: gibt es eine Möglichkeit, eine Schleife über alle Readings eines Devices zu definieren(um z.B,. den kleinsten ReadingAge Wert zu ermitteln), ohne dass den ganauen Namen der einzelnen Readings genau angeben muss ???? Dies würde mir sehr helfen, um ein Activity userreading zu bauen.

Viele Grüße

Die Betonmöwe
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: CoolTux am 04 Oktober 2016, 13:54:13
devspec2array damit kannst eine schleife über alle Devices eines bestimmten Types oder mit einer anderen bestimmten Eigenschaft machen. Aber das abzufragende Reading sollte schon bekannt sein. Zur Not halt state sofern es immer aktuallisiert wird.
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: christiang am 04 Oktober 2016, 15:41:17
Hab das über ein userreading timestamp gelöst, der bei jedem event im mysensors device neu geschrieben wird.

attr <device> userReadings  timestamp:.* { time() }

Damit wird bei jedem event ein utc timestamp aktualisiert. Kannst natürlich auch mit anderen Formaten machen
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: betonmoewe am 04 Oktober 2016, 15:42:58
das mit dem Reading ist halt deshalb so unbestimmt, da es bei dem einen Sensor mal der BAtteriesatus ist, der als letztes übertragen wurde (alle anderen Werte sind gleich geblieben), mal ist es die Temperatur, mal ob der Boden feucht oder trocken ist. Auch gibt es bei mir Sensoren, die bis zu 6 Werte übermitteln. Schön wäre es. wenn ich einfach den Timestamp der letzten Änderung (egal ob Batterie oder ein anderes Reading) ermitteln könnte um eine Meldung zu schalten, wenn > X Strunden seit dem letzten Wechsel (mit at alle 10 Minuten überprüfen lassen). Mangels Idee habe ich jetzt einen Zwischenschritt gemacht (da alle wichtigen Sensoren mqtt Devices sind): ich habe eine readingsGroup über alle transmission-states gebaut (da habe ich dann einen Zeitstempel ohne dass das eigentliche Reading genannt werden muss). Jetzt muss ich diesen TimeStamp nur noch auswerten können (in readingsGroup geht ja nur VALUE so weit ich weiss).

Die Betonmoewe
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: betonmoewe am 04 Oktober 2016, 15:43:58
@christiang
grad überschnitten: das wäre natürlich noch besser ...
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: betonmoewe am 04 Oktober 2016, 17:23:15
@christiang:
ich habe jetzt bei den zu überwachenden Sensoren Dein userReading eingefügt und eine readingsGroup gebaut (inkl. Umsetzung nach Farbe > 48 Std = absent, > 24 Std = rot etc. Sieht erst einmal gut aus. Jetzt muss ich mir nur noch eine Funktion zur Alarmierung überlegen.

Danke nochmals für Deinen Tipp!

Die Betonmoewe
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: gloob am 04 Oktober 2016, 18:22:56
Ich habe für jedes Device einen Watchdog angelegt:

define Watchdog_MySensors_195 watchdog MYSENSOR_195 01:10:00 SAME set pushmsg message 'MySensors 195 ist tot!'
attr Watchdog_MySensors_195 autoRestart 1
attr Watchdog_MySensors_195 room MySensors


Hier mit lasse ich mir immer eine Push Benachrichtigung schicken wenn ein Sensor aussteigt

So bekomme ich eine Push Benachrichtigung wenn keine Message mehr nach 1 Stunde und 10 Minuten kommt.
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: Hauswart am 04 Oktober 2016, 18:41:30
Zitat von: betonmoewe am 04 Oktober 2016, 17:23:15
@christiang:
ich habe jetzt bei den zu überwachenden Sensoren Dein userReading eingefügt und eine readingsGroup gebaut (inkl. Umsetzung nach Farbe > 48 Std = absent, > 24 Std = rot etc. Sieht erst einmal gut aus. Jetzt muss ich mir nur noch eine Funktion zur Alarmierung überlegen.

Danke nochmals für Deinen Tipp!

Die Betonmoewe
Kannst du uns die ReadingsGroup zur Verfügung stellen?
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: Ma_Bo am 04 Oktober 2016, 18:47:25
Ich habe mir für wichtige Geräte jeweils ein DOIF zur Überwachung angelegt.

Siehe commandref:

ZitatZurücksetzen des Waittimers für das gleiche Kommando   back

Im Gegensatz zu do always wird ein Waittimer mit dem Attribut do resetwait auch dann zurückgesetzt, wenn die gleiche Bedingung wiederholt wahr wird.
Damit können Ereignisse ausgelöst werden, wenn etwas innerhalb einer Zeitspanne nicht passiert.
Das Attribut do resetwait impliziert eine beliebige Wiederholung wie do always. Diese lässt sich allerdings mit dem Attribut repeatsame einschränken s. u.

Anwendungsbeispiel: Meldung beim Ausbleiben eines Events

define di_push DOIF ([Tempsensor])(set pushmsg "sensor failed again")
attr di_push wait 1800
attr di_push do resetwait
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: Omega am 04 Oktober 2016, 19:43:51
Ich mache das auch mit DOIF. Zusätzlich setze ich für das Gateway noch ein connect ab

set MySensorsGateway_3 connect

In den meisten Fällen reicht das aus, um das Gateway wieder mitspielen zu lassen.
Titel: Antw:Suche Möglichkeit herauszufinden, wann ein Device aktualisiert wurde
Beitrag von: betonmoewe am 05 Oktober 2016, 16:24:34
ich habe jetzt folgende readingsGroup s definiert:
define MYSENSOR_lastReadingsGroup readingsGroup .*:timestamp
attr MYSENSOR_lastReadingsGroup valueFormat {return "48" if( time() - $VALUE > 172800 );;;; return "24" if( time() - $VALUE > 86400 );;;; return "12" if( time() - $VALUE > 43200 );;;; return "6" if( time() - $VALUE > 21600 );;;; return "0"}
attr MYSENSOR_lastReadingsGroup valueIcon {'timestamp.48' => 'unknown@red','timestamp.24' => 'general_ok@red','timestamp.12' => 'general_ok@orange','timestamp.6' => 'general_ok@yellow','timestamp.0'  => 'general_ok@green'}
define MYSENSOR_BatteryLevelGroup readingsGroup .*:batterylevel
attr MYSENSOR_BatteryLevelGroup valueFormat {return "0" if( $VALUE < 1 );;;; return "25" if( $VALUE < 25 );;;; return "50" if( $VALUE < 50 );;;; return "75" if( $VALUE < 75 );;;; return "100"}
attr MYSENSOR_BatteryLevelGroup valueIcon {'batterylevel.0' => 'measure_battery_0@red','batterylevel.25' => 'measure_battery_25@red','batterylevel.50' => 'measure_battery_50@orange','batterylevel.75' => 'measure_battery_75@green','batterylevel.100'  => 'measure_battery_100@green'}


damit habe ich zum einen alle Batterie Readings und zum anderen die timestamp.Readings im Überbick. Die Alarmierung kommt noch...

Grüße

die Betonmöwe