Lo más sencillo sería decirle a cada interruptor en el parámetro correspondiente que se apague de forma automática a los 15min y no hacer ninguna escena.
Pero si quieres hacer una única escena , lo primero que hay que tener claro son tres cosas
evento que dispara la escena
acciones
dispositivos afectados
La acción sería apagar “fibaro:call(id, "turnOff”)”
Los dispositivos x1,x2,x3
El evento 15 minutos después de que se enciendan el dispositivo.
Lo primero, en la cabecera de la escena tienes que declarar todos los posibles dispositivos que pueden disparar la escena, y es en la cabecera donde tendrás que añadir o quitar los dispositivos implicados en cada momento, de tal forma que no hará falta que toques el resto de la escena, solo cambia los dispositivos en la cabecera.
--[[
%% properties
x1 value
x2 value
x3 value
--]]
Cuando cambie el valor de cualquiera de los dispositivos implicados se iniciará una instancia de la escena, con esto quiero decir que se puede ejecutar varias veces la escena y puede que en un momento dado se estén ejecutando varias instancias.
Necesitarás saber que dispositivo a cambiado en cada momento, esto lo consigues con fibaro:getSourceTrigger(), te devuelve una tabla que, dependiendo de como se ha iniciado la escena contiene diferentes valores, si la escena se disparó por cambio de alguna propiedad de los dispositivos indicados en la cabecera (que es tu caso), la tabla contiene ‘deviceID’ y ‘propertyName’, justamente lo que necesitas para saber sobre que dispositivo actual.
Así, cuando se activa uno de los dispositivos por encendido solo queda esperar el tiempo estipulado y justo antes de intentar apagar comprobar que el tiempo desde su último cambio sigue siendo mayor, de esta forma puedes encender y apagar y solo se apagará cuando pase el tiempo definido desde la última vez que se encendió.
local valor, instante = fibaro:get(deviceID, 'value')
Todo junto:
--[[
%% properties
x1 value
x2 value
x3 value
--]]
local elapTime = 15 -- minutos
local startSource = fibaro:getSourceTrigger()
if startSource['type'] == 'property' then
local deviceID = startSource['deviceID']
local propertyName = startSource['propertyName']
local value = fibaro:getValue(deviceID, 'value')
--fibaro:debug('accionado id '..deviceID..' '..propertyName..' '..value)
if propertyName == 'value' and tonumber(value) > 0 then
--fibaro:debug('esperando...')
fibaro:sleep(elapTime*60*1000)
-- calcular el tiempo que lleva el dispositivo sin cambiar de estado
local valor, instante = fibaro:get(deviceID, 'value')
local diferenciaTiempo = os.time() - instante
--fibaro:debug('ha pasado '..diferenciaTiempo..'seg')
-- si el tiempo sin cambiar es mayor o igual al tiempo indicado
if tonumber(valor) > 0 and diferenciaTiempo >= (elapTime*60) then
-- apagar el dispositivo
--fibaro:debug('Apagar '..deviceID)
fibaro:call(deviceID, 'turnOff')
end
end
end