Fehler in Rule?

Einrichtung der openHAB Umgebung und allgemeine Konfigurationsthemen.

Moderatoren: seppy, udo1toni

Antworten
dreamar
Beiträge: 74
Registriert: 22. Dez 2017 08:41
Answers: 0

Fehler in Rule?

Beitrag von dreamar »

Hallo,

ich habe 2 Rules die komischerweise nicht funktionieren. Visusl Studio Code gibt keine Fehlermeldung aus und ich finde sie logisch.
Vielleicht kann mir einer den entscheidenen Hinweis geben.

Code: Alles auswählen

rule "Rolos runter nach Helligkeit"  //-----funktioniert-
when 
    Item phoscon_Bewegungsmelder_lightlux received update
then 
    val lux = (phoscon_Bewegungsmelder_lightlux.state as QuantityType<Number>)
    if (lux < 20 && IT_Rollo_Auto_Manuell_Betrieb == ON && IT_EG_Rollo_HWR_Fenster_Status.state == 2){
        IT_EG_Rollo_Zentral_Ab.sendCommand(ON)
        IT_OG_Rollo_Zentral_Ab.sendCommand(ON)
    }
end

Code: Alles auswählen

rule "Seitenbeleuchtung AN durch Bewegungsmelder"
when
    Item phoscon_Bewegungsmelder_presence changed to ON
then
    val lux = (phoscon_Bewegungsmelder_lightlux.state as QuantityType<Number>)
    if (lux < 10 && Seitenbeleuchtung.state == OFF){
       Seitenbeleuchtung.sendCommand(ON)
    }
    
end
Openhab 2.5.10 mit deconz und Homematic

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

Re: Fehler in Rule?

Beitrag von udo1toni »

Es gibt gleich zwei entscheidende Fehler.
1. In der ersten Rule im if-Statement, IT_Rollo_Auto_Manuell_Betrieb == ON muss es IT_Rollo_Auto_Manuell_Betrieb.state == ON heißen.
2. Du versuchst, dem Item phoscon_Bewegungsmelder_lightlux, welches vermutlich als UoM Item definiert ist, die Einheit zu nehmen. openHAB ist aber total schlau und ergänzt sofort die Einheit. Korrekt funktioniert es so:
val lux = (phoscon_Bewegungsmelder_lightlux.state as QuantityType<Number>).floatValue

.floatValue befreit den Wert zuverlässig von der Einheit. (.intValue ebenso, aber wir wollen ja weiterhin einen genauen Zahlenwert haben...)
Es wäre allerdings anzuraten, vorher zu prüfen, ob das Item überhaupt einen gültigen Wert enthält:

Code: Alles auswählen

var lux = 20
if(phoscon_Bewegungsmelder_lightlux.state instanceof Number)
    lux = (phoscon_Bewegungsmelder_lightlux.state as QuantityType<Number>).floatValue
lux muss außerhalb des if-Statements definiert werden, da eine Definition innerhalb des if-Statements außerhalb nicht gültig ist. Alternativ ginge auch ein ternärer Operator:

Code: Alles auswählen

val lux = if(phoscon_Bewegungsmelder_lightlux.state instanceof Number) (phoscon_Bewegungsmelder_lightlux.state as QuantityType<Number>).floatValue else 20
openHAB4.3.3 stable in einem Debian-Container (bookworm) (Proxmox 8.3.5, LXC), mit openHABian eingerichtet

dreamar
Beiträge: 74
Registriert: 22. Dez 2017 08:41
Answers: 0

Re: Fehler in Rule?

Beitrag von dreamar »

Vielen Dank an udo1toni, hat alles geklappt.
Openhab 2.5.10 mit deconz und Homematic

Antworten