FHEM Forum

FHEM - Entwicklung => FHEM Development => Thema gestartet von: justme1968 am 25 Juni 2013, 22:54:23

Titel: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 25 Juni 2013, 22:54:23
der angehängte kleine patch implementiert einen neuen modifier für die userReadings: incremental

damit lässt sich automatisch ein monoton wachsender offset realisieren der einen reset eines counters z.b. bei ausfall der stromversorgung eines zählers ohne batterie puffer ausgleichen kann.

hierzu wird ein userReading von typ incremental angelegt das beim reset des counters automatisch um den vorherigen wert erhöht wird. dieser offset kann dann in den anderen userReadings auf den aktuellen counter wert hinzu addiert:attr <device1> userReadings\
   offset.B incremental {ReadingsVal($name,"counters.B", 0)},\
   niederschlag_cum {ReadingsVal($name,"offset.B",0)+ReadingsVal($name,"counters.B",0)/5.0}

attr <device2> userReadings\
  offset.A incremental {{ReadingsVal($name,"offset.B",0)+ReadingsVal($name,"counters.A", 0)},\
  consumption {{ReadingsVal($name,"offset.A",0)+ReadingsVal($name,"counters.A",0))/1000.0},\
  power differential {(ReadingsVal($name,"offset.A",0)+ReadingsVal($name,"counters.A",0))*3600}

es können natürlich immer noch werte verloren gehen wenn der zähler zurückgesetzt wird bevor fhem den neuen wert ausgelesen hat oder wenn fhem selber abstürzt bevor der offset im save file landet. da die userReadings in einer undefinierten reihenfolge ausgeführt werden kann es im falle eines resets unter bestimmten umständen passieren das ein kleiner fehler mitgeschleift wird. der ist aber deutlich geringer als ein kompett zurückgesetzter counter.

falls du in betracht ziehst den patch zu übernehmen passe ich noch die doku an.

mit dem namen incremental bin ich nicht wirklich glücklich. eventuell ist offset besser.

gruss
  andre

edit: man könnte das auch so umsetzen das nicht der offset im user reading landet sondern direkt der monoton wachsende counter. dann würde man sich in den abgeleiteten readings das addieren des offsets sparen.  welche verson würdet ihr bevorzugen? weiterhin könnte man das reading über den trigger direkt mit der quelle verknüpfen und {} ohne Inhalt lassen.
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 25 Juni 2013, 23:29:13
eine neuere version des patches. incremental in offset umbenannt und monotonic hinzugefügt. letzteres bildet direkt den korrigierten zähler ab.

gruss
  andre
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: rudolfkoenig am 26 Juni 2013, 10:04:11
Ich wuerde dein Patch mit Doku einchecken.

Das Problem was ich sehe ist, dass die meisten Anwendungen kumulierte Werte nur in einem Intervall (Tag/Monat/Jahr) benoetigen, und das ist damit noch nicht abgedeckt.

Bei der Darstellung mit SVG kann man die delta-h / delta-d Funktionen verwenden um sowas zu realisieren, insg. ist das fuer einen Anfaenger aber relativ kryptisch.
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 26 Juni 2013, 10:37:03
mein anwendungs fall ist den zählerstand auch bei einem reset zu retten und weiterlaufen zu lassen.

da der zähler bzw der offset direkt im reading steht kann man ihn aber ohne probleme einfach löschen und dadurch monatlich oder jährlich auf 0 setzen. mit ein wenig erweiterung denke ich bekommt man das auch automatisiert zum tages/monats/jahres wechsel hin. der patch wird dadurch natürlich etwas grösser.

wenn man die verknüpfung zwischen original und user reading in diesen fällen über den trigger macht ist es vielleicht insgesammt einfacher. etwa in der art:attr <device> userReadings monthly monatlich:counters.A {} monotonic:counters.A {}

das erste würde einen von counters.A abgeleiteten zähler darstellen der monatlich auf 0 gesetzt wird, das zweite einen der monoton wachsend weiterläuft auch bei reset.

was denkst du?

Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: rudolfkoenig am 26 Juni 2013, 21:31:21
Ich wuerde erstmal mit deinem urspruenglichen Version (dokumentiert) anfangen, und dann auf Reaktionen der Benutzer warten.
Oder auch: lieber erstmal einfach, vielleicht will es doch keiner kompliziert haben :)
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 27 Juni 2013, 23:33:54
hier wäre ein vorschlag für die doku zum patch von oben. den aus dem zweiten post.

gruss
  andre
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: rudolfkoenig am 03 Juli 2013, 21:09:57
Habs eingecheckt.

Kannst Du bitte kontrollieren, ob ich es richtig gemacht habe: da patch die Arbeit mit
patch: **** malformed patch at line 19: +        $result += $oldvalue if( $value < $oldvalue );

quittiert hatte (keine Ahnung wieso), musste ich es manuell machen.

In den docs habe ich ü & co durch &uuml; &co ersetzt wg. UTF-8.
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 03 Juli 2013, 21:41:31
ja. schaut richtig aus. danke.

an die umlaute hatte ich natürlich nicht gedacht. sorry.
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 07 September 2013, 12:30:59
ich hab noch mal etwas geändert damit das verhalten besser ist wenn offset oder monotonic nachträglich angelegt wird und das original reading schon > 0 ist.

gruss
  andre
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: rudolfkoenig am 07 September 2013, 13:58:48
Eingecheckt
Titel: Aw: userReadings patch für monoton wachsenden offset
Beitrag von: justme1968 am 07 September 2013, 14:24:08
danke
  andre