Page 1 sur 1

Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 10:20
par fabd
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

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&param=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 commandArray
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.

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.
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 :)

Re: Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 11:16
par deennoo
Tu veux absolument passer par le ping de ta tv ?

Chez moi, hyperion s'allume en 'jaune lune' dés que j'allume la TV grace a un dongle IR mis sur le rpi qui fait hyperion et kodi
le chemin torturé est ainsi :

Télécommande tv on -->rpi+dongle-->requete http vers domoticz -->allume le meuble TV et un dummy hyperion active un script qui passe hyperion en jaune lune, la couleur disparaît dés que le Freebox Player est en route (règle de priorité dans hyperion)
si télécommande Tv off -->domoticz-->meuble TV off donc freeplayer OFF et hyperion passe en noir.

Mon déclencheur est la télécommande est non un ping sur ma tv (qui n'a pas de connexion) ainsi je peux aussi piloter hyperion avec les touche de la télécommande qui ne servent pas si la tv est eteinte.

Re: Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 11:35
par jay
ola,

Moi ce qui m’inquiète dans ton script c'est cette ligne :

Code : Tout sélectionner

loops = ping toutes les X minutes
Une loop dans un script qui en rend jamais la main c'est pas top, à mon sens bien sur.

Pourquoi tu n'utilises pas plutôt la crontab pour déclencher ton script et le programmer pourqu'il test toute les 15 seconds. Je pense pas que tu sois à 15 secondes ^^

Aussi un ping avec un timeout de 3 secondes dans un réseau local bof bof tu peux largement baisser ta valeur si ton ping n'a pas de retour avant 1 seconde et encore.. c'est qu'il a un blem ou que ta tv est éteinte ;)

Re: Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 12:50
par fabd
oui, je me tatte a le faire avec le cron

c'est juste que j'amerai tout centraliser les scripts et pas en avoir partout

Re: Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 12:54
par jay
C'est sur que c'est chiant d'en avoir partout, mais au final si tu les nommes bien tu t'y retrouves.

En plus l'avantage c'est que tu peux paralléliser leur lancement, pas exécuter bêtement un suite d'instruction qui se répète, le rpi est fait pour ça.

Re: Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 12:55
par fabd
deennoo a écrit :Tu veux absolument passer par le ping de ta tv ?

Chez moi, hyperion s'allume en 'jaune lune' dés que j'allume la TV grace a un dongle IR mis sur le rpi qui fait hyperion et kodi
le chemin torturé est ainsi :

Télécommande tv on -->rpi+dongle-->requete http vers domoticz -->allume le meuble TV et un dummy hyperion active un script qui passe hyperion en jaune lune, la couleur disparaît dés que le Freebox Player est en route (règle de priorité dans hyperion)
si télécommande Tv off -->domoticz-->meuble TV off donc freeplayer OFF et hyperion passe en noir.

Mon déclencheur est la télécommande est non un ping sur ma tv (qui n'a pas de connexion) ainsi je peux aussi piloter hyperion avec les touche de la télécommande qui ne servent pas si la tv est eteinte.

effectivement, c'est tordu , j'ai pas tout suivi.

Dans mon cas, KODI (win 7) et Hyperion (rpi) sont 2 machines differentes. Si l'ampli est coupé hyperion renvoi un rainbow, donc je prefere couper l'alim des leds (c'est ce que tu fais ?)

donc, je pensais que le ping permettrait d'identifier que la tv est allumé.

Re: Script presence et stabilité Domoticz

Publié : 17 janv. 2017, 12:56
par fabd
jay a écrit :C'est sur que c'est chiant d'en avoir partout, mais au final si tu les nommes bien tu t'y retrouves.

En plus l'avantage c'est que tu peux paralléliser leur lancement, pas exécuter bêtement un suite d'instruction qui se répète, le rpi est fait pour ça.
C'est vrai que le coup de la boucle sans fin dure parfois plus de 10 sec...

je vais mettre un script bash qui mettra un dummy switch sur on ou off

si quelqu'un a ca sous la main pour que je teste :)