Seite 1 von 1

TimerArray in Rule

Verfasst: 19. Apr 2024 23:08
von ruedi42
hallo,

ich würde gerne in einer OH 4 rule eine statische liste von diversen timern in ein array überführen.
bisher habe ich folgendes versucht:

var List<Timer> myTimerArray = newArrayList()

var newTimer = createTimer(now.plusMinutes(1), [ |
logInfo("lights.rules", "{}", "timer ende")
])

myTimerArray.add(newTimer,0)

// zum testen den timer canceln
var aktTimer = myTimerArray.get(0)
aktTimer.cancel()

wie wäre die korrekte syntax um das durchzuführen?

Re: TimerArray in Rule

Verfasst: 20. Apr 2024 01:51
von udo1toni
Das sollte per Hashmap gehen:

Code: Alles auswählen

import java.util.Map

val Map<String, Timer> myTimerArray = newHashMap // außerhalb der Rule definieren, damit die Hashmap über die Laufzeit der Rule erhalten bleibt.

rule "meine Rule"
when 
    Member of gMeinGroupItem changed
then
    // init
    var vName = triggeringItem.name.split("_").get(1)
    var vTimerName = "timer_" + vName
    // mach was
    // timers
    myTimerArray.get(vTimerName)?.cancel;
    
    myTimerArray.put(vTimerName, createTimer(now.plusMinutes(10)) [|
        // mach was anderes
        myTimerArray.remove(vTimerName)
    ] )
end

Re: TimerArray in Rule

Verfasst: 20. Apr 2024 18:27
von ruedi42
vielen, vielen dank. das ist genau so etwas das ich gesucht habe !
funktioniert !!