Las escenas en HC2 no se ejecutan solas, pueden ejecutarse por tres motivos:
por cambio de una propiedad de un dispositivo
por cambio del valor de una variable global
por cualquier otro motivo, puede ser llamada por otra escena o dispositivo virtual, o que la lances manualmente pulsando el botón ejecutar desde el interfaz web o alguna aplicación para dispositivo móvil. En la cabecera de la escena defines el disparador de la escena "%% properties", "%% globals"
--[[
%% properties
13 value
15 value
%% globals
nobre_variable_global
–]]
Adicionalmente, hay escenas que se ejecutan solas nada más ser grabadas o cuando se inicia el HC2, en LUA esto se declara también en la cabecera
--[[
%% autostart
--]]
puedes consultar el motivo que lanzo la escena con:
fibaro:getSourceTrigger()
y decidir en consecuencia que hace el código de la escena a continuación...
la escena ejecuta el código de arriba a abajo, a excepción de las llamadas a funciones, cuando las llamas se ejecutan y retornan al punto de llamada (hay una excepción de la función setTimeout() que ejecuta otras funciones de forma asíncrona, pero mejor no te complico) y, aunque puedes programar bucles en los que la función quede indefinidamente, normalmente terminan.
Tienes que entender el concepto de instancia, que quiere decir que la escena es "carga" en memoria para su ejecución, una escena puede ejecutarse varias veces y puede que en un periodo de tiempo la misma escena se esté ejecutando varias veces (hay varias instancias de la misma escena en memoria), hay veces que quieres que esto suceda, por ejemplo si una misma escena actúa para varios dispositivos, (si se enciende la luz o si se abre la puerta), pero otras veces no quieres que se ejecute la escena si ya se está ejecutando otra instancia de la misma, para eso se suele usar abort(). la función abort() no es necesaria para terminar la escena.
Que lío no se si te he aclarado algo!