Seite 1 von 1

Vergleich zweier Temperaturwerte

Verfasst: 1. Mai 2020 21:35
von Heavy-Dee
Ich würde gerne in einer If-Abfrage einer rule zwei Temperaturwerte vergleichen um den Boost-Mode zu starten, aber irgendwie bekomme ich immer folgende Fehlermeldung bei "HM_KZ1_SetTemp.state" in VSC "Type mismatch: cannot convert from State to Number(org.eclipse.xtext.xbase.validation.IssueCodes.incompatible_types)" .
Beide Items sind vom Typ NUMBER.

Code: Alles auswählen

 
rule "PräsenzBoost"
when
    Item grpFB_Praesenz changed 
then
if ((HM_KZ1_Fenster.state == "CLOSED") && (HM_KZ1_ActTemp.state > HM_KZ1_SetTemp.state)) {
HM_KZ1_BoostMode.sendCommand(ON)
 }
 end
 
wenn ich es über den Weg einer Variablen löse, funktioniert es.

Code: Alles auswählen

var Number vSetTemp_KZ1 
rule "PräsenzBoost"
when
    Item grpFB_Praesenz changed 
then
vSetTemp_KZ1 = (HM_KZ1_SetTemp.state as DecimalType)
if ((HM_KZ1_Fenster.state == "CLOSED") && (HM_KZ1_ActTemp.state > vSetTemp_KZ1)) {
HM_KZ1_BoostMode.sendCommand(ON)
 }
 end
 
Kann mir einer Erklären warum es nicht direkt mit den zwei Item.states funktioniert?

Re: Vergleich zweier Temperaturwerte

Verfasst: 2. Mai 2020 00:39
von udo1toni
Wie sind die Items definiert?

Grundsätzlich ist ein Status ein Status. Wenn Du einen Status, der numerisch interpretierbar ist, mit einem numerischen Wert vergleichst, kann es sein, dass openHAB gnädig den Status als Zahl interpretiert. Gewöhnlich muss man aber den Typ explizit angeben. Dein Vergleich muss also so aussehen:

Code: Alles auswählen

if (HM_KZ1_Fenster.state == CLOSED && (HM_KZ1_ActTemp.state as Number) > (HM_KZ1_SetTemp.state as Number)) {
Wenn HM_KZ1 als Contact Item definiert ist, ist der Status ein OpenClosedType, also keine Anführungszeichen. Da hier nur eine einfache Bool'sche Verknüpfung stattfindet, sind auch diese Klammern unnötig. Dafür braucht es aber die um das Typecasting nach Number.

Re: Vergleich zweier Temperaturwerte

Verfasst: 2. Mai 2020 08:51
von Heavy-Dee
Guten morgen,
- der Temperaturvergleich (Item.state as Number) hat funktioniert !!!
- der Fensterstatus wird bei HomeMatic wird als String definiert! ohne die Anführungszeichen funktioniert es nicht.

so läufts:

Code: Alles auswählen

if ((HM_KZ1_Fenster.state == "CLOSED") && ((HM_KZ1_ActTemp.state as Number) < (HM_KZ1_SetTemp.state as Number))) {
}
Danke für deine Hilfe !!!

Re: Vergleich zweier Temperaturwerte

Verfasst: 2. Mai 2020 15:30
von udo1toni
Die Frage ist aber nicht, wie es in Homematic definiert ist :) sondern, was Du für ein Item verwendest. Falls ein Contact Item nicht funktioniert, passt es natürlich nur mit dem String.