Numerische Werte formatieren

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
manes
Beiträge: 224
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Numerische Werte formatieren

Beitrag von manes »

ich habe ein numerisches Item, das ich über StateDiscription Pattern so formatiert habe, wie ich es schön finde. Leider scheint diese Formatvorgabe aber nicht übrall zu wirken. Wenn ich ein Widget damit baue, dann bekomme ich noch viele Nachkommastellen mit angezeigt auf dem Bildschirm. Wenn ich die Werte in einer Rule abfrage und dann an Telegram verschicke, sind es ebenso viele Nachkommastellen, die dann angezeigt werden. Wie kann man sowas formatieren, das es generell immer nur die Nachkommastellen werden, die man haben möchte? In meinem Fall statt 16, eben nur eine.
---------------------
liebe Grüße Manfred

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

Re: Numerische Werte formatieren

Beitrag von udo1toni »

Du musst im Widget auf den displayState zugreifen, dann wird das Pattern berücksichtigt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

manes
Beiträge: 224
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Re: Numerische Werte formatieren

Beitrag von manes »

Danke, das war es ...
---------------------
liebe Grüße Manfred

manes
Beiträge: 224
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Re: Numerische Werte formatieren

Beitrag von manes »

war es doch nicht ganz. Wenn ich in der Rule mit Javascript abfrage, dann ist displayState nicht bekannt.
---------------------
liebe Grüße Manfred

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

Re: Numerische Werte formatieren

Beitrag von udo1toni »

In einer Rule kannst Du den Status ja problemlos nach Wunsch formatieren.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

manes
Beiträge: 224
Registriert: 23. Jul 2020 17:49
Answers: 0
Wohnort: Kreis Wesel

Re: Numerische Werte formatieren

Beitrag von manes »

Danke für die klare und knappe Aussage. Nur hilft sie mir nicht weiter, weil.... Wie macht man sowas? ;-)

Code: Alles auswählen

var telegramAction = actions.get("telegram","telegram:telegramBot:XXXXXXXXXXXXX");
var nAlterzaehlerstand = itemRegistry.getItem('gasverbrauch').getState();
var nAltertagstand = itemRegistry.getItem('gasverbrauchtag').getState();

if (itemRegistry.getItem('MQTT_Stromzahler_Gas_Zahler').getState() == 'ON'){
   var nNeuerzaehlerstand = nAlterzaehlerstand + .1;
  var nNeuertagstand = nAltertagstand + .1;
  events.sendCommand('gasverbrauch',nNeuerzaehlerstand);
  events.sendCommand('gasverbrauchtag',nNeuertagstand);
  telegramAction.sendTelegram("alter/neuer Wert " + nAlterzaehlerstand + "/" + nNeuerzaehlerstand);
}
telegramAction.sendTelegram("Gaszähler sendet " + itemRegistry.getItem('MQTT_Stromzahler_Gas_Zahler').getState());
---------------------
liebe Grüße Manfred

Harka
Beiträge: 489
Registriert: 30. Apr 2021 13:13
Answers: 19

Re: Numerische Werte formatieren

Beitrag von Harka »

Moin,
wenn es das Nashorn (dein veraltetes Javascript) frisst

Code: Alles auswählen

itemRegistry.getItem('MQTT_Stromzahler_Gas_Zahler').getState().toFixed(1)
ansonsten runden ( Math.round(x) ggf. mit *10 und /10 )

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

Re: Numerische Werte formatieren

Beitrag von udo1toni »

Ja, Punkt 1 wäre runden auf eine Stelle:

Code: Alles auswählen

var nNeuerzaehlerstand = Math.round(nAlterzaehlerstand*10)/10 + .1;
Das Andere wäre die Darstellung:

Code: Alles auswählen

String.format("%.1f",myString)
liefert den Wert mit einer Nachkommastelle. Funktioniert natürlich nur, wenn der Wert als String vorliegt oder sich so interpretieren lässt - eine verwendete Variable muss als Objekt angelegt sein, bzw. sie darf kein Primitive sein.

Ein weiterer Punkt: sendCommand() sendet einen Befehl. Ich gehe stark davon aus, dass der Zählerstand openHAB nicht mehr verlässt und auch keine Rule getriggert werden soll. Mithin wäre postUpdate() hier korrekt.
Hintergrund: sendCommand() sendet einen Befehl, das Item generiert daraufhin auf dem Eventbus ein Event received command. openHAB errechnet außerdem den wahrscheinlichen neuen Status und sendet direkt noch ein postUpdate() hinterher, welches dann tatsächlich den Status des Items setzt (und seinerseits noch das Event received update und gegebenenfalls changed triggert). Man kann dieses autoupdate auch ausschalten (Item Metadaten autoupdate=false) und sollte das grundsätzlich bei allen Items tun, bei denen man einen echten Status vom Channel bekommt.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten