Aller au contenu
sebcbien

Detection De Présence

Recommended Posts

non j'utilise ton code modifié ;-) sans le ping

Mais dans ce cas, où as tu mis le code pour l'icône de recherche ? Ou l'as tu mis derriere le bouton ? 

Partager ce message


Lien à poster
Partager sur d’autres sites

Flamalex,

J'ai oublié le S j'ai un 6S donc quand il s'endort (ecran éteint), ça fonctionne toujours !

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Lazer a dit :

Pas mal ta caricature Seb :60:

/HS

oui, y'en a qui pensaient que j'étais vraiment comme mon ancien avatar :2:

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

 Oui, et c'est donc la Delorean qui est en panne? :)

 

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

Moi perso je vais pas utiliser ce nouveau vd car ma variable bascule sur 0 au bout d'une minute et je m'en sert pour des scènes donc sa le fait pas :(

Partager ce message


Lien à poster
Partager sur d’autres sites
oui, y'en a qui pensaient que j'étais vraiment comme mon ancien avatar :2:

Mdr tu as pris un coup de vieux lol

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

@domo le code principal ne change pas il y a eu juste un remise en forme du code et l'ajout d'une label la variable globale est toujours mise à jour

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

Je suis pas un pro mais ma variable globale passe à 0 au bout d'une minute et ça coupe tout chez moi donc je suis revenu à l'ancienne 

Partager ce message


Lien à poster
Partager sur d’autres sites
il y a une heure, Did a dit :

 Oui, et c'est donc la Delorean qui est en panne? :)

 

yep ! :2:

 

Non, c'est râlant, une grosse panne a l'ancienne, juste quelques jours avant de la revendre... en plus on est "a pieds" 

Partager ce message


Lien à poster
Partager sur d’autres sites

@Did j'ai failli la faire cette blague :lol:

 

@sebcbien : bon courage

Partager ce message


Lien à poster
Partager sur d’autres sites

C'est moi qui déconne ou il n'y a pas de main loop dans le VD corrigé de mprinfo ? du coup, chez moi rien ne se passe si je n'appuie pas manuellement sur le bouton du VD...

 

Partager ce message


Lien à poster
Partager sur d’autres sites

@oldelvis,

 

non non tu as bien vu ;-)

A toi de choisir : soit une scène (GEA ou autre) qui appuie sur le bouton soit tu utilises le main loop du VD.

Partager ce message


Lien à poster
Partager sur d’autres sites

Nouvelle mise a jour du VD version 2.31b

 

version 2.31b

  • Creation automatique de la Variable Globale si elle n'existe pas
  • Possibilité d’envoyé une notification lorsque le WIFI s'allume ou s'éteint
  • Ajout de l'affichage de l'icone rechercher dans le code
  • Ajout du code pour presser le bouton dans le menu principale

 

version 2.30b

  • Nettoyage du code avec la suppression de la fonction ping qui ne sert pas puisque l'on utilise l'adresse MAC
  • Ajout d'une icône lorsque la recherche est en cours
  • Ajout d'une étiquette qui vous informe de l'etat de la recherche
  • Ajout de la vérification de la longueur de l'adresse mac et la conversion en minuscule des lettres (Chez moi en majuscules cela ne fonctionne pas)

 

 

Mise en place du VD

 

Renseigné les lignes suivantes :

local variable_globale_phone = "Phone_DIEU"; -- Nom de la variable globale
---------------------------------------------------------------------------------------------------------------
local current_icon_absent = 1022     -- icone absent
local current_icon_present = 1021    -- icone present
local current_icon_recherche = 1020  -- icone recherche du tel

Activation des notifications (Trés pratique pour faire des tests)

local ID_Tel = 189

Suppression des notification

local ID_Tel = ""

Reglage du nombres et temps de recherche

local maxRetry_Process = 2;
local scheduler_value = 2;   -- (minutes) scheduled time of this process (must match the mainloop scheduled time)
local check_wait = 15;        -- (seconds) to wait between each poll device

Activation du debug

local debug = true

 

Code du Bouton

-- IP Smartphone Presence Check V2.2 using arp table
-- Copyright © 2014 Sébastien Jauquet.
-- http://www.domotique-fibaro.fr/index.php/topic/2613-detection-de-pr%C3%A9sence/
-- mac adress check: Roman
-- http://forum.fibaro.com/index.php?/topic/21062-idea-how-to-monitor-people-at-home/#entry86009
-- modifier le 08-02-2017 V2.31 beta 

