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.
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
Zitatset Zisterne.Volumen {(round((31416*99*99*[Zisterne.mV:state]/[Zisterne_Faktor:state]/1000),1))}
sollte klappen auch innerhalb von fhem().
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
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
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.