Numerische Werte formatieren
-
- Beiträge: 224
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
Numerische Werte formatieren
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
liebe Grüße Manfred
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Numerische Werte formatieren
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
-
- Beiträge: 224
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
-
- Beiträge: 224
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
Re: Numerische Werte formatieren
war es doch nicht ganz. Wenn ich in der Rule mit Javascript abfrage, dann ist displayState nicht bekannt.
---------------------
liebe Grüße Manfred
liebe Grüße Manfred
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Numerische Werte formatieren
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
-
- Beiträge: 224
- Registriert: 23. Jul 2020 17:49
- Wohnort: Kreis Wesel
Re: Numerische Werte formatieren
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
liebe Grüße Manfred
-
- Beiträge: 489
- Registriert: 30. Apr 2021 13:13
Re: Numerische Werte formatieren
Moin,
wenn es das Nashorn (dein veraltetes Javascript) frisst
ansonsten runden ( Math.round(x) ggf. mit *10 und /10 )
wenn es das Nashorn (dein veraltetes Javascript) frisst
Code: Alles auswählen
itemRegistry.getItem('MQTT_Stromzahler_Gas_Zahler').getState().toFixed(1)
- udo1toni
- Beiträge: 15244
- Registriert: 11. Apr 2018 18:05
- Wohnort: Darmstadt
Re: Numerische Werte formatieren
Ja, Punkt 1 wäre runden auf eine Stelle:
Das Andere wäre die Darstellung:
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.
Code: Alles auswählen
var nNeuerzaehlerstand = Math.round(nAlterzaehlerstand*10)/10 + .1;
Code: Alles auswählen
String.format("%.1f",myString)
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