Reading runden bei Aufruf über Perl-Befehl

Begonnen von heiko.ne, 12 Februar 2019, 19:59:47

Vorheriges Thema - Nächstes Thema

heiko.ne

Hallo zusammen,

ich wollte fragen, wie es mir am einfachsten gelingt, bei dem nachfolgenden Aufruf das Reading "Dachgeschoss_Temperatur:state" zu runden:
fhem("set TelegramBot message \@$sender [Dachgeschoss_Temperatur:state]°C")

Ich suche eine Lösung, die einfach vor dem Reading integriert werden kann, da ich sehr viele solcher Aufrufe habe.
Z.B. so fhem("set TelegramBot message \@$sender runden([Dachgeschoss_Temperatur:state])°C")

Bevor jemand reflexartig mich darauf hinweist  :o:
Nein, die Forum-Suche hat mir bisher keine Lösung geliefert und auch mit der Commandref werde ich diesbezüglich nicht fündig.
Ich freue mich aber, wenn mir jemand einen Fingerzeig geben kann, falls es doch irgendwo dort steht.

Gruß
Heiko

justme1968

die commandref hilft aber doch :)

Zitat[device:name] with the reading, internal or attribute of the device, if both device and the reading, internal or attribute exists.
You can use the r:, i: or a: prefix to restrict the search to one type, analogue to the devspec filtering.
The suffix :d retrieves the first number
The suffix :i retrieves the integer part of the first number.
The suffix :r<n> retrieves the first number and rounds it to <n> decimal places. If <n> is missing, then rounds it to one decimal place.
The suffix :t returns the timestamp (works only for readings)
The suffix :sec returns the number of seconds since the reading was set.

einfach bei set schauen.
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968

heiko.ne

Ein dickes Dankeschön für den Hinweis auf die richtige Stelle in der Commandref von Dir, justme1968!
Das hat schon mal sehr geholfen.

Ich mache es jetzt also so:
fhem("set TelegramBot message \@$sender [Dachgeschoss_Temperatur:state:r]°C")

Da die aktuelle Messung einen Wert von 18.82°C hat ergibt sich damit ein angezeigter Wert von 19°C. Das ist also was ich letztlich wollte.

Die Commandref beschreibt aber:
ZitatDas Suffix :r<n> extrahiert die erste Zahl, und rundet sie auf <n> Dezimalstellen. Falls <n> fehlt, dann wird auf eine Dezimalstelle gerundet.

So hätte ich eigentlich als Ergebnis 18.8°C erwartet und bei ":r2" dann entsprechend 18.82°C usw.
Aber ich erhalte immer 19°C als Ausgabe, egal ob ich ":r" oder ":r2" verwende.

Kann das jemand bestätigen bzw. mich aufklären?

Gruß
Heiko

heiko.ne


justme1968

zumindest mit zwei dummys kann ich das nicht nachstellen. bei mir funktioniert das wie erwartet:define rr1 dummy
define rr2 dummy
inform timer rr.
setreading rr1 state 1.23456
2019-02-17 13:35:20 dummy rr1 1.23456
set rr2 [rr1:state:r]
2019-02-17 13:35:37 dummy rr2 1.2
set rr2 [rr1:state:r2]
2019-02-17 13:35:55 dummy rr2 1.23
set rr2 [rr1:state:r0]
2019-02-17 13:36:13 dummy rr2 1
hue, tradfri, alexa-fhem, homebridge-fhem, LightScene, readingsGroup, ...

https://github.com/sponsors/justme-1968