Seite 1 von 1

Number-Item in Rule

Verfasst: 18. Sep 2023 13:55
von iceman
Hallo,

ich stehe gerade ein wenig auf dem Schlauch. ich möchte den Wert für die Leuchtdauer über die Sitemap einstellen können. Ich habe mir ein Item Number:Dimensionless angelegt, wie aber bekomm ich den Wert in das Item "iPost_TimeOut"? Habe irgendwie schon alles probiert...


Code: Alles auswählen

var Timer tWCGast = null 
val Integer iPost_TimeOut = 5 
rule "test"
when
    Item HM_Unterputztaster_Treppenhauslicht_unten_1_ip_State changed
then

    tWCGast?.cancel  

    if(newState != ON) {
        HM_Schaltaktor_Treppenhauslicht_3_ip_2_STATE.sendCommand(ON)
        
    } else 
        tWCGast = createTimer(now.plusSeconds(iPost_TimeOut), [| 
            HM_Schaltaktor_Treppenhauslicht_3_ip_2_STATE.sendCommand(OFF)
        
        ])

end



Den Code habe ich nur als Vereinfachung als Beispiel eingefügt um es zu verstehen.

Re: Number-Item in Rule

Verfasst: 18. Sep 2023 15:26
von udo1toni
Nun ja. iPost_TimeOut kannst Du keinen Wert zuweisen, denn Du hast es global als Konstante definiert, das heißt, es ist nur lesbar.
Das erste wäre also, in dieser Zeile:

Code: Alles auswählen

val Integer iPost_TimeOut = 5 
das val gegen ein var auszutauschen, damit aus der Konstanten eine Variable wird.
Und dann kannst Du den Wert innerhalb der Rule einfach aus dem betreffenden Item auslesen. Aber Obacht, da Du das Item als Number:Dimensionless definiert hast, musst Du noch sicherstellen, dass es keine Einheit mitliefert:

Code: Alles auswählen

if(myTimeout.state instanceof Number)
    iPost_TimeOut = (myTimeout.state as Number).intValue
.intValue erzwingt das Interpretieren des Wertes als Integer (diese Funktion steht nur für Number Werte zur Verfügung, deswegen das Casting, QuantityType ist ein Kind von Number und erbt die Funktion, genauso ist es aber auch wichtig, zunächst zu prüfen, dass das Item tatsächlich einen gültigen Wert liefert (instanceof Number).

Re: Number-Item in Rule

Verfasst: 18. Sep 2023 15:45
von iceman
Super, jetzt läuft es wie es soll, vielen Dank