Tengo una bombilla ZWave y un interruptor de pared de 4 botones ZWave, ambos conectados a Domoticz instalados en una Raspberry Pi.
Me gustaría los siguientes escenarios:
- Botón 1: lámpara encendida durante 30 minutos
- Botón 2: lámpara apagada
- Botón 3: lámpara siempre encendida
- Botón 4: convocar a Cthulhu
Cada botón anula la acción anterior (Botón 3 -> Botón 1 = encendido durante 30 minutos)
El cableado y la programación de los botones es fácil, pero ahora, ¿qué tal el temporizador? Me gustaría evitar crear un servicio casero porque tengo miedo de jugar init.d
.
Tengo 3 posibilidades:
Domoticz interruptor ficticio
Domoticz permite crear un interruptor ficticio que puede cambiar los estados después de un tiempo dado en una interfaz:
Pros
- temporizador fuera de la plataforma!
- Puedo interactuar bastante rápido entre mi interruptor de pared y la lámpara
Contras
- aunque Domoticz maneja MQTT, habrá una gran cantidad de script LUA y "bloque" para interconectar dispositivos
- el tiempo puede no ser fácilmente configurable ...
at
y atq
at
es un comando de Linux para planificar una acción a tiempo, tan simple como
at [when] < [what]
Pros
- servicio de temporizador múltiple
- fácil de usar y llamar
Contras
- solo da una identificación única, a menos que analice el comando planeado, no puedo asignarle un nombre al trabajo (a menos que con un comando mágico de Linux ...)
- por lo tanto, necesito codificar / implementar un buscador de trabajo usando una base de datos
Crontab
Crontab es un servicio de Linux para planificar tareas repetitivas. En mi caso será un simple
# check every minute
* * * * * /path/checktimer.sh
Pros
- Activador de tiempo confiable
Contras
- No se pueden administrar segundos ...
- Aún forzado a mantener en algún lugar un empleo
A mi pregunta:
- ¿Tuviste que gestionar temporizadores como este?
- ¿Me perdí otras soluciones más confiables / configurables?
- ¿Tiene preferencia con las soluciones anteriores?
sleep
se ve peor: solo pasas un tiempo y no devuelve nada. ¿Puedes responder y dar un ejemplo usando jobs
?
sleep
ousleep
para activar el apagado? Es la función subyacente en at, y puede usarlojobs
para manejar trabajos en segundo plano (principalmente para cancelar un apagado planificado si lo entendí correctamente)