Aller au contenu

Detection De Présence


sebcbien

Messages recommandés

Bon, je dois dire que je ne comprends pas grand chose, comment ça peut fonctionner chez moi et pas chez d'autres qui ont aussi une réponse au telnet...

 

sinon, je suis en 3.591 "beta" .. je ne pense pas que ça puisse changer grand chose

Lien vers le commentaire
Partager sur d’autres sites

Bon, j'ai trouvé, c'est le lock away....comme je disais dans le premier post.

Ceux qui ne l'utilisent pas doivent enlever la condition.

 

voici la V1.3

 

IP Smartphone Presence Check V1.3.vfib

 

Et le code du bouton: ligne 89 commentée et ligne 90 ajoutée

 

Le lock_away permet à  mon alarme de ne pas s'armer automatiquement sous certaines conditions quand je suis là ...

 

-- IP Smartphone Presence Check V1.2
-- Copyright © 2014 Sébastien Jauquet.
-- http://www.domotique-fibaro.fr/index.php/topic/2613-detection-de-pr%C3%A9sence/
--Using code from:
-- Ping v 1.0.1 [05-2013]
-- Copyright © 2013 Jean-christophe Vermandé
-- http://www.domotique-fibaro.fr/index.php/topic/109-ping-dun-%C3%A9quipement-r%C3%A9seau/page-2


fibaro:log("Starting process");


local variable_globale_phone = "Phone_GG_Present";
local thismodule=fibaro:getSelfId()
local _deviceIp = fibaro:get(thismodule, 'IPAddress')
local _devicePort = fibaro:get(thismodule, 'TCPPort')
local _maxRetryProcess = 20;
local time = tonumber(os.time());
local maxtime = 56;


-- local _deviceIp = "192.168.10.112";
-- local _devicePort = 3500;
-- fibaro:debug(_deviceIp .. " " .. _devicePort)
-- fibaro:setGlobal("Lock_Away","Unlocked") 


function SecondsToClock(sSeconds)
  local nSeconds = tonumber(sSeconds)
  if nSeconds == 0 then
    return "00:00:00";
  else
    nHours = string.format("%02.f", math.floor(nSeconds/3600));
    nMins = string.format("%02.f", math.floor(nSeconds/60 - (nHours*60)));
    nSecs = string.format("%02.f", math.floor(nSeconds - nHours*3600 - nMins *60));
    return nHours..":"..nMins..":"..nSecs
  end
end


-- recursive function to ping device
local function _ping(retry)
  retry = retry or 0;


-- notify state
local elapsed = os.difftime(os.time(), tonumber(time));
local msg = "Loop #".. retry .." since "..SecondsToClock(elapsed);    
fibaro:log(msg);  


-- check for no more than 30 seconds
  if elapsed > maxtime then 
  return false; 
  end


  --open the socket
  local tcpSocket = Net.FTcpSocket(_deviceIp, _devicePort);
    fibaro:debug(_deviceIp .. " " .. _devicePort)
  --set the read timeout
  tcpSocket:setReadTimeout(250);
  --send packet
  local bytes, errorCode = tcpSocket:write("test");
  fibaro:debug(errorCode)


  --check for error   
  if errorCode == 0 then
    return true;
  else
    if retry < _maxRetryProcess then
      --fibaro:log("Retry process, please wait...");
      fibaro:sleep(1*750);
      return _ping(retry + 1);
    end
    return false;
  end
end


--ping device, secure with pcall to catch errors.
local f, result = pcall(_ping);
local Lock_Away = fibaro:getGlobal("Lock_Away")


if (f) then
--  if (result == true) and (Lock_Away == "Unlocked") then
  if result == true then
    fibaro:log("Device has been found.");
    fibaro:setGlobal(variable_globale_phone,"1") 
-- évolution future possible: stocker la date et l'heure de la dernière présence détectée
    -- fibaro:setGlobal("Present_Phones",os.time()) 
  else
    fibaro:log("Device was not found!");
    fibaro:setGlobal(variable_globale_phone,"0") 
  end
else
  fibaro:log("Error: " .. f);
end

Code du main loop:

 

local thismodule = fibaro:getSelfId(); 
local status = fibaro:getGlobal("Phone_GG_Present")
-- fibaro:debug(thismodule);
if
status == "0"
then 
fibaro:call(thismodule, "setProperty", "currentIcon", 1037)
end


if
status == "1"
then 
fibaro:call(thismodule, "setProperty", "currentIcon", 1036)
end


fibaro:sleep(1000);
Lien vers le commentaire
Partager sur d’autres sites

Dernier petit retour pour ce soir, malgré un VD de vraiment super qualité, sur Iphone  dès lors que le tel passe en veille, le VD ne peux plus le voir, et donc ne détecte plus de présence.

Ce soir j'ai juste envie de scotcher mon téléphone au plafond :( Si quelqu'un trouve une astuce qu'il le crie haut et fort, car je reste à  l'écoute ...

A plouche

Lien vers le commentaire
Partager sur d’autres sites

Dernier petit retour pour ce soir, malgré un VD de vraiment super qualité, sur Iphone  dès lors que le tel passe en veille, le VD ne peux plus le voir, et donc ne détecte plus de présence.

Ce soir j'ai juste envie de scotcher mon téléphone au plafond :( Si quelqu'un trouve une astuce qu'il le crie haut et fort, car je reste à  l'écoute ...

A plouche

sur android dans les options wifi, advanced, on peut sélectionner "keep wifi on during sleep", il y a peut être une option similaire sur iPhone

Lien vers le commentaire
Partager sur d’autres sites

@SebCbien, il n'y a pas une telle fonctionnalité sur iphone à  ma connaissance, mais je délivre en temps réel le résultat de mes tests se qui n'est pas génial de ma part.

Pour l'instant ça remarche top de chez top, si cela vient à  déconner je ferai un retour avec explication si je les trouve :)

Ce que j'ai constaté c'est que fing de temps en temps ne voit plus le port ouvert par l'app sonos, mais pour l'instant tout est ok. Je reprécise que je n'ai pas de sonos à   la maison, je verrai donc si le port ne se referme pas au bout d'un certain temps...

Grazie mille

Lien vers le commentaire
Partager sur d’autres sites

sur l'appstore, il te permettra de trouver le port ouvert par sonos, mais il fort à  parier que ce soit le même que moi soit le 3401. c'est bien celui que tu as configuré?

si oui, peux tu charger fing,puis sélectionner ton phone, et appuyer sur scan services... 

Lien vers le commentaire
Partager sur d’autres sites

×
×
  • Créer...