Autor Thema: Alter eines Readings / Update-Zyklus als Wert (Erledigt)  (Gelesen 2486 mal)

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
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?
« Letzte Änderung: 24 April 2016, 14:59:26 von 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,

Offline crusader

  • Full Member
  • ***
  • Beiträge: 109
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #1 am: 24 Januar 2016, 02:21:31 »
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))}

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #2 am: 24 Januar 2016, 09:56:33 »
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
« Letzte Änderung: 24 Januar 2016, 10:07:59 von 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,

Offline crusader

  • Full Member
  • ***
  • Beiträge: 109
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #3 am: 24 Januar 2016, 11:41:27 »

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.

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #4 am: 24 Januar 2016, 11:49:02 »
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,

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
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,

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #6 am: 24 April 2016, 10:26:43 »
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,

Offline betateilchen

  • Developer
  • Hero Member
  • ****
  • Beiträge: 16096
  • s/fhem\.cfg/configDB/g
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #7 am: 24 April 2016, 11:37:17 »
Das Alter eines Readings kann man auch einfach mit

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

ermitteln.
-----------------------
Unaufgeforderte Anfragen per email werden von mir nicht beantwortet. Dafür ist das Forum da.

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #8 am: 24 April 2016, 12:04:23 »
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,

Offline marvin78

  • Developer
  • Hero Member
  • ****
  • Beiträge: 5533
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #9 am: 24 April 2016, 12:18:54 »
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.

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #10 am: 24 April 2016, 13:56:17 »
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,

Offline drdownload

  • Sr. Member
  • ****
  • Beiträge: 762
Antw:Alter eines Readings / Update-Zyklus als Wert
« Antwort #11 am: 24 April 2016, 14:58:56 »

+*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,