Seite 1 von 1

Temperaturwert formatieren 20.26 °C in 2026

Verfasst: 11. Dez 2021 20:03
von Lux73
Guten Abend,

ich benötige Hilfe bei einer eigtl. recht einfachen Umrechnung eines Temperatursensor Wertes:

Ausgangspunkt 20.26 °C sollen ohne Punkt und Komma in eine entsprechende 4 stellige Zahl umgerechent werden, hier dann 2026

Das entsprechende Item:

Code: Alles auswählen

Number:Temperature	Sensor_Wohnzimmer_Temperatur	"Sensor Wohnzimmer Temperatur"	<temperature>			(gWohnzimmer,gInfluxDB,gRRD4J,gChartTemperatur,gChartWohnzimmer)	{channel="mqtt:topic:sensor_temp_wz:temperature"}
die Rule:

Code: Alles auswählen

//#####################################
rule "cron Heizung Sync Wohnzimmer"
when
	Time cron "0 0/30 * * * ?"																																		//##### alle 30 Minuten ausführen
then
	if ((Heizung.state) == ON) {
		if ((Heizung_aktiv.state) == ON) {
			Thermostat_WZ_Ext_Temp_Sensor.sendCommand(((Sensor_Wohnzimmer_Temperatur.state as Number) * 10).intValue)
		}
	}
end
jetzt habe ich aber das Problem das mein Temperaturwert nach umrechnung völlig falsche Wert umrechnet:

Code: Alles auswählen

2021-12-11 18:38:16.507 [INFO ] [openhab.event.ItemStateChangedEvent ] - Item 'Sensor_Wohnzimmer_Temperatur' changed from 20.07 °C to 20.06 °C
2021-12-11 18:42:00.499 [INFO ] [openhab.event.ItemCommandEvent      ] - Item 'Thermostat_WZ_Ext_Temp_Sensor' received command 2932
eigtl sollte bei der Umrechnung 2006 rauskommen bei einer Temperatur von 20.06 °C - umgerechnet werden aber 2932

Mir ist jetzt allerdings total unklar wie und warum ein so falscher Wert ausgegeben wird?!? Nachdem ich jetzt schon gut 3h ergebnislos rumprobiere sehe ich den Wald vor lauter Bäumen nicht mehr.

Hintergrund: ich möchte einen Korrekturwert zu meinem Thermostat senden welcher dieser dann als Temperaturoffset nutzt.

Grüße
Michael

Re: Temperaturwert formatieren 20.26 °C in 2026

Verfasst: 11. Dez 2021 20:18
von udo1toni
Dein Problem ist UoM. 20,06 °C sind 293,21 K, mal 10 sind 2932.

Du kannst auch im Log sehr schön sehen, dass openHAB hier die Einheit °C mit ausgibt.
Deine Rlue muss so aussehen:

Code: Alles auswählen

rule "cron Heizung Sync Wohnzimmer"
when
    Time cron "0 0/30 * * * ?" // alle 30 Minuten
then
    if(Heizung.state == ON) {
        if(Heizung_aktiv.state == ON) {
            Thermostat_WZ_Ext_Temp_Sensor.sendCommand(((Sensor_Wohnzimmer_Temperatur.state as Number).floatValue * 100).intValue)
        }
    }
end
.floatValue wandelt das Number Objekt explizit nach Float.
Float Werte halten keine Einheit. Deshalb hat der Wert dann auch keine Einheit mehr und das anschließende Rechnen funktioniert wie erwartet. Bei zwei Nachkommastellen muss man natürlich mit 100 multiplizieren ;)

Re: Temperaturwert formatieren 20.26 °C in 2026

Verfasst: 11. Dez 2021 20:37
von Lux73
Hallo Udo,

vielen Dank - das mein Problem UoM sein könnte hatte ich schon in Verdacht. Allerdings wäre ich nicht so schnell auf die Celsius <-> Kelvin Umrechnung gekommen :?

ja, mein Multiplikator 10 war definitiv auch falsch - aber mit dem richtigen Multi von 100 in meiner Rule passte der Wert nunmal so gar nicht... :oops:

Hab das .floatValue eingefügt und die Rule funktioniert dank deiner Hilfe auf Anhieb :mrgreen:

Vielen Dank nochmal und dir noch einen angenehmen Abend!

Grüße
Michael