Eu tenho uma lâmpada ZWave e um interruptor de parede com 4 botões ZWave, ambos conectados ao Domoticz instalado em um Raspberry Pi.
Eu gostaria dos seguintes cenários:
- Botão 1: lâmpada acesa por 30 minutos
- Botão 2: lâmpada apagada
- Botão 3: lâmpada sempre acesa
- Botão 4: convocar Cthulhu
Cada botão substitui a ação anterior (Botão 3 -> Botão 1 = ativado por 30 minutos)
É fácil conectar e programar os botões, mas agora, e o temporizador? Eu gostaria de evitar a criação de um serviço caseiro, porque tenho medo de mexer init.d
.
Eu tenho 3 possibilidades:
Interruptor fictício Domoticz
O Domoticz permite criar um comutador fictício que pode mudar de estado após algum tempo fornecido em uma interface:
Prós
- temporizador de prateleira!
- Posso interagir rapidamente entre o interruptor da parede e a lâmpada
Contras
- embora o Domoticz lide com MQTT, haverá muitos scripts LUA e "blocos" para interconectar dispositivos
- o tempo pode não ser facilmente configurável ...
at
e atq
at
é um comando linux para planejar uma ação no tempo, tão simples quanto
at [when] < [what]
Prós
- serviço multi-timer
- fácil de usar e ligar
Contras
- fornece apenas um ID exclusivo, a menos que analise o comando planejado, não posso dar um nome ao trabalho (a menos que com um comando linux mágico ...)
- portanto, preciso codificar / implementar um job matcher usando um banco de dados
Crontab
O Crontab é um serviço Linux para planejar tarefas repetitivas. No meu caso, será uma simples
# check every minute
* * * * * /path/checktimer.sh
Prós
- Gatilho de tempo confiável
Contras
- Não é possível gerenciar segundos ...
- Ainda forçado a manter em algum lugar um candidato a emprego
Para minha pergunta:
- Você teve que gerenciar temporizadores como esse?
- Perdi outras soluções mais confiáveis / configuráveis?
- Você prefere as soluções acima?
sleep
parece pior: você só passa um tempo e ele não retorna nada. Você pode responder e dar um exemplo usando jobs
?
sleep
ouusleep
para ativar o desligamento? Sua função subjacente sob a, e você pode o usojobs
para trabalhos de fundo punho (principalmente para cancelar uma planejada fora se eu entendi corretamente)