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
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.
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
Hallo Gisbert,
Zwei Varianten mit set magic:
setreading <Device> last_reading [Device:reading]
setreading <Device> last_reading {( ReadingsVal("Device","reading","") )}
Gruß Otto
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
Das Reading darf nicht so heißen:
Zitatbad reading name '^GDAXI_last' (allowed chars: A-Za-z/\d_\.-)
Davon abgesehen dürfte auch das Leerzeichen zwischen den "set-magic-Klammern" ein Problem sein....
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
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 :'(
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...
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 )}
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 ...
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...