Make sure you define a Timer variable globally within the rules file and cancel that every time before (re)setting the timer, like so:
var Timer MovementTimer = null
rule “BI Motion FC”
when
Item BI_FC_Motion changed from OFF to ON
then
....
if (MovementLightsOn == true) {
MovementTimer?.cancel
MovementTimer = createTimer(now.plusSeconds(20), [| LS_FrontOutside.sendCommand(OFF)])
...
}
end
Next to that, you are potentially creating an issue with those Thread::sleeps, see here: