j'ai mis en place un capteur de coupure de courant dont le principe est simple: domoticz ping un equipement non connecté à un onduleur (une chromecast par exemple, inutile si la tv marche pas). C'est un script_time_chromecast.lua:
Code : Tout sélectionner
commandArray = {}
--Cette fonction calcule la différence de temps (en secondes) entre maintenant
--et la date passée en paramètre.
function timedifference (s)
year = string.sub(s, 1, 4)
month = string.sub(s, 6, 7)
day = string.sub(s, 9, 10)
hour = string.sub(s, 12, 13)
minutes = string.sub(s, 15, 16)
seconds = string.sub(s, 18, 19)
t1 = os.time()
t2 = os.time{year=year, month=month, day=day, hour=hour, min=minutes, sec=seconds}
difference = os.difftime (t1, t2)
return difference
end
--Si la chromecast n'est pas détecté ou qu'elle est présente depuis plus de 5 minutes (300 secondes),
--alors on vérifie à nouveau sa présence
if (otherdevices['chromecast']=='Off' or (otherdevices['chromecast']=='On' and timedifference(otherdevices_lastupdate['chromecast']) > 300)) then
ping_success_chromecast=os.execute('ping -c1 192.168.1.23')
if ping_success_chromecast then -- si le ping reussi
if otherdevices['chromecast']=='Off' then -- si le bouton est a off
commandArray['chromecast']='On' -- on le passe a on
end
else -- si le ping echoue
if otherdevices['chromecast']=='On' then --On ne passe l'interrupteur virtuel à Off que s'il est sur On.
commandArray['chromecast']='Off'
end
end
end
return commandArray
Ca marche presque bien: tant que je ne fais pas de maintenance, je n'ai jamais de faux positif (ou de faux negatif). A chaque coupure je suis averti par email par domoticz. Et lorsque le courant revient aussi.
Le problème est lorsque je fais de la maintenance: si je redémarre ma livebox, le ping échoue, donc domoticz interprete ça comme une coupure de courant. Il faudrait un ping avec un compte à rebours de 2 minutes (le temps que la livebox ait redémarrer).
Du genre
Code : Tout sélectionner
ping -w 120 192.168.1.23Mais comment faire alors que le script_time se relance toutes les minutes (il me faut 2 minutes) ???
Option 2: oublier le lua et écrire un bash executé par un cron toutes les 2 minutes. Mais quelquechose m'inquiète:
Est-ce que ça ne va pas monopoliser mon terminal et bloquer tous les autres scripts ?
Est-ce sans danger de pinger aussi longuement et continuellement la chromecast (ou tout autre appareil reseau ) ?
Option 3: acheter un onduleur USB. Dans mon trou perdu, ya des onduleurs... chinois... installé "nut" sur mon rasp... 1 semaine à essayer... ne veut rien savoir... Et puis ça m'interesse vraiment de savoir si un ping avec un compte à rebours de 2 minutes est sans danger pour le systeme, et si c'est possible en lua.
Merci de votre aide