Seite 1 von 1

Konvertierungsfehler Float Dezimaltyp

Verfasst: 11. Nov 2023 12:03
von kaloschke
Hallo,

ich möchte meine EVO-Thermostaten in einer Rule steuern, erhalte dabei aber folgende Warnung:

Code: Alles auswählen

HomematicThingHandler] - Can't convert type DecimalType with value '21.0' to FLOAT value with QuantityTypeConverter for '002A9D89AF9ACC:1#SET_POINT_TEMPERATURE', please check the item type and the commands in your scripts
Ich habe eine Item

Code: Alles auswählen

Number TempTarget     {channel="homematic:HmIP-eTRV-E:27debe8d89:002A9D89AF9ACC:1#SET_POINT_TEMPERATURE", unit="°C"}
und in meiner Rule steht

Code: Alles auswählen

rule "Heizung Update"
    when 
        Item TempTarget changed
    then
        val tempVal = (TempTarget.state as Number)
        if (tempVal < 20) { ...  }
end
Dezimaltyp, Float, Number, ... Da gibt's so viel :cry:

Viele Grüße

Re: Konvertierungsfehler Float Dezimaltyp

Verfasst: 11. Nov 2023 15:22
von kaloschke
Oh. Sehe gerade, dass es schon hier behandelt wurde.

Re: Konvertierungsfehler Float Dezimaltyp

Verfasst: 11. Nov 2023 15:22
von udo1toni
Number Items haben keine Unit :)

Du musst das Item stattdessen als Number:Temperature definieren:

Code: Alles auswählen

Number:Temperature TempTarget     {channel="homematic:HmIP-eTRV-E:27debe8d89:002A9D89AF9ACC:1#SET_POINT_TEMPERATURE", unit="°C", stateDecription=""[pattern="%.1f °C"]}
Das Pattern wird für die Anzeige in Main UI und Basic UI genutzt.

Die Rule muss nun leider auch die Unit berücksichtigen, z.B. indem die Unit gestrippt wird:

Code: Alles auswählen

rule "Heizung Update"
    when 
        Item TempTarget changed
    then
        val tempVal = (TempTarget.state as Number).floatValue
        if (tempVal < 20) { ...  }
end
.floatValue entfernt alles, was keine Zahl ist aus dem Status, bevor es den Status in der Variablen abspeichert.