Wie man die Werte der Items richtig formatiert wird in OpenHAB gut erklärt und es gibt genügend Beispiele.
Was aber, wenn man die Werte in Texte einfügen möchte um Beispielsweise Notifications zu erzeugen.
Eine Zusammenfassung der wichtigsten Infos zur Formatierung von Zahlen.

Und so geht’s nicht (so gut)

var String text = "Die Wassertemperatur beträgt " + item_wasser.state + " °C";

So wäre es am einfachsten, richtig?
Das Problem: Die Zahl wird dann entsprechend der Sprache des Betriebssystems formatiert, und das muss nicht zwingend die gewünschte Sprache sein. Zudem kann so eine Zahl schon mal lange werden:

Die Wassertemperatur beträgt 47.43278472634728427364872 °C

Besser:

OpenHAB gewährt direkten Zugriff auf die Javaklasse String, mithilfe der „::“ Notation kann direkt auf die statischen Methoden der Stringklasse zugegriffen werden. D.h. mit „String::format(format, data)“ haben wir die Möglichkeit die Zahl von Java formatieren zu lassen. Das ist sicher, stabil und spart Arbeit 🙂
Und: Diese Methode wurde von OpenHAB mit der „locale“ also der lokalen Sprache des Anwenders vorbereitet, die Ausgabe erfolgt also der landesüblichen Formatierung.

var String text = String::format("Die aktuelle Wassertemperatur beträgt %.1f °C", (item_wasser.state as DecimalType).floatValue());

Das liest sich etwas sperrig, funktioniert aber zuverlässig.
Im Detail:

Parameter 1: „text text text %.1f text text“
Parameter 2: (item_wasser.state as DecimalType).floatValue()

In einen Text wird hier %.1f eingefügt. Das steht für:
% = Platzhalter für einen Parameter, an dieser Stelle wird eingefügt
.1 = Formatierung: eine Nachkommastelle
f = Float – also eine Fließkommazahl

Eingefügt wird der Wert von item_wasser. Aber nicht direkt über state, sondern:

(item_wasser.state as DecimalType)
Wandelt den Wert vom Typ „State“ in einen vom Typ „DecimalType“ um.

(…).floatValue()
Gibt den Wert als primitiver Datentyp „float“ zurück. Dieser Datentyp ist als Eingabewert für String::format() zwingend erforderlich.

Die Wassertemperatur beträgt 47,4 °C

So einfach geht das 🙂

Categories:

Tags:

Noch keine Kommentare

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Kategorien
Produktplatzierungen

In diesem Beitrag befinden sich Produktplatzierungen. Dabei handelt es sich um Produkte, welche ich aus eigener Motivation heraus gekauft und selbstverständlich bezahlt habe. Für die Platzierung in meinen Beiträgen erhalte ich keinerlei Gegenleistung von Seiten des Herstellers.
Die verlinkten Produkte sind zum überwiegenden Teil provisioniert, d.h. ich erhalte beim Verkauf eine kleine Provision.