No he usado GEA, pero he programado mi propio gestor de eventos.
Es una escena que admite declaración de acciones y de eventos en el tiempo como se haría en linux con crontab.
La escena comienza al principio de un minuto y se auto ejecuta cada minuto de forma asíncrona usando setTimeout(), por lo que creo que no puede estar afectada por cuelgues por que no hay ningún bucle while.
De esta forma chequea cada minuto si hay alguna acción programada y la ejecuta. Se puede programar afinando al minuto casi cualquier cosa, un día de la semana, los fines de semana, en primavera y verano, por la noche, tal día concreto a tal hora y tal minuto...
ejemplo declaración de una acción
actionTab['diarioPersianas75'] = {
funcion = 'setValue',
dispositivos = {65,84,101,103,105,107,109,198,212,235},
argumento = '75'
}
ejemplo declaración de un evento
-- días de diario a las 07:45
cronTab[#cronTab+1] = {
type = 'crontab',
cronTab = {min={45}, hour={07}, day={'*'}, month={'*'}, wday={2,3,4,5,6}},
acciones = {actionTab['diarioPersianas75']}
}
Por otro lado tengo otra escena para ejecutar acciones según sucesos que se disparan por cambio de valores en propiedades de dispositivos o variables globales.
ejemplo de evento por suceso:
--[[ se abre la puerta y la alarma está armada -------------------------------]]
triggerTab[#triggerTab+1] = {
id = {14},
valor = {'1'},
condicion =
function()
return tonumber(fibaro:getValue(14, "armed")) > 0
end,
retardo = 2,
acciones = {actionTab['enviarPushPuerta'], actionTab['enviarFotos']}
}
A ver si tengo tiempo para documentarlo...
Aún así esto no me sirve para el termostato virtual que, ha de "auto-gestionarse"