Habe eine Smartmeter über MQTT in fhem eingebunden Läuft soweit alles Gut.
Manchmal bekomme ich aber Werte mit 14 Kommastellen und ich finde keinen Weg diese auf zwei zu reduzieren
Hier die State ausgabe:
MQTT2_SmartMeter
Momentanleistung: 756 W
SpannungL1: 234.20000000000002 V
SpannungL2: 232.5 V
SpannungL3: 229.8 V
StromL1: 1.32 A
StromL2: 0.99 A
StromL3: 1.77 A
Gesamt Verbrauch: 930253 W
Hier StateFormat:
{"Momentanleistung: ".ReadingsVal($name,"Momentanleistung",0)." W <br> SpannungL1: ".ReadingsVal($name,"SpannungL1",0)." V <br> SpannungL2: ".ReadingsVal($name,"SpannungL2",0)." V <br> SpannungL3: ".ReadingsVal($name,"SpannungL3",0)." V <br> StromL1: ".ReadingsVal($name,"StromL1",0)." A <br> StromL2: ".ReadingsVal($name,"StromL2",0)." A <br> StromL3: ".ReadingsVal($name,"StromL3",0)." A<br> Gesamt Verbrauch: ".ReadingsVal($name,"WirkenergieP",0)." W"}
und Hier die readingList:
SmartMeter:Smartmeter/WirkenergieP:.* WirkenergieP
SmartMeter:Smartmeter/WirkenergieN:.* WirkenergieN
SmartMeter:Smartmeter/MomentanleistungP:.* MomentanleistungP
SmartMeter:Smartmeter/MomentanleistungN:.* MomentanleistungN
SmartMeter:Smartmeter/Momentanleistung:.* Momentanleistung
SmartMeter:Smartmeter/SpannungL1:.* SpannungL1
SmartMeter:Smartmeter/SpannungL2:.* SpannungL2
SmartMeter:Smartmeter/SpannungL3:.* SpannungL3
SmartMeter:Smartmeter/StromL1:.* StromL1
SmartMeter:Smartmeter/StromL2:.* StromL2
SmartMeter:Smartmeter/StromL3:.* StromL3
SmartMeter:Smartmeter/Leistungsfaktor:.* Leistungsfaktor
Hab schon einiges mit round usw probiert ohne erfolg
Kann mir da jemend weiterhelfen??
Beispiel:
{sprintf "%.2f",123.456789}
Zitat von: Otto123 am 13 Dezember 2021, 23:01:28
Beispiel:
{sprintf "%.2f",123.456789}
Wo sollte ich das einfügen?
Zitats/ReadingsVal($name,"SpannungL1",0)/ReadingsNum($name,"SpannungL1",0,2)/g
Ich würde vorschlagen in stateFomat ReadingsNum (wie oben gezeigt) statt ReadingsVal zu verwenden, einfach nur weil die Angabe des vierten Parameter das gewünschte Verhalten ermöglicht.
ZitatReadingsNum(<devicename>,<reading>, <defaultvalue>,<round>)
Gibt die erste Zahl aus dem Readingswert zurück. Falls <round> spezifiziert ist, wird sie auf diese Anzahl von Dezimalstellen gerundet und ggf. mit 0 aufgefüllt, wenn <round> größer ist als die Anzahl der Dezimalstellen.
Um die Frage zu beantworten:
Zitat von: ChrisA4 am 13 Dezember 2021, 23:08:34
Wo sollte ich das einfügen?
Der Code war als Beispiel für die FHEM Kommandozeile gedacht, dort eingeworfen erschließt sich das Ergebnis ;)
Aber speziell ansttatt dem: ReadingsVal($name,"SpannungL1",0)
dies hier sprintf "%.2f",ReadingsVal($name,"SpannungL1",0)
Vielleicht braucht man es ja mal an anderer Stelle
Thomas sein Vorschlag ist viel besser und kürzer :D
Danke Euch mit ReadingsNum hats funktioniert
Ich habe lange gesucht nach einer einfachen Möglichkeit das Ergebnis einer Rechnung so auszugeben das immer nur eine Zahl hintern Komma ist. Wenn eine Null rauskommt hinterm Komma verschwand immer die Zahl und die Formatierung wirkte so unordentlich.
Die Lösung ist jetzt:
(sprintf "%.1f",(ReadingsVal($name,"BMP280_SeaPressure","X")-0.8))
Einfach Danke
Wenn Du mit dem Ergbenis rechnen möchtest, solltest Du besser ReadingsNum() verwenden anstatt ReadingsVal().
ReadingsNum($name,"BMP280_SeaPressure",0)
ist mcferryn ein Bot und erzählt uns KI Quark?
Zumindest ist seine Aussage für mich nicht nachvollziehbar. ;)
Wenn man bei jeder hier im Forum auftauchenden, nicht nachvollziehbaren Aussage einen Bot vermuten und entsprechend reagieren würde, wäre das Forum in kürzester Zeit mindestens 50% kleiner...