local variable_globale_phone = "Phone_DIEU";
---------------------------------------------------------------------------------------------------------------
local current_icon_absent = 1022     -- icone absent
local current_icon_present = 1021    -- icone present
local current_icon_recherche = 1020  -- icone recherche du tel
local ID_Tel = 189                   -- Id du Tel laisser vide pour ne pas recevoir de notifications
---------------------------------------------------------------------------------------------------------------
local maxRetry_Process = 2;
local scheduler_value = 2;   -- (minutes) scheduled time of this process (must match the mainloop scheduled time)
local check_wait = 15;        -- (seconds) to wait between each poll device
local debug = true

---------------------------------------------------------------------------------------------------------------
-- Ne rien toucher en dessous de cette ligne
---------------------------------------------------------------------------------------------------------------

---------------------------------------------------------------------------------------------------------------
-- Fonction affichage debugage
---------------------------------------------------------------------------------------------------------------
function Debug(color, message)
         if debug then 
            if color and color ~= "" then
		       fibaro:debug('<span style="color:'..color..';">'..message..'</span>');
	        else
		       fibaro:debug(message);
	        end
         end
end
-------------------------------------------------------------------------------------------------------
-- Verification si Global Variable n'existe pas by @LAZER
-------------------------------------------------------------------------------------------------------
function VG(VG_phone)
         fibaro:debug("Verification VG "..VG_phone)
         local HC2 = Net.FHttp("127.0.0.1", 11111)
         local response, status, errorCode = HC2:GET("/api/globalVariables/"..VG_phone)
         if tonumber(errorCode) == 0 and tonumber(status) == 404 then
            -- Create global variable if it does not exist
            local payload = '{"name":"'..VG_phone..'", "isEnum":0, "value":""}'
            local response, status, errorCode = HC2:POST("/api/globalVariables", payload)
            if tonumber(errorCode) == 0 and (tonumber(status) == 200 or tonumber(status) == 201) and response ~= nil and response ~= "" then
               fibaro:debug('<span style="display:inline;color:green;">Global variable "'..VG_phone..'" created</span>')
            else
               fibaro:debug('<span style="display:inline;color:red;">Error : Cannot create global variable "'..VG_phone..'", errorCode='..errorCode..', status='..status..', payload='..payload..', response='..(response or "")..'</span>')
            end
         end
end
---------------------------------------------------------------------------------------------------------------
-- Mise à jour de l'etiquette message
---------------------------------------------------------------------------------------------------------------
function Label(couleur, mesg)
        if couleur ~= "" then
           fibaro:call(selfId, "setProperty", "ui.Message.value", '<font color="'..couleur..'">'..mesg..'</font>')
        else 
		   fibaro:call(selfId, "setProperty", "ui.Message.value", mesg)
        end
end		

---------------------------------------------------------------------------------------------------------------
-- Fonction Heure secondes
---------------------------------------------------------------------------------------------------------------
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

---------------------------------------------------------------------------------------------------------------
-- fonction recherche MAC adresse
---------------------------------------------------------------------------------------------------------------
function FindMac(retry)
    retry = retry or 0;
    local foundUser = false;
-- notify state
	local elapsed = os.difftime(os.time(), tonumber(time));
	local msg = "Tentative(s) ".. retry+1 .. "/"..maxRetry_Process+1 .. " depuis "..SecondsToClock(elapsed);
	fibaro:call(selfId, "setProperty", "ui.Message.value", msg)
	
-- check for no more than maxtime seconds
    if elapsed > maxtime then
       return false; 
    end
    fibaro:log(msg);  
    Debug("yellow",msg)
    local response, status, errorCode = HC2.POST(HC2, "/api/networkDiscovery/arp", "{}");
    local jsonTable = json.decode(response) 
    --fibaro:debug("errorcode:"..errorCode.."status: "..status)
    if (tonumber(errorCode)==0 and tonumber(status)==200) then  
       for i, name in ipairs(jsonTable) do
	      if foundUser == false then
             --Debug("grey",i.." found mac:"..name['mac'])
             if(name['mac'] == mac) then
                foundUser = true;
                Debug("green","Device "..name['mac'].." trouvé en moins de "..elapsed+check_wait.." s");
             end
          end
       end
    else Debug("red","error json decode")
    end

 -- check for error
    if foundUser == true then
	   return true;
    else
	   if retry < maxRetry_Process then
          fibaro:log("Retry process, please wait...");
          fibaro:sleep(check_wait*1000);
          return FindMac(retry + 1);
       end
       return false;
    end
