MQTT Float Rundungsfehler...

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Cali
Beiträge: 9
Registriert: 27. Sep 2019 10:59
Answers: 0

MQTT Float Rundungsfehler...

Beitrag 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
von udo1toni » 9. Jan 2023 02:29
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
Gehe zur vollständigen Antwort

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT Float Rundungsfehler...

Beitrag 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
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Cali
Beiträge: 9
Registriert: 27. Sep 2019 10:59
Answers: 0

Re: MQTT Float Rundungsfehler...

Beitrag 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
Zuletzt geändert von Cali am 19. Jan 2023 14:00, insgesamt 1-mal geändert.

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT Float Rundungsfehler...

Beitrag von udo1toni »

Wie gesagt, im Label des Channels hat das nichts zu suchen.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Cali
Beiträge: 9
Registriert: 27. Sep 2019 10:59
Answers: 0

Re: MQTT Float Rundungsfehler...

Beitrag 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 ?

Benutzeravatar
udo1toni
Beiträge: 15248
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: MQTT Float Rundungsfehler...

Beitrag 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...)
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten