[erledigt][fhem.pl] oldReadings - ist das wirklich so gewollt?

Begonnen von betateilchen, 29 April 2023, 11:39:11

Vorheriges Thema - Nächstes Thema

betateilchen

Im Moment hadere ich mit der Funktionsweise der oldreadings.

Ja, in der Doku steht

ZitatThis attribute takes a comma-separated list of readings. You may use regular expressions in that list. For each reading in the list FHEM will internaly store the previous value if the readings value changes.

Das habe ich gelesen und verstanden.
In der Praxis bedeutet das folgendes (new und old bezeichnen das aktuelle und das oldReading):

--- new --- old
t+0  5       -
t+1  7       5
t+2  8       7
t+3  6       8
t+4  5       6
t+5  5       6
t+6  5       6

Der Wert des aktuellen readings ändert sich ab t+4 nicht, deshalb wird ab t+5 das oldreading nicht mehr verändert.

"oldReadings" bedeutet also eher "lastDifferentReadingValue" und nicht unbedingt den vorherigen Readingwert.

Es gibt durchaus Fälle, in denen das oben gezeigte Szenario auftreten kann. Nun möchte ich gerne feststellen, ob sich der neue Wert im Vergleich zum vorherigen Wert verändert hat, um den Wert mit einem Symbol zu kennzeichnen.

Und dabei hilft mir OldReadingsVal() nun gar nichts, weil ich den Unterschied über längere Zeit nicht durch einen Vergleich feststellen kann. Also muss ich mir wieder eine Krücke bauen und den vorherigen Wert selbst in ein zusätzliches reading schreiben.

Ist dieses Verhalten von oldReadings wirklich so beabsichtigt?

Könnte man oldreadings eventuell konfigurierbar machen, sodass dort immer der vorherige Wert steht, unabhängig davon, ob dieser sich verändert hat oder nicht?
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!

rudolfkoenig

ZitatIst dieses Verhalten von oldReadings wirklich so beabsichtigt?
Offensichtlich, denn vor der Zuweisung wird geprueft, ob der Wert identisch ist.
Frag mich aber bitte nicht fuer die Begruendung.

ZitatKönnte man oldreadings eventuell konfigurierbar machen, sodass dort immer der vorherige Wert steht, unabhängig davon, ob dieser sich verändert hat oder nicht?
Hab kein Problem damit, die Loesung muss nur rueckwaertskompatibel sein, und das geaenderte Verhalten nur auf ausgewaehlte Readings zutreffen.

Vmtl. ein weiteres Attribut mit der gleichen Syntax wie oldreadings, ich habe nur keine gute Idee fuer den Namen.
oldreadingsForcedSet?

betateilchen

Zitat von: rudolfkoenig am 29 April 2023, 13:05:55und das geaenderte Verhalten nur auf ausgewaehlte Readings zutreffen.

Vermutlich wäre es mit einem device-Bezug völlig ausreichend gelöst.

Zitat von: rudolfkoenig am 29 April 2023, 13:05:55Vmtl. ein weiteres Attribut mit der gleichen Syntax wie oldreadings,

Vielleicht reicht ein zusätzliches Attribut im device, um die definierten oldReadings immer zu schreiben.

attr <device> oldreadings r1,r2
attr <device> oldreadingsAlways 1

oder noch einfacher, quasi als Parameter zum Attribut

attr <device> oldreadings r1,r2,oldreadingsAlways

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

rudolfkoenig

Habe die letzte Version implementiert, kurz getestet, dokumentiert und eingecheckt.

betateilchen

Danke, das funktioniert jetzt genau so, wie ich es mir vorgestellt habe.
-----------------------
Formuliere die Aufgabe möglichst einfach und
setze die Lösung richtig um - dann wird es auch funktionieren.
-----------------------
Lesen gefährdet die Unwissenheit!