Aller au contenu

sebcbien

Membres confirmés
  • Compteur de contenus

    4 189
  • Inscription

  • Dernière visite

  • Jours gagnés

    85

Tout ce qui a été posté par sebcbien

  1. sebcbien

    Detection De Présence

    Essaye avec un Android, histoire d'être sûr que c'est un "problème" d'iPhone et pas de comportement de ton réseau. Ou tu peux aussi tester avec un autre equipment réseau que tu active/désactive Sent from my Note4
  2. sebcbien

    Detection De Présence

    Passe le schedule du main loop à8 minutes: instance = { lastrun = 0, every = 8 } et change aussi le paramètre dans le bouton à8: local scheduler_value = 8; -- (minutes) scheduled time of this process (must match the mainloop scheduled time) Sent from my Note4
  3. sebcbien

    Detection De Présence

    ok, c pas ça ... L'iphone réapparait sur le réseau après combien de minutes en veille ? jamais ?
  4. sebcbien

    Detection De Présence

    autre questions: - la HC2 est connectée directement au routeur qui fournit le wifi ? - tu as combien de devices wifi et ethernet ? il pourrait éventuellement y avoir un "isolement" avec certains routeurs
  5. sebcbien

    Detection De Présence

    incroyable, apparemment, les iPhone coupent complètement le wifi, au point que les routeurs l'enlèvent de la table ARP !!! Maintenant si ies iPhone se reconnectent toutes les 3 ou 5 ou 7 minutes, il suffit d'augmenter le temps de check.
  6. sebcbien

    Detection De Présence

    voici le VFIB en V2.1 sans le lock_away: Presence_XXX V2.1.vfib et le code du bouton: -- IP Smartphone Presence Check V1.2 - check with ping on port sonos -- IP Smartphone Presence Check V2.0 - sonos not reliable anymore, using arp table -- IP Smartphone Presence Check V2.1 - removed Lock_Away -- Copyright © 2015 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 -- mac adress check: Roman -- http://forum.fibaro.com/index.php?/topic/21062-idea-how-to-monitor-people-at-home/#entry86009 -- local variable_globale_phone = "Phone_XXX_Present"; -- local current_icon_absent = 1035 -- homme -- local current_icon_present = 1034 -- homme local variable_globale_phone = "Phone_XXX_Present"; local current_icon_absent = 1037 -- femme local current_icon_present = 1036 -- femme local maxRetry_Process = 20; local scheduler_value = 2; -- (minutes) scheduled time of this process (must match the mainloop scheduled time) local check_wait = 5; -- (seconds) to wait between each poll device local debug = true -- local login = "admin"; -- local pass = "not needed with port 11111"; local selfId=fibaro:getSelfId(); local time = tonumber(os.time()); local maxtime = (scheduler_value*60) - (check_wait+1); local mac = fibaro:get(selfId, 'IPAddress'); local HC2 = Net.FHttp("127.0.0.1", 11111); -- HC2:setBasicAuthentication(login, pass); 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 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 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); 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 < maxRetry_Process then --fibaro:log("Retry process, please wait..."); fibaro:sleep(1*750); return _ping(retry + 1); end return false; end end local function FindMac(retry) retry = retry or 0; local foundUser = false; -- notify state local elapsed = os.difftime(os.time(), tonumber(time)); local msg = "Loop #".. retry .." since "..SecondsToClock(elapsed); -- 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'].." Has been found after "..elapsed.." 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 fibaro:log("Starting process"); Debug("yellow","Searching for Mac Address: "..mac) --ping device, secure with pcall to catch errors. --local f, result = pcall(_ping); local f, result = pcall(FindMac); if (f) then if (result == true) then fibaro:log("Device has been found."); fibaro:setGlobal(variable_globale_phone,"1") Debug("green","Global Var: "..variable_globale_phone.." Set to 1"); fibaro:call(selfId, "setProperty", "currentIcon", current_icon_present) -- é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") Debug("red","Device "..mac.." Has been NOT been found"); Debug("red","Global Var: "..variable_globale_phone.." Set to 0"); fibaro:call(selfId, "setProperty", "currentIcon", current_icon_absent) end else fibaro:log("Error: " .. tostring(f)); end
  7. sebcbien

    Detection De Présence

    ah non, flute, c'est ma variable Lock_Away que j'ai enlevé du script mais pas du vfib... reprend le script et colle le dans le bouton, ou modifie la ligne 158: if (result == true) and (Lock_Away == "Unlocked") then en: if (result == true) then
  8. sebcbien

    Detection De Présence

    attention, depuis quelques versions (chez moi en tout cas) faire un save ne TUE PAS LES INSTANCES PRECEDENTES... merci fibaro Làapparemment, tu as une instance qui check avec une mauvaise mac adresse... et qui ne trouve pas .... et une instance qui check avec une bonne mac et qui trouve... Je vous fais pas un dessin de comment ça m'a pourri la vie pour les tests... une fois une rerreur a fait que l'instance tournait en boucle sans exit possible et j'ai du... rebooter pour la terminer...
  9. sebcbien

    Detection De Présence

    Effectivement, plus besoin de GEA pour scheduler le check, la main loop s'en charge.. Par contre j'utilise toujours GEA pour réagir aux changements de status, notifier etc.
  10. sebcbien

    Detection De Présence

    exemple de logs:
  11. sebcbien

    Detection De Présence

    et comme je sais que vous êtes des fainéants, voici un VD tout fait, plus qu'a l'importer Version 2.0: Presence_XXX.vfib La V2.1 EST PLUS plus bas, (post #235) ou ici: http://www.domotique-fibaro.fr/index.php?app=core&module=attach&section=attach&attach_id=6310
  12. sebcbien

    Detection De Présence

    Eh bien, vous savez quoi ? Ca fonctionne A LA PERFECTION !!!!! Téléphones: Samsung Note 4 et Nexus 5 et pas une seule erreur/fausse détection depuis 48h... C'est trop simple et je suis trop content Si quelqu'un ( @gomba777 par exemple ?) peut me faire un retour avec des iPhones, ce serait cool
  13. sebcbien

    Monitoring Hc2 Et Reboot

    Non, pas trop, en fait quand ma box est vraiment bien plantée, le reboot àdistance ne fonctionne plus car l'api est par terre... Donc maintenant je monitore la Ram, et dès qu'elle dépasse un certain seuil, je reboote pendant la nuit.
  14. sebcbien

    Support Gea

    Pour info, @tibahut a mis àjour gea sur github (voir ma signature) Sent from my Note4
  15. sebcbien

    Detection De Présence

    Bonjour, Avec les dernières mises à jour Android, l'appli sonos installée pour répondre aux pings de ce module se met en veille et donc je n'ai plus de détection (très aléatoire) J'ai donc cherché une autre solution et je suis tombé sur un bout de code sur le forum officiel: http://forum.fibaro.com/index.php?/topic/21062-idea-how-to-monitor-people-at-home/#entry86009 Ce code permet de récupérer la table ARP et la liste des MAC adresses du réseau... remplaçant avantageusement les solutions externes basées sur linux/raspberry/fing J'ai néanmoins laissé la fonction ping, elle aura peut être un intérêt dans certains cas, avec d'autres devices... Après quelques tests, ça semble très bien fonctionner et j'ai donc mis tout ça en musique... Après 1 jour de tests, ça fonctionne toujours aussi bien. Installation: Téléchargez la Version 2.1: http://www.domotique-fibaro.fr/index.php/topic/2613-detection-de-pr%C3%A9sence/page-12#entry121547 (Ou modifiez les deux scripts si vous aviez la version précédente) Mettez simplement la mac adresse dans le champ IP du VD (en minuscules, séparé par des ":" Pour ne pas bousculer la HC2, j'ai réglé le timing comme suit: - Si le téléphone est présent: 1 check toutes les 2 minutes - Si le téléphone est absent, 1 check toutes les 5 secondes Ceci permet d'éviter les fausses "alertes". il faudra donc deux minutes max à la HC2 pour se rendre compte que un téléphone est parti, mais seulement 5 secondes losqu'il sera de retour. Tout est paramétrable, j'ai mis pas mal de variables pour que vous puissiez ajuster ça à votre goà»t il suffit de remplacer les deux codes ci-dessous (bouton et main loop) dans le VD présenté en début de fil. Merci à @krikroff @steven (main loop) pour certains bouts de codes et @mprinfo pour l'astuce du port 11111 permettant d'éviter d'encoder login et pass admin Voici le nouveau code du bouton (attention, V2.0, pour la V2.1, voir plus bas): -- IP Smartphone Presence Check V1.2 - check with ping on port sonos -- IP Smartphone Presence Check V2.0 - sonos not reliable anymore, using arp table -- 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 -- mac adress check: Roman -- http://forum.fibaro.com/index.php?/topic/21062-idea-how-to-monitor-people-at-home/#entry86009 local variable_globale_phone = "Phone_Seb_Present"; local current_icon_absent = 1035 -- homme local current_icon_present = 1034 -- homme -- local variable_globale_phone = "Phone_GG_Present"; -- local current_icon_absent = 1037 -- femme -- local current_icon_present = 1036 -- femme local maxRetry_Process = 20; local scheduler_value = 2; -- (minutes) scheduled time of this process (must match the mainloop scheduled time) local check_wait = 5; -- (seconds) to wait between each poll device local debug = true -- local login = "admin"; -- local pass = "not needed with port 11111"; local selfId=fibaro:getSelfId(); local time = tonumber(os.time()); local maxtime = (scheduler_value*60) - (check_wait+1); local mac = fibaro:get(selfId, 'IPAddress'); local HC2 = Net.FHttp("127.0.0.1", 11111); -- HC2:setBasicAuthentication(login, pass); 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 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 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); 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 < maxRetry_Process then --fibaro:log("Retry process, please wait..."); fibaro:sleep(1*750); return _ping(retry + 1); end return false; end end local function FindMac(retry) retry = retry or 0; local foundUser = false; -- notify state local elapsed = os.difftime(os.time(), tonumber(time)); local msg = "Loop #".. retry .." since "..SecondsToClock(elapsed); -- 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'].." Has been found after "..elapsed.." 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 fibaro:log("Starting process"); Debug("yellow","Searching for Mac Address: "..mac) --ping device, secure with pcall to catch errors. --local f, result = pcall(_ping); local f, result = pcall(FindMac); if (f) then if (result == true) then fibaro:log("Device has been found."); fibaro:setGlobal(variable_globale_phone,"1") Debug("green","Global Var: "..variable_globale_phone.." Set to 1"); fibaro:call(selfId, "setProperty", "currentIcon", current_icon_present) -- é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") Debug("red","Device "..mac.." Has been NOT been found"); Debug("red","Global Var: "..variable_globale_phone.." Set to 0"); fibaro:call(selfId, "setProperty", "currentIcon", current_icon_absent) end else fibaro:log("Error: " .. tostring(f)); end et le code du main loop: local selfId = fibaro:getSelfId(); local current_icon_absent = 1035 -- homme local current_icon_present = 1034 -- homme -- local current_icon_absent = 1037 -- femme -- local current_icon_present = 1036 -- femme -- local Verification = fibaro:get(selfId,"TCPPort"); -- 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", "1") --[[local status = fibaro:getGlobal("Phone_Seb_Present") if status == "0" then fibaro:call(selfId, "setProperty", "currentIcon", current_icon_absent) end if status == "1" then fibaro:call(selfId, "setProperty", "currentIcon", current_icon_present) end --]] -- FIN DE TON CODE --- -- on stock l'heure de la nouvelle exécution instance.lastrun = os.time() fibaro:debug("executed") end et le code du main loop: local selfId = fibaro:getSelfId(); local current_icon_absent = 1035 -- homme local current_icon_present = 1034 -- homme -- local current_icon_absent = 1037 -- femme -- local current_icon_present = 1036 -- femme -- local Verification = fibaro:get(selfId,"TCPPort"); -- 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", "1") --[[local status = fibaro:getGlobal("Phone_Seb_Present") if status == "0" then fibaro:call(selfId, "setProperty", "currentIcon", current_icon_absent) end if status == "1" then fibaro:call(selfId, "setProperty", "currentIcon", current_icon_present) end --]] -- FIN DE TON CODE --- -- on stock l'heure de la nouvelle exécution instance.lastrun = os.time() fibaro:debug("executed") end
  16. heuuu c'est quoi cette lettre ? C'est celle dont on parle ici: http://www.domotique-fibaro.fr/index.php/topic/7888-open-letter-to-fibaro/?hl=lettre ou c'est une autre ?
  17. Tu as bien vérifié tes entêtes de ta scène gea qui plante ? Il n'y a pas d'id qui n'existent plus ? Essaye en les enlevant puis remets les progressivement. Sent from my Note4
  18. Capteurs Satel ne signalent pas la valeur lastBreached cool ça maiiiissss Et les QUBINO ??? plutôt...
  19. je n'ai pas de problème de ce genre...
  20. Curieux de voir le résultat :-) Sent from my Note4
  21. Hé moi j'ai un problème pour transférer les images de ma caméra de mon synology sur ma TV en DLNA... C'est hors sujet ou pas ?!? [emoji1] Sent from my Note4
  22. De gauche à droite: Update en cours Update disponible Recovery Learn mode Connection zwave connection internet Activité réseau Alimentation
  23. @nico, oui mais c'est comme en physique quantique, observer le phénomène modifie le résultat ;-) Sent from my Note4
  24. Moi je viens de suivre le forum de domoticz pendant quelques semaines... bah ils sont vraiment pas à l'abri des problèmes... https://www.domoticz.com/forum/viewforum.php?f=24
  25. oui, normalement si tu remplace SMS par Telegram ici: ["VG_Name"] = "SMS"}; par ["VG_Name"] = "Telegram"}; ça devrait fonctionner. Dis nous quoi et éventuellement deux trois infos sur comment implémenter télégram
×
×
  • Créer...