end

---------------------------------------------------------------------------------------------------------------
-- DEBUT DU PROGRAMME -- Ne rien toucher en dessous de cette ligne
---------------------------------------------------------------------------------------------------------------
selfId = fibaro:getSelfId();
time = tonumber(os.time());
maxtime = (scheduler_value*60) - (check_wait+1);

---------------------------------------------------------------------------------------------------------------
-- Recuperation de l'adresse MAC et vérification de la longueur et conversion en minuscules
---------------------------------------------------------------------------------------------------------------
VG(variable_globale_phone) -- verification VG et creation si not exist
mac = string.lower(fibaro:get(selfId, 'IPAddress')); -- recupere la mac adresse en minuscules

if string.len(mac) ~= 17 then -- test la longueur de la MAC adresse
   Label ("red", "Erreur adresse MA : "..mac)
   fibaro:abort()
end 
---------------------------------------------------------------------------------------------------------------
-- mise a jour label
---------------------------------------------------------------------------------------------------------------
fibaro:call(selfId, "setProperty", "ui.TEL.value", variable_globale_phone)
fibaro:call(selfId, "setProperty", "currentIcon", current_icon_recherche)
---------------------------------------------------------------------------------------------------------------
current_icon_recherche
HC2 = Net.FHttp("127.0.0.1", 11111)



fibaro:log("Starting process");
Debug("yellow","Recherche adresse MAC: "..mac)

local f, result = pcall(FindMac);

if (f) then
   local Valeur_VG = fibaro:getGlobal(variable_globale_phone)
   if (result == true) then
      fibaro:log("Device trouvé.");
      fibaro:setGlobal(variable_globale_phone,"1")
      local heureVariable = fibaro:getGlobalModificationTime(variable_globale_phone)
      Label ("green", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI ON.")
      if ID_Tel ~="" and Valeur_VG ~= "1" then
         fibaro:call(ID_Tel, "sendPush", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI ON.")
      end
      Debug("green","Global Var: "..variable_globale_phone.." = 1");
      fibaro:call(selfId, "setProperty", "currentIcon", current_icon_present)
   else
      fibaro:log("Device Non trouvé!");
      fibaro:setGlobal(variable_globale_phone,"0")
      local heureVariable = fibaro:getGlobalModificationTime(variable_globale_phone)
      Label ("red", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI OFF")
      if ID_Tel ~="" and Valeur_VG ~= "0" then
         fibaro:call(ID_Tel, "sendPush", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI OFF.")
      end
      Debug("red","Device "..mac.." Non trouvé");
      Debug("red","Global Var: "..variable_globale_phone.." = 0");
      fibaro:call(selfId, "setProperty", "currentIcon", current_icon_absent)
   end
else
   fibaro:log("Error: " .. tostring(f));
end

 

Code de la boucle principale :

local selfId = fibaro:getSelfId();

-- 1ère fois que le main loop s'exécute, on crée une variable nommée "instance" car elle n'existe pas. Elle existera au 2ème passage donc ne sera pas recrée.
if (not instance) then
    -- on indique la fréquence d'execution souhaitée (en minutes)
    instance = { lastrun = 0, every = 2 }
    fibaro:debug("first run")
end
 
-- on vérifie la différence entre cette exéction et la dernière (stocké dans instance.lastrun)
diff = os.date("*t", os.difftime(os.time(), instance.lastrun))
 
-- si la différence en minutes et supérieure ou égale à la fréquence souhaitée (instance.every)
if (diff.min >= instance.every) then
   -- TON CODE ---
   fibaro:call(selfId, "pressButton", "3")
   instance.lastrun = os.time()
   fibaro:debug("executed")
end

 

 

Icones pour ce VD :

 

User_GG_icon_Absent.pngUser_GG_icon_present.pngUser_Seb_icon_Absent.pngUser_Seb_icon_present.png1397.png.419524d5961be3d39ed23baf2d439ee3.png

 

 

Apercu du VD :

 

dieu off.jpgdieu recherche.jpgdieu on.jpg

 

Modules Virtuel :

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

@pepite nouvelle mise a jour disponible ;)

 

  • Upvote 1

Partager ce message


Lien à poster
Partager sur d’autres sites

Merci pour cette réactivité.. 

J'avais effectivement mis le code de sebcbien dans le main loop mais ça marchait pas... J'ai dû faire une mauvaise manip.. 

Partager ce message


Lien à poster
Partager sur d’autres sites

@mprinfo

TOP !! Avec creation automatique de la VG et push

 

Tu n'aurais pas inverse tes push ? entre Id_Tel et Valeur_VG

voila ce que je comprends, mais ne pas oublier je suis loin d'etre un expert à côté de toi et les boss

Il y a 4 heures, mprinfo a dit :

fibaro:setGlobal(variable_globale_phone,"1") local heureVariable = fibaro:getGlobalModificationTime(variable_globale_phone) Label ("green", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI ON.") if ID_Tel ~="" and Valeur_VG ~= "1" then fibaro:call(ID_Tel, "sendPush", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI ON.") end

 

Valeur_VG different de 1 (donc 0 dans ce cas), pas de push WIFI ON puisque le setGlobal l'a mis à 1 juste avant non ?

 

fibaro:setGlobal(variable_globale_phone,"0") 
local heureVariable = fibaro:getGlobalModificationTime(variable_globale_phone) 
Label ("red", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI OFF") 
if ID_Tel ~="" and Valeur_VG ~= "0" then 
fibaro:call(ID_Tel, "sendPush", os.date("Le %d/%m/%y a %HH%M : ", heureVariable).."WIFI OFF.") 
end

Idem la non, si VG différente de 0 (donc 1) envoie du push WIFI OFF, alors que le setGlobal met à 0 la VG si result = false ?

Partager ce message


Lien à poster
Partager sur d’autres sites

Non c'est un test qui permet de ne pas avoir un push à chaque recherche mais seulement lorsque il y a un changement d'état

Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

ah ok, je comprends

merci pour l'explication

Partager ce message


Lien à poster
Partager sur d’autres sites

Bonjour  à tous, 

D'abord je dois remercié pour l'effort et l'énergie mis .

J'ai installé la version 2.31 b et j'ai cette erreur . dans le debug button  

 

Bien a vous ,


[ERROR] 19:24:27: line 150: '=' expected near 'HC2'
[ERROR] 19:24:28: line 150: '=' expected near 'HC2'
[ERROR] 19:24:29: line 150: '=' expected near 'HC2'
[ERROR] 19:24:29: line 150: '=' expected near 'HC2'
[ERROR] 19:24:29: line 150: '=' expected near 'HC2'
[ERROR] 19:25:37: line 150: '=' expected near 'HC2'
[ERROR] 19:27:37: line 150: '=' expected near 'HC2'

 

Partager ce message


Lien à poster
Partager sur d’autres sites

Voila la ligne ...

--------------------------------------------------------------------------------------------------------------
-- mise a jour label
---------------------------------------------------------------------------------------------------------------
fibaro:call(selfId, "setProperty", "ui.TEL.value", variable_globale_phone)
fibaro:call(selfId, "setProperty", "currentIcon", current_icon_recherche)
---------------------------------------------------------------------------------------------------------------
current_icon_recherche
HC2 = Net.FHttp("127.0.0.1", 11111)



fibaro:log("Starting process");
Debug("yellow","Recherche adresse MAC: "..mac)

 

Partager ce message


Lien à poster
Partager sur d’autres sites

En fait, j'ai supprimé la ligne 149 ,

current_icon_recherche

et apparemment le VD fonctionne 

  • Upvote 2

Partager ce message


Lien à poster
Partager sur d’autres sites

merci pour cette mise à jour et merci à Alexandru j'ai du supprimer la ligne 149 pour que ça fonctionne 

je vais tester ça ce soir 

Partager ce message


Lien à poster
Partager sur d’autres sites

Où est la version 2.31b? on en parle mais pas de lien.

 

Partager ce message


Lien à poster
Partager sur d’autres sites

J'ai mis le code mais pas le VD


Envoyé de mon SM-G901F en utilisant Tapatalk

Partager ce message


Lien à poster
Partager sur d’autres sites

×