Alter eines Readings / Update-Zyklus als Wert (Erledigt)

Begonnen von drdownload, 23 Januar 2016, 22:52:15

Vorheriges Thema - Nächstes Thema

drdownload

Ich versuche derzeit ein Userreading zu machen dass mir die Dauer zwischen der Aktualisierung der Readings anzeigt (hauptsächlich bei Funksensoren)

Aber irgendwie sind bis jetzt alle Versuche gescheitert mit einem Custom Reading der letzten Aktualisierung etc. Ich vermute an der Reihenfolge in der FHEM intern die Readings etc. aktualisiert werden.

Hat jemand vielleicht so etwas schon als Codeschnipsel rumliegen?
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

crusader

Also beim Update eines Readings ein User-Reading mit der Zeitdifferenz zum vorhergehenden Update ?

Das geht so:


attr userReadings delta_t:<reading> difference {str2time(ReadingsTimestamp("$name","<reading>",0))}

drdownload

#2
Genau, super danke. Da hab ich wieder zu kompliziert gedacht.

Ich hab jetzt definiert delta_t:temperature difference {str2time(ReadingsTimestamp("$name","temperature",0))}

Bekomme aber trror evaluating tsh.sensoren.schlafzimmer userReading delta_t: Undefined subroutine &main::str2time called at (eval 291101) line 1.zurück

Nevermind, cpan ist ja case sensitiv beim instalieren von Modulen.

Edit: ok, Date nachinstallieren hat leider nichts geholfen
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

crusader

Zitat von: drdownload am 24 Januar 2016, 09:56:33

Ich hab jetzt definiert delta_t:temperature difference {str2time(ReadingsTimestamp("$name","temperature",0))}

Bekomme aber trror evaluating tsh.sensoren.schlafzimmer userReading delta_t: Undefined subroutine &main::str2time called at (eval 291101) line 1.zurück

Versuchs mal mit time_str2num($).
Das ist eine Routine aus 99_Utils.pm und sollte auf jeden Fall gehen.

drdownload

Thx! ich habe jetzt auch use Date::Parse in der 99_myUtils.pm hingefügt und jetzt geht es.

Es funktioniert allerdings nicht immer. Bei Sensoren die auch vom Statistics Modul upgedated werden kommt das userreading immer mit 0 daher. Da scheint die Reihenfolge der Reading-Updates wieder nicht zu passen.
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

drdownload

CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

drdownload

Ich würde das Ding jetzt umbauen damit ihc nicht auf ein Update angewiesen bin, was ja gerade bei veralternden Readings irgendwie der Sinn wäre.

Ich würde alle 5 min. das Alter neu berechnen, ich stehe jetzt bloß vor dem Problem, dass ich gerne durch eine Liste der zu überwachenden Devices loopen würde. Nur wie? Ich dachte ich gebe den Devices ein userattr mit dem namen des zu überwachenden readings. Nur wie kann ich mir die in eine Liste schupfen um sie foreach abzuarbeiten?
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

betateilchen

Das Alter eines Readings kann man auch einfach mit

ReadingsAge(<deviceName>,<readingName>,<defaultValue>)

ermitteln.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

drdownload

ui, die Änderung ist an mir vorübergegangen.

aber von meinem problem, dass ich automatisch durch die nötigen devices das laufen lassen will ist leider damit noch nicht gelöst.  ich könnte zwar ein at mit einem array starten wo ich jeweils device und reading paar reingebe um die abzuarbeiten, aber dazu benenne ich meine sachen zu oft um ;)

CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

marvin78

Zitat von: drdownload am 24 April 2016, 12:04:23
aber dazu benenne ich meine sachen zu oft um ;)

Warum macht man das? Der Name sollte in einer Produktivumgebung eine Konstante sein und nur in Ausnahmefällen geändert werden. Das ist natürlich am Ende jedem selbst überlassen, aber die Frage, welchen Grund es geben könnte, Devices ständig umzubenennen, stellt sich hier auf jeden Fall.

Andernfalls gibst du den Devices eben eindeutige userAttribute und verwendest devspec2array. Und: Auch in ReadingsAge kannst du die Variable $name verwenden.

drdownload

Der Grund für Umbennen ist oft, dass man schnell mal ein neues Device dazugibt und dann später draufkommt, dass man sich nicht an die Nomenklatura gehalten hat. Gerade wenn man mal ein paar Module ausprobiert.

Danke aber das devspec2array war der wichtige Hinweis, dass ich einfach falsch gefiltert habe auf mein user attr
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,

drdownload


+*00:01:00 {
foreach my $dev (devspec2array("readingAgeReading=[A-Za-z].*")) {
my $reading = AttrVal("$dev","readingAgeReading","");
my $timeEnd = str2time(TimeNow());
my $timeStart =str2time(ReadingsTimestamp("$dev","$reading",0));
my $timeElapsed= $timeEnd - $timeStart;
fhem ("setreading $dev readingAge $timeElapsed");
}}


Einfach der Device das Attr readingAgeReading zuweisen und jede Minute wird der Wert aktualisiert.
CUL 868 Slow-RF (FS20 Aktoren, Sender, FHT8V), CUL 868 (WMBUS-Empfang), Jeelink (PCA301), WS3600 (WH3080 über USB-Basis), Bewässerung mit ESP-Easy und Proplanta, RFXTRX433 Home-Easy Empfang und Senden, Oregon TH, WS001 TH), Blackbean IR, Mopidy-Snapcast MR Audio, Kodi, Forum-LED-Controller,