Vergleich zweier Temperaturwerte

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Vergleich zweier Temperaturwerte

Beitrag 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?
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Vergleich zweier Temperaturwerte

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Heavy-Dee
Beiträge: 143
Registriert: 18. Jan 2018 16:38
Answers: 0

Re: Vergleich zweier Temperaturwerte

Beitrag 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 !!!
openHab4 (v. 4.1.0) Docker auf Synology DS920+ :!:

Benutzeravatar
udo1toni
Beiträge: 15249
Registriert: 11. Apr 2018 18:05
Answers: 242
Wohnort: Darmstadt

Re: Vergleich zweier Temperaturwerte

Beitrag 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.
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

Antworten