Script presence et stabilité Domoticz
Publié : 17 janv. 2017, 10:20
Hello,
Pour un besoin bien précis : allumer les leds derriere ma TV (hyperion) quand ma TV est allumé, j'ai honteusement copié le script de quelqu'un (désolé si il se retrouve) pour gerer la présence de ma TV.
Si ma TV ping, c'est qu'elle est allumé et hop, j'allume les leds
sinon, elle s'eteingne
voici le script
Le script fonctionne bien :
Si la TV est en ligne, dans les quelques secondes qui suivent, les leds s'allument
Si la TV s'eteint, dans la minute qui suit, les leds s'eteignent.
Par contre, vu la fréquence de fonctionnement du script, ca loggue pas mal toutes les secondes, et ce matin, DOMOTICZ était en vrac.
En gros, domoticz était offline et il y avait 2 process qui était en cours de ping sur la TV.
Impossible d'avoir la main sur domoticz.
J'ai rallumé la TV (ping OK), et la, toutes les actions en attente de traitement (volet roulant, etc...) se sont executées des que la TV était allumée.
Plus le temps passe, plus je me dit qu'on va etre asservi par la techno sans qu'on comprenne ce qui se passe.
Bref... comment je peux faire pour me dépatouiller de tout ca ?
J'aimerai que l'allumage/extinction soit réactif, mais que ca pompe pas les ressources RAM ou que ca bloque completement domoticz
merci pour vos idées
Pour un besoin bien précis : allumer les leds derriere ma TV (hyperion) quand ma TV est allumé, j'ai honteusement copié le script de quelqu'un (désolé si il se retrouve) pour gerer la présence de ma TV.
Si ma TV ping, c'est qu'elle est allumé et hop, j'allume les leds
sinon, elle s'eteingne
voici le script
Code : Tout sélectionner
--[[
name: script_time_ping.lua
ip = ip à pinguer
device = périphérique à mettre à jour
loops = ping toutes les X minutes
count = nombre d'échecs successifs avant de valider offLine
--]]
--------------------------------
------ Tableau à éditer ------
--------------------------------
local url = 'xxxxxxxxxxxx' -- user:pass@ip:port de domoticz
local ping={
--{ip,device,loops,count}
{'xxxxxxxxxx','TV',1,3}
}
--------------------------------
-- Fin du tableau à éditer --
--------------------------------
function url_encode(str)
if (str) then
str = string.gsub (str, "\n", "\r\n")
str = string.gsub (str, "([^%w %-%_%.%~])",
function (c) return string.format ("%%%02X", string.byte(c)) end)
str = string.gsub (str, " ", "+")
end
return str
end
commandArray={}
date = os.date("*t")
for i, switch in pairs(ping) do
ip = switch[1]
device = switch[2]
loops = switch[3]
count = switch[4]
if (date.min % loops == 0) then
-- Le Ping ! : -c1 = Un seul ping , -w3 délai de 3 seconde d'attente de réponse
ping_success=os.execute('ping -c1 -w3 '..ip)
-- création des variables utilisateur pour comptabiliser les échecs de ping
if(uservariables['PING_'..device] == nil) then
commandArray[i]={['OpenURL']=url..'/json.htm?type=command¶m=saveuservariable&vname=PING_'..url_encode(device)..'&vtype=2&vvalue=0'}
print('PING : création variable manquante PING_'..device)
print('PING : script supendu')
-- Si le ping à répondu
elseif ping_success then
-- remise à zéro du compteur d'échec
commandArray[i]={['Variable:PING_'..device] = '0'}
print('PING : ' .. device .. ' -> success')
-- si le device etait sur off on l'allume
if(otherdevices[device] == 'Off') then
commandArray[i+1]={[device] = 'On'}
commandArray['LED TV']='On'
end
else -- Si pas de réponse
-- on incrémente le compteur d'échec
commandArray[i]={['Variable:PING_'..device] = tostring(uservariables['PING_'..device] + 1)}
print('PING : ' .. device .. ' -> fail ('..(uservariables['PING_'..device]+1)..')')
-- si le device etait sur On et que le compt total est atteint, on l'éteind
if(otherdevices[device] == 'On' and tonumber(uservariables['PING_'..device]) >= count - 1) then
commandArray[i+1]={[device] = 'Off'}
commandArray['LED TV']='Off'
end
end
end
end
return commandArraySi la TV est en ligne, dans les quelques secondes qui suivent, les leds s'allument
Si la TV s'eteint, dans la minute qui suit, les leds s'eteignent.
Par contre, vu la fréquence de fonctionnement du script, ca loggue pas mal toutes les secondes, et ce matin, DOMOTICZ était en vrac.
Code : Tout sélectionner
pi@raspberrypi:~ $ sudo service domoticz status
● domoticz.service - LSB: Home Automation System
Loaded: loaded (/etc/init.d/domoticz.sh)
Active: active (running) since mar. 2017-01-17 08:58:04 CET; 16min ago
Process: 536 ExecStart=/etc/init.d/domoticz.sh start (code=exited, status=0/SU CCESS)
CGroup: /system.slice/domoticz.service
├─ 679 /home/pi/domoticz/domoticz -daemon -www 8080 -sslwww 443
├─2224 sh -c ping -c1 -w3 XXXXXXXXXX IP TV
└─2225 ping -c1 -w3 XXXXXXXXXXXX IP TV
janv. 17 08:58:02 raspberrypi systemd[1]: Starting LSB: Home Automation Syst....
janv. 17 08:58:04 raspberrypi domoticz.sh[536]: 2017-01-17 08:58:04.117 Dom...z
janv. 17 08:58:04 raspberrypi domoticz.sh[536]: 2017-01-17 08:58:04.117 Bui...3
janv. 17 08:58:04 raspberrypi domoticz[564]: Domoticz is starting up....
janv. 17 08:58:04 raspberrypi domoticz.sh[536]: 2017-01-17 08:58:04.118 Sys...i
janv. 17 08:58:04 raspberrypi domoticz.sh[536]: 2017-01-17 08:58:04.118 Sta.../
janv. 17 08:58:04 raspberrypi domoticz.sh[536]: domoticz: Domoticz is starti....
janv. 17 08:58:04 raspberrypi domoticz[679]: Domoticz running...
janv. 17 08:58:04 raspberrypi systemd[1]: Started LSB: Home Automation System.
Hint: Some lines were ellipsized, use -l to show in full.
Impossible d'avoir la main sur domoticz.
J'ai rallumé la TV (ping OK), et la, toutes les actions en attente de traitement (volet roulant, etc...) se sont executées des que la TV était allumée.
Plus le temps passe, plus je me dit qu'on va etre asservi par la techno sans qu'on comprenne ce qui se passe.
Bref... comment je peux faire pour me dépatouiller de tout ca ?
J'aimerai que l'allumage/extinction soit réactif, mais que ca pompe pas les ressources RAM ou que ca bloque completement domoticz
merci pour vos idées