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 🙂
Noch keine Kommentare