FHEM Forum

FHEM => Anfängerfragen => Thema gestartet von: Norbert.Roller am 17 Februar 2020, 20:09:15

Titel: wie runden in einem "at" / "set"
Beitrag von: Norbert.Roller am 17 Februar 2020, 20:09:15
Hi,
ich habe schon alle möglichen Varianten (Int, Round, alle Sorten Klammern) durch, aber komme nicht dahinter wie es geht.

Der wichtige Teil ist fett:

define CheckZisterne at +*00:05 {fhem("set Zisterne.24V on-for-timer 60");; fhem("sleep 50;; get Zisterne.mV;; set Zisterne.Volumen {(31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000)}")}

das funktionierte alles nicht:
set Zisterne.Volumen {round((31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000),1)}")}
set Zisterne.Volumen {int (31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000)}")}

in allen Fällen erscheint die Formel im "Zisterne.Volumen" und nicht der Wert.

Vielen Dank vorab.
Titel: Antw:wie runden in einem "at" / "set"
Beitrag von: Otto123 am 17 Februar 2020, 21:26:22
Hi,

innerhalb von set geht set magic - siehe auch Doku.

Bei set magic geht so etwas [device:reading] oder Perl {}
In Perl geht sowas nicht [device:reading] - da musst Du Perl Funktionen nehmen ReadingsVal("Device","Reading","Default")
Wenn Du im set mit Perl arbeiten willst, musst Du es zusätzlich klammern -> set Device {(Perlausdruck)}

Du nimmst aber nur Perl, also musst Du alles einheitlich mit Perlfunktionen und mit ReadingsVal arbeiten.

Deine Konstrukt stirbt also schon vor dem Runden :)

sowas geht, aber meines Wissens nicht mit int (hab ich aber nie probiert)
set Zisterne.Volumen {(31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000)}
das geht sicher nur so (nicht getestet)
set Zisterne.Volumen {(int(31416*99*99*ReadingsNum("Zisterne.mV","state",99)/ReadingsNum("Zisterne_Faktor","state",99)/1000))}

Wenn das funktioniert brauchst Du auch nicht komplett in Perl zu arbeiten, aber meist ist das besser/übersichtlicher!

define CheckZisterne at +*00:05 set Zisterne.24V on-for-timer 60;;sleep 50;; get Zisterne.mV;; set {(int(31416*99*99*ReadingsNum("Zisterne.mV","state",99)/ReadingsNum("Zisterne_Faktor","state",99)/1000))}Das get verwirrt mich, das wird nicht sinnvoll sein.

Gruß Otto
Titel: Antw:wie runden in einem "at" / "set"
Beitrag von: Damian am 17 Februar 2020, 21:37:23
Zitatset Zisterne.Volumen {(round((31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000),1))}

sollte klappen auch innerhalb von fhem().
Titel: Antw:wie runden in einem "at" / "set"
Beitrag von: Otto123 am 18 Februar 2020, 10:17:40
Wieder was gelernt :)
Aber genau genommen kann man sogar noch ein Klammerpaar sparen :) der Arithmetische Ausdruck an sich muss nicht nochmal komplett geklammert werden.
set Zisterne.Volumen {(round(31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000,1))}

Gruß Otto
Titel: Antw:wie runden in einem "at" / "set"
Beitrag von: herrmannj am 18 Februar 2020, 10:53:29
Zitat von: Damian am 17 Februar 2020, 21:37:23
sollte klappen auch innerhalb von fhem().
Round ist nicht im Core. Besser int oder sprintf
Titel: Antw:wie runden in einem "at" / "set"
Beitrag von: Norbert.Roller am 18 Februar 2020, 12:28:58
Zitat von: Damian am 17 Februar 2020, 21:37:23
sollte klappen auch innerhalb von fhem().

Vielen Dank. Genau so - rote Klammern einfügen - hat es funktioniert.