Verständnissfrage zur Verwendung v."oldreadings" und v."OldReadingsVal"

Begonnen von cocojambo, 29 Juli 2020, 19:05:37

Vorheriges Thema - Nächstes Thema

cocojambo

Ich habe eine Körperanalyse Waage die alle möglichen und unmöglichen Werte nach dem Wiegen herausspukt. Diese werden dann in einer LOG Datei gespeichert und in einer Readingsgroup angezeigt und auch graphisch ausgewertet. So weit so gut.

weight                       62.134                  2020-07-29 08:21:45

Jetzt möchte ich aber auch die Werte der letzen Messung als Vergleich heranziehen und als userReading einbinden. Dazu habe ich erst mal oldreadings als attr eingefügt und userReadings:

attr Waage_XXXXX oldreadings .*
attr userReadings weight_old { OldReadingsVal("Waage_XXXXX","weight",0) }

und es auch so probiert:

attr Waage_XXXXX oldreadings weight
attr userReadings weight_old { OldReadingsVal("$name","weight",0) }

Das Ergebniss sieht immer so aus:

weight_old                  0             2020-07-29 18:53:30

Woran liegt das? Kann es sein das durch das 60 minütige Abfragen der Waage immer eine "0" rauskommt? obwohl die morgendlichen Readings unverändert bleiben?

Es gibt wahrscheinlich eine logische Erklärung dafür, aber ich weiß nicht was ich falsch mache.

Gruß aus Köln
Norbert




FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

amenomade

So lange weight sich nicht ändert, wird weight_old auf 0 bleiben.
Pi 3B, Alexa, CUL868+Selbstbau 1/2λ-Dipol-Antenne, USB Optolink / Vitotronic, Debmatic und HM / HmIP Komponenten, Rademacher Duofern Jalousien, Fritz!Dect Thermostaten, Proteus

cocojambo

Ich habe mit folgender "Kombination" die gewünschten Daten bekommen:

attr Waage_xxxxx oldreadings .*

und

attr Waage_xxxxx userReadings weight_old { OldReadingsVal("Waage_xxxxx","weight",0) }, boneMassWeigt_old { OldReadingsVal("Waage_xxxxx","boneMassWeight",0) }, boneRatio_old { OldReadingsVal("Waage_xxxxx","boneRatio",0) },.......usw.......usw

aber ohne das ich eine neue "Wiegung" vorgenommen habe. Die Daten vom Vortag waren bereits vorhanden und wurden als userReadings auch sofort angezeigt.

Gruß
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

cocojambo

Kann es sein, das nach einem "shutdown restart" die Werte von oldreadings nicht mehr vorhanden sind und alle oldreadings auf "0" sind?
Ist das richtig, wenn ja, wie kann man das deaktivieren?

Gruß
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000

amenomade

Zitat von: cocojambo am 01 August 2020, 15:26:06
Kann es sein, das nach einem "shutdown restart" die Werte von oldreadings nicht mehr vorhanden sind
Ja
Zitat von: cocojambo am 01 August 2020, 15:26:06
und alle oldreadings auf "0" sind?
Nein. Die sind nicht auf 0, die sind gar nicht mehr vorhanden.
Zitat von: cocojambo am 01 August 2020, 15:26:06
wie kann man das deaktivieren?
Kann man nicht.

Was Du aber in deinem userReading machen kannst, ist, als defaultWert für die Funktion OldReadingsVal, nicht 0 zu geben, sondern den Wert des Readings:  OldReadingsVal("device", "reading", ReadingsVal("device", "reading", 0))
So hast Du nie 0 im userReading, wenn das Reading nach einem Restart ohne Änderung aktualisiert wird.





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

cocojambo

Soweit ich das mit den Readings verstanden habe, bleiben die Readings und deren Werte auch bei einem Neustart immer gleich, es sei denn es wird ein neuer Wert eingelesen. Jetzt braucht man doch eigendlich nur dafür zu sorgen, das, wenn die Oldreadings einmal eingelesen wurden, diese nicht bei einem Neustart wieder neu erstellt werden.
Noch besser wäre, wenn man wie bei den "Echtzeit Readings" mit envent-on-change-reading das Neueinlesen verhindern könnte oder das OldReadingVal nur dann einen neuen Wert annimmt, wenn dieser größer "0" ist und so würde doch dann das Ursprungs Reading des "Alten Wertes" erhalten bleiben, oder?

Gruß
Norbert
FHEM6.2 FB7490 FB7430 3xraspi2+3+4 2xHM-LAN-CFG 2xESP CUL868 CUNO868 HUE-Bridge Harmony-Hub 5xHM-LC-Sw-PI-2 3xHM-WDS30-T2-SN 1xHM-LC_Sw4-DR 3xHM-ES-PMSw1-PI 7xFS20SIG2 6xFS20KSE 2xHM-ES-PMSW1-PL 5xS300TH 1xASH2200 1xEM1000