Seite 1 von 1

Wie in JS-Rule aus .getitem die UoM (Einheit) entfernen?

Verfasst: 10. Aug 2021 01:05
von Jensemann_P
Bezug nehmend auf mein Thema "Wie globale Variable Speichern", dass ja mittlerweile schon in viel konkreteren code abdriftet, habe ich folgende Frage:

Wie kann ich in einem JS-Script einen Wert, den ich mir mit so etwas hole:

Code: Alles auswählen

tempstr = itemRegistry.getItem('HTHeizraum_Temperature').getState()
und der dann eben nicht nur "24.3" sondern "24.3 °C" enthält numerisch weiterverarbeiten? Ein .toString scheint der Interpreter nicht zu mögen.
Ich stehe hier Syntax/Methodentechnisch gerade total auf dem Schlauch und probiere seit 2h mehr oder weniger blind herum. Viele ähnliche Beispiele beziehen sich auf DSL.

Weiss vl jemand wie das hier geht?

LG
Jens

Re: Wie in JS-Rule aus .getitem die UoM (Einheit) entfernen?

Verfasst: 10. Aug 2021 09:41
von peter-pan
Hast du schon mal:

Code: Alles auswählen

tempfloat = itemRegistry.getItem('HTHeizraum_Temperature').getState().floatValue()
probiert ? (ungetestet)

Edit:

Evtl. auch:

Code: Alles auswählen

tempfloat = parseFloat(itemRegistry.getItem('HTHeizraum_Temperature').getState())
(auch ungetestet)

Re: Wie in JS-Rule aus .getitem die UoM (Einheit) entfernen?

Verfasst: 10. Aug 2021 13:56
von Jensemann_P
Werde ich heute Abend checken, danke schön Mal für den Tip!

Re: Wie in JS-Rule aus .getitem die UoM (Einheit) entfernen?

Verfasst: 10. Aug 2021 15:43
von peter-pan
Kein Problem. Hab ich gerne gemacht. Ich hatte vorher auch noch nichts mit JS gemacht.
Hab's aber jetzt noch in einem kleinen Script selbst mal ausprobiert. Das war jetzt eine gute Übung. ;)

Script:

Code: Alles auswählen

var logger = Java.type("org.slf4j.LoggerFactory").getLogger("EcmaTest");
tempfloat = parseFloat(itemRegistry.getItem('OC_WaF_Current_Temperature').getState());
logger.warn("parseFloat: " + tempfloat);
tempfloat = itemRegistry.getItem('OC_WaF_Current_Temperature').getState().floatValue();
logger.warn("floatValue: " + tempfloat);
Logger:

Code: Alles auswählen

2021-08-10 15:28:23.367 [WARN ] [EcmaTest                            ] - parseFloat: 23.07
2021-08-10 15:28:23.370 [WARN ] [EcmaTest                            ] - floatValue: 23.06999969482422

Re: Wie in JS-Rule aus .getitem die UoM (Einheit) entfernen?

Verfasst: 11. Aug 2021 01:02
von Jensemann_P
Danke dir, mit parseFloat() funktioniert es jetzt blendend!

LG
Jens