Seite 1 von 1

MQTT Float Rundungsfehler...

Verfasst: 8. Jan 2023 16:11
von Cali
Hallo Zusammen,

ich möchte gerne eine über die Stitmap generierte Floatzahl über MQTT ausgeben, doch habe mit dem Rundungsfehler ein Problem.

mqtt.things:

Code: Alles auswählen

Thing mqtt:topic:Hydroponik_01 "Hydroponik_01" (mqtt:broker:Broker) @ "MQTT"  {
    Type number : Hydroponik_01_Set_PH_Tank "PH Wert im Tank [%.1f]" [ commandTopic="Hydroponik_01/Set_PH_Tank"]
}
mqtt.items

Code: Alles auswählen

Number Hydroponik_01_Set_PH_Tank "PH Wert [%.1f]" { channel="mqtt:topic:Hydroponik_01:Hydroponik_01_Set_PH_Tank" }
Home.sitemap

Code: Alles auswählen

Setpoint item=Hydroponik_01_Set_PH_Tank label="PH Wert im Tank: [%.1f]" icon="colorlight" step=0.1 minValue=5 maxValue=9 
Nach meiner Recherche hier im Forum müsste ich doch eigendlich nur bei dem Item [%.1f] angeben um die Nachkommerzahlen zu begrenzen und das funktioniert auch in der sitemap, jedoch nicht bei der Ausgabe mit MQTT, dort bekomme ich fast immer 15 Nachkommastellen angezeigt...

Ich bin grade blind für den Fehler den ich mache...

Hat vielleicht bitte jemand einen Tip für mich, wie ich auch die Ausgabe über MQTT auf 1 Nachkommastelle begrenzen kann ?

Viele Grüße und danke Für eure Mühe

Cali

Re: MQTT Float Rundungsfehler...

Verfasst: 9. Jan 2023 02:29
von udo1toni
Die Angabe von "[%.1f]" bezieht sich ausschließlich auf Item Label, und da ausschließlich auf Items, welche über Textdateien definiert werden.
Nun ja, in der Sitemap kannst Du das Item Label ebenfalls anpassen und diese Schreibweise verwenden (bezieht sich aber immer noch auf das Item Label...).
Das Label des Channels ist nur für die Anzeige in den diversen Listen interessant, und natürlich als Quelle für automatisch generierte Itemnamen.

Weiterhin bezieht sich die Formatierung im Label ausschließlich auf die Anzeige, nicht aber auf den Status selbst. Wenn Du so eine Formatierung nutzt und das Item in einer Rule verwendest, bekommst Du dennoch den unformatierten Wert.

Wenn die Nachkommastellen tatsächlich in einem nachgelagerten System Probleme verursachen sollten, könntest Du versuchen, ob Du über den Parameter formatBeforePublish etwas ausrichten kannst. Dürfte zu den Advanced Options gehören

Re: MQTT Float Rundungsfehler...

Verfasst: 9. Jan 2023 11:45
von Cali
Vielen Dank für die sehr Schnelle Antwort, ich glaube es bringt mich auf die Richtige spur.

mqtt.things:

Code: Alles auswählen

Thing mqtt:topic:Hydroponik_01 "Hydroponik_01" (mqtt:broker:Broker) @ "MQTT"  {
    Type number : Hydroponik_01_Set_PH_Tank "PH Wert im Tank [%.1f]" [ commandTopic="Hydroponik_01/Set_PH_Tank", formatBeforePublish="{ [%.1f]}"]
    }
Dabei war bisher egal ob ich %f oder [%.1f] eingegeben hatte, ich hoffe ich finde noch die passende formatierung.

Die Ausgabe im MQTT ist die folgendende:

Code: Alles auswählen

{ "Hydroponik_01_Set_PH_Tank" : 7.500000 }
Ich werde noch etwas damit experimentieren, immerhin ist der Rundungsfehler weg durch die Kürzung auf 6 Stellen nach dem Komma, wenn ich nicht schaffe nur die float Zahl auszugeben, dann kann ich wenigstens, da ja die Zeichenlänge immer gleich ist, das im MQTT Client ( ESP32 ) entsprechend filtern.

Hat mich schon weiter gebracht, danke.

Viele Grüße

Cali

Re: MQTT Float Rundungsfehler...

Verfasst: 9. Jan 2023 13:00
von udo1toni
Wie gesagt, im Label des Channels hat das nichts zu suchen.

Re: MQTT Float Rundungsfehler...

Verfasst: 18. Jan 2023 19:56
von Cali
Ich habe es hin bekommen mit der Formatierung, sie muss so aussehen:

mqtt.things:

Code: Alles auswählen

Type number : Hydroponik_01_Set_PH_Tank "PH Wert im Tank" [ commandTopic="Hydroponik_01/Set_PH_Tank", formatBeforePublish="%.1f"]
Danke für die Hilfe, das formatBeforePublish war die Lösung.

Ich finde nur nicht, wo ich das Thema als erledigt markieren kann ?

Re: MQTT Float Rundungsfehler...

Verfasst: 18. Jan 2023 22:57
von udo1toni
Du kannst eines der Postings gewöhnlich als Beste Antwort markieren (das sollte der Threadersteller grundsätzlich dürfen... das ist der Knopf mit dem Haken drin...)