Page 1 sur 1

Présence via ping smartphone

Publié : 07 mars 2015, 20:18
par DrFloW
Bonjour,

J'ai trou un script LUA de Alexandre Dubois qui est bien pratique pour détecter la présence à la maison via ping du smartphone. Seul truc qui me pose souci c'est que ce script controle la préence toute les 10 minutes et envoie une nouvelle commande ON pour la présence. Je voudrais que le script regarde si je suis toujorus présent toutes les 10 minutes mais ne fasse rien si je suis chez moi, par contre il devra continuer de passer le switch de présence à OFF si je suis parti.

J'ai donc modifié le script comme suit, et je pense qu'il y a un souci aux alentours de la ligne 43, est qu'une bonne âme pourrait m'aider?

Code : Tout sélectionner

-- Alexandre DUBOIS - 2014
-- Ce script vérifie la présence de 2 téléphones sur le réseau pour savoir si quelqu'un est là.
-- La vérification est effectuée une fois par minute tant qu'aucun téléphone n'est à portée,
-- puis une fois toute les 10 minutes quand au moins un téléphone est connecté pour ne pas trop stresser sa batterie.
 
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 le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence
if (otherdevices['Presence']=='Off' or (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600)) then
	ping_success_tel1=os.execute('ping -c1 192.168.0.13')
	ping_success_tel2=os.execute('ping -c1 192.168.0.99')
	
	if ping_success_tel1 or ping_success_tel2 then
	  commandArray['Presence']='On'
	else
	  if otherdevices['Presence']=='On' then --On ne passe l'interrupteur virtuel à Off que s'il est sur On.
          commandArray['Presence']='Off'
          end
	end
end
 
return commandArray

Re: Présence via ping smartphone

Publié : 07 mars 2015, 21:25
par hobbe
DrFloW a écrit :J'ai donc modifié le script comme suit, et je pense qu'il y a un souci aux alentours de la ligne 43, est qu'une bonne âme pourrait m'aider?
Bonsoir,

Tu n'as que 38 lignes... :?

Re: Présence via ping smartphone

Publié : 07 mars 2015, 21:33
par hobbe
Voici ma version d'un script dont le but est faire un ping sur les IP des téléphones, et mettre les interrupteurs "Présence X" à ON ou OFF.

Code : Tout sélectionner

-- domoticz/scripts/lua/script_time_presence.lua
-- Check availability of cell phone on network

commandArray = {}
time = os.date("*t")

-- On every 2 minutes, starting from 1 (1, 3, 5, ...)
if((time.min % 2) == 1) then

  local list_ip = {}
  local list_device = {}

  -- Devices to monitor
  list_ip[0] = '192.168.1.90'
  list_device[0] = 'Présence Papa'
  list_ip[1] = '192.168.1.91'
  list_device[1] = 'Présence Maman'
  list_ip[2] = '192.168.1.92'
  list_device[2] = 'Présence Lulu'

  for key, m_ip in pairs(list_ip) do
    local m_device = list_device[key]
    ping_success = os.execute('ping ' .. m_ip .. ' -n 2 -w 500>nul')
    if ping_success then
      print("¤¤¤ Ping " .. m_ip .. " (" .. m_device .. ") OK")
      if (otherdevices[m_device] == 'Off') then
        commandArray[m_device] = 'On'
      end
    else
      print("¤¤¤ Ping " .. m_ip .. " (" .. m_device .. ") failure")
      if (otherdevices[m_device] == 'On') then
        commandArray[m_device] = 'Off'
      end
    end
  end
end

return commandArray
La commande ping dans le os.execute correspond à une utilisation sous Windows.

Re: Présence via ping smartphone

Publié : 07 mars 2015, 22:35
par DrFloW
hobbe a écrit :Tu n'as que 38 lignes... :?
Oups! :lol: oui en effet, Pardon j'ai remis le script d'origine qui ping toutes les 10min et réactive le switch ON même s'il est déjà ON, ce qui m'embête car ca remet tous les paramètres modifés entre temps à la normale (volets fermés, mumières alumées...)

Voici mon script modifié qui doit présenter un souci vers la ligne 43:

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 le téléphone n'est pas détecté,
--alors on vérifie sa présence
if (otherdevices['Presence']=='Off') then
	ping_success_tel1=os.execute('ping -c1 192.168.0.13')
	ping_success_tel2=os.execute('ping -c1 192.168.0.99')
	
	if ping_success_tel1 or ping_success_tel2 then
	  commandArray['Presence']='On'
	  end
	end
end

--Si le téléphone est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence
if (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600) then
	ping_success_tel1=os.execute('ping -c1 192.168.0.13')
	ping_success_tel2=os.execute('ping -c1 192.168.0.99')
	
	if ping_success_tel1 or ping_success_tel2 and otherdevices['Presence']=='On'  then
--On ne passe l'interrupteur virtuel à Off que s'il est sur On.
	commandArray['Presence']='Off'
			 end
    end
end

return commandArray

Re: Présence via ping smartphone

Publié : 07 mars 2015, 22:39
par DrFloW
hobbe a écrit :Voici ma version d'un script dont le but est faire un ping sur les IP des téléphones, et mettre les interrupteurs "Présence X" à ON ou OFF.
Bonsoir Hobbe! On script a l'air enore plus ambitieux! Il assigne un swith de présence a chaque membre de la maison si je comprends bien, c'est une excellente idée.

Ensuite il ping toutes les 2 min, par contre je n'ai pas compris ce qui se passe après la requête de ping, comment sont actionné les switch? Comment se passe la déconnexion si le ping revient négatif?

Re: Présence via ping smartphone

Publié : 07 mars 2015, 23:18
par DrFloW
Nouvelle version qui me semble mieux: le switch ne passe donc ON que s'il était OFF avant, ce qui devrait éviter mon souci! Qu'en pensez vous?


Code : Tout sélectionner

-- Alexandre DUBOIS - Modification 2015
-- Ce script vérifie la présence de 2 téléphones sur le réseau pour savoir si quelqu'un est là.
-- La vérification est effectuée une fois par minute tant qu'aucun téléphone n'est à portée,
-- puis une fois toute les 10 minutes quand au moins un téléphone est connecté pour ne pas trop stresser sa batterie. 

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 le téléphone n'est pas détecté ou qu'il est présent depuis plus de 10 minutes (600 secondes),
--alors on vérifie à nouveau sa présence
if (otherdevices['Presence']=='Off' or (otherdevices['Presence']=='On' and timedifference(otherdevices_lastupdate['Presence']) > 600)) then
	ping_success_tel1=os.execute('ping -c1 192.168.0.13')
	ping_success_tel2=os.execute('ping -c1 192.168.0.99')
	
	if ping_success_tel1 or ping_success_tel2 then
		if ( otherdevices['presence'] == 'Off') then -- Passage du switch ON que s'il était OFF avant
                  print(" ping connect success ")
                 commandArray['presence']='On'
	else
	  if otherdevices['Presence']=='On' then --On ne passe l'interrupteur virtuel à Off que s'il est sur On.
	  		print(" ping connect failure ")
          commandArray['Presence']='Off'
          end
	end
end
 
return commandArray

Re: Présence via ping smartphone

Publié : 17 févr. 2017, 16:15
par mercusot
Ne manquerait-il pas un end à la fin de la séquence que tu as modifiée ?

if ( otherdevices['presence'] == 'Off') then -- Passage du switch ON que s'il était OFF avant
                  print(" ping connect success ")
                 commandArray['presence']='On'
end

Re: Présence via ping smartphone

Publié : 17 févr. 2017, 20:30
par Ghislain
Beau déterrage :roll: