FHEM Forum

FHEM => Automatisierung => Thema gestartet von: Gisbert am 14 Dezember 2022, 07:03:42

Titel: Letztes Reading am Tag speichern, wie?
Beitrag von: Gisbert am 14 Dezember 2022, 07:03:42
Hallo zusammen,

ich benötige das letzte Reading <last_reading> am Tag, da ich mit dessen Hilfe die prozentuale Änderung am nächsten Tag berechnen will. Am nächsten Tag gibt es dann wieder ein neues <last_reading> usw.
Ich habe es mit at versucht, bin aber gescheitert:
defmod lastReading at *00:00:05 setreading <Device> last_reading ReadingsVal("Device","reading","")
Als Ergebnis bekomme ich exakt den String, aber nicht den erhofften Wert.
last_reading ReadingsVal("Device","reading","")

Die commandref habe ich befragt, aber ich hab keine Idee gefunden, die mir weiterhilft.

Gibt es für meine Anwendung eine Lösung?

Viele Grüße Gisbert
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Beta-User am 14 Dezember 2022, 07:14:22
Die Lösung sollte in der Commandref unter "set magic" zu finden sein.

Du versuchst Perl und "normale FHEM-Kommandos" zu mischen, und das klappt nur, wenn man die Regeln für set magic einhält.
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: KölnSolar am 14 Dezember 2022, 07:43:05
Hi Gisbert,

ich mache es sodefmod Reset_Daily at *00:00:15 {fhem("setreading zaehler Lasttotal_feed ".ReadingsVal("zaehler","total_feed",0).";;setreading zaehler Lasttotal_consumption ".ReadingsVal("zaehler","total_consumption",0).")}


Grüße Markus
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Otto123 am 14 Dezember 2022, 07:57:51
Hallo Gisbert,
Zwei Varianten mit set magic:
setreading <Device> last_reading [Device:reading]
setreading <Device> last_reading {( ReadingsVal("Device","reading","") )}

Gruß Otto
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Gisbert am 14 Dezember 2022, 20:36:20
Hallo zusammen,

vielen Dank für die zahlreichen Anregungen, die ich alle in diversen Varianten probiert hatte. Prinzipiell hatte ich auch bereits die gleichen Ideen, nur leider ohne Erfolg.

Hier nun das eigentliche Reading, was ich anfänglich verfremdet habe. Ich glaube, dass es etwas mit dem Reading zu tun hat. Das Reading wird in einem Device vom Type Shares erzeugt und beginnt mit einem "^", es handelt sich um den DAX-Index.
defmod lastIndex at *00:00:30 setreading Index _GDAXI_last { (ReadingsVal("Index","^GDAXI_last","") )}
Ergebnis:
_GDAXI_last { (ReadingsVal("Index","^GDAXI_last","") )}

Habt ihr irgendeine Idee, was man da machen kann?

Viele Grüße Gisbert
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Otto123 am 14 Dezember 2022, 20:41:52
Das Reading darf nicht so heißen:
Zitatbad reading name '^GDAXI_last' (allowed chars: A-Za-z/\d_\.-)
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Beta-User am 15 Dezember 2022, 00:13:20
Davon abgesehen dürfte auch das Leerzeichen zwischen den "set-magic-Klammern"  ein Problem sein....
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Gisbert am 15 Dezember 2022, 07:27:28
Hallo Markus, Jörg und Otto,

es liegt eindeutig an dem "^", das mir die Show stiehlt.
Positiv ist, dass ich ein userReading ohne das "^" erzeugen kann, welches auch den update-Zyklus des Moduls überlebt:
GDAXI_last {ReadingsVal($name,'^GDAXI_last','')},\

Leider überleben die durch das setreading erzeugten Readings den update-Zyklus nicht.
Ich muss dann wohl einen Umweg über ein Dummy gehen oder, falls das funktioniert, mit setreading Readings im at-Device erzeugen.
Falls ihr eine Idee habt, Readings zu erhalten, die das Modul partout nicht behalten will, dann gerne her damit.

Viele Grüße Gisbert
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Otto123 am 15 Dezember 2022, 10:24:30
Zitat von: Beta-User am 15 Dezember 2022, 00:13:20
Davon abgesehen dürfte auch das Leerzeichen zwischen den "set-magic-Klammern"  ein Problem sein....
Stimmt, da wollte ich es noch im Post schön machen  :'(
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Beta-User am 15 Dezember 2022, 10:32:34
Zitat von: Otto123 am 15 Dezember 2022, 10:24:30
Stimmt, da wollte ich es noch im Post schön machen  :'(
So wie du das geschrieben hattest, dürfte es funktionieren, aber Gisbert hat noch ein Leerzeichen eingefügt...

Zitat von: Gisbert am 15 Dezember 2022, 07:27:28
Leider überleben die durch das setreading erzeugten Readings den update-Zyklus nicht.
Was ist das für ein Modul, das alle Readings löscht? (Bei sowas sollte man den Maintainer fragen, ob das noch zeitgemäß ist! Dto. für die unzulässigen Reading-Namen. Klingt danach, als würden nicht die internen Routinen genutzt, sondern noch direkt im Device-Hash geschrieben. Auch nicht mehr zeitgemäß...)

PS: userReadings ohne Trigger sind nur ok, wenn alle Readings per bulk update auf einmal aktualisiert werden...
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Otto123 am 15 Dezember 2022, 10:43:20
Zitat von: Beta-User am 15 Dezember 2022, 10:32:34
So wie du das geschrieben hattest, dürfte es funktionieren, aber Gisbert hat noch ein Leerzeichen eingefügt...
Stimmt, habe ich vielleicht noch nie so explizit getestet:
Funktioniert:
setreading rgr_Bewohner reading {(ReadingsVal('rgr_Bewohner','state','error'))}
setreading rgr_Bewohner reading {( ReadingsVal('rgr_Bewohner','state','error') )}

Funktioniert nicht!
setreading rgr_Bewohner reading { (ReadingsVal('rgr_Bewohner','state','error')) }

Man muss also bei set magic Perlmodus darauf achten, die notwendige zusätzliche runde Klammer ohne Leerzeichen zu schreiben: {( Perlausdruck kann Leerzeichen enthalten )}
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: TomLee am 15 Dezember 2022, 10:45:45
Zitat von: Beta-User am 15 Dezember 2022, 10:32:34
Was ist das für ein Modul, das alle Readings löscht?

Zitat von: Gisbert am 14 Dezember 2022, 20:36:20
... Das Reading wird in einem Device vom Type Shares erzeugt ...
Titel: Antw:Letztes Reading am Tag speichern, wie?
Beitrag von: Beta-User am 15 Dezember 2022, 10:49:43
Zitat von: TomLee am 15 Dezember 2022, 10:45:45
Zitat... Das Reading wird in einem Device vom Type Shares erzeugt ...
OK, dann mische ich mich wohl besser nicht ein, der Maintainer wird schon wissen, warum das so sein muss...