-
Compteur de contenus
4 189 -
Inscription
-
Dernière visite
-
Jours gagnés
85
Tout ce qui a été posté par sebcbien
-
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
-
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
-
ok, c pas ça ... L'iphone réapparait sur le réseau après combien de minutes en veille ? jamais ?
-
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
-
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.
-
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
-
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
-
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...
-
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.
-
-
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§ion=attach&attach_id=6310
-
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
-
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.
-
Pour info, @tibahut a mis àjour gea sur github (voir ma signature) Sent from my Note4
- 12 330 réponses
-
- support
- script lua
-
(et 1 en plus)
Étiqueté avec :
-
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
-
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 ?
-
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
-
Capteurs Satel ne signalent pas la valeur lastBreached cool ça maiiiissss Et les QUBINO ??? plutôt...
-
Curieux de voir le résultat :-) Sent from my Note4
-
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
-
De gauche à droite: Update en cours Update disponible Recovery Learn mode Connection zwave connection internet Activité réseau Alimentation
-
@nico, oui mais c'est comme en physique quantique, observer le phénomène modifie le résultat ;-) Sent from my Note4
-
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
-
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