Departure und (fehlendes) oldreadings

Begonnen von reuter14, 18 Dezember 2022, 17:18:46

Vorheriges Thema - Nächstes Thema

reuter14

Hallo,

ich versuche nun schon einige Zeit, dem Departure-Modul oldreading-Werte zu entlocken. Das Forum habe ich nun schon intensiv durchsucht, bin aber noch nicht fündig geworden.
Das Attribut oldreadings habe ich definiert, im List erscheint der OLDREADINGS-Abschnitt, es erscheint dort aber kein Reading, geschweige denn ein Wert.

Internals:
   BASE_URL   https://transport.stefan-biermann.de/publictransportapi/rest
   DEF        300
   FUUID      63982479-f33f-1769-13c1-25bc5829ea988518
   Interval   300
   NAME       Departure_BRB
   NR         1061
   STATE      RE 73769 Brandenburg Hbf 2022-12-18T11:21+0100 (0)
   TRIGGERTIME 1671358983.9801
   TRIGGERTIME_FMT 2022-12-18 11:23:03
   TYPE       Departure
   eventCount 1932
   OLDREADINGS:
   READINGS:
     2022-12-18 11:18:09   departure_0_delay 0
     2022-12-18 11:18:09   departure_0_number RE 73769
     2022-12-18 11:18:09   departure_0_text Brandenburg Hbf
     2022-12-18 11:18:09   departure_0_time 2022-12-18T11:21+0100
     2022-12-18 11:18:09   departure_0_timeInMinutes 3
     2022-12-18 11:18:09   departure_0_time_human_readable 18.12.2022, 10:21 Uhr
...

Wenn ich das Reading mit setreading verändere, wird auch OldReadings gesetzt.

OLDREADINGS:
     2022-12-18 17:13:28   departure_0_delay 0
   READINGS:
     2022-12-18 17:15:18   departure_0_delay 11

Sobald das Modul die Daten aber wieder auf normalem Weg aktualisiert, ist der OLDREADINGS-Wert wieder weg.

OLDREADINGS:
   READINGS:
     2022-12-18 17:16:27   departure_0_delay 1


Was läuft hier verkehrt? Ich stehe vor einem Rätsel...

Grüße

TomLee


Zitat von: commandrefoldreadings
Dieses Attribut enthält eine durch Kommata getrennte Liste von Readings. regex sind erlaubt. Für jedes Reading aus der Liste speichert FHEM intern den vorherigen Wert wenn sich das Reading ändert. Zum Zugriff auf die Werte gibt es die OldReadings.* Routinen.

https://fhem.de/commandref_modular_DE.html#perl :
Zitat von: commandref
OldReadingsVal(<devicename>,<reading> ,<defaultvalue>)
OldReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
OldReadingsTimestamp(<devicename>,<reading> ,<defaultvalue>)
OldReadingsAge(<devicename>,<reading>,< defaultvalue>)
analog zu den Routinen oben, aber zum Zugriff auf die vorherigen Werte. siehe: oldreadings

reuter14

Hallo,

die commandref dazu habe ich gelesen.
OldReadingsVal liefert immer nur den Standardwert. Außer, ich setze das Reading mit setreading manuell, dann kommt auch bei OldReadingsVal as an.

setreading departure_BRB departure_0_text Ziel1
liefert
OldReadingsVal("departure_BRB", "departure_0_text", "leer")
Brandenburg Hbf

setreading departure_BRB departure_0_text Ziel2
liefert
OldReadingsVal("departure_BRB", "departure_0_text", "leer")
Ziel1

set departure_BRB update
liefert
OldReadingsVal("departure_BRB", "departure_0_text", "leer")
leer

Nach den setreadings gibt es im List bei OLDREADINGS eine Zeile "departure_BRB" mit dem entsprechenden Wert. Nach dem "set departure_BRB update" ist der Eintrag wieder weg, siehe erster Beitrag.

Was habe ich in der commandref übersehen?

Grüße



TomLee

Weil im Anschluss des "set departure_BRB update" irgendwann mal die Funktion Departure_ParseDeparture aufgerufen wird und damit alle Readings gelöscht werden ? Ich weiß es nicht, zu wenig Verständnis und beschäftigt damit.

sub Departure_ParseDeparture(@) {
my ($param, $err, $data) = @_;
my $hash = $param->{hash};
my $name = $hash->{NAME};
my $timeoffset = AttrVal($name, "departure_time_to_go_to_station",undef);
my $res;
fhem("deletereading $name departure.*", 1);
...


https://github.com/uniqueck/fhem-departure/blob/develop/FHEM/98_Departure.pm