domo Posté(e) le 10 novembre 2015 Signaler Posté(e) le 10 novembre 2015 Merci du partage fonctionne nickel 1
domo Posté(e) le 12 novembre 2015 Signaler Posté(e) le 12 novembre 2015 petite question comment tu sais que la ligne de code GEA fonctionne bien je debut avec vos textes ,car dans le debug j'ai une erreur si tu peux m'aider merci l'ami [DEBUG] 22:02:14: [1;31m2015-11-12 22:02:14.001425 [ fatal] Runtime error: /opt/fibaro/scenes/190.lua:3: attempt to index global 'GEA' (a nil value)[0m
sebcbien Posté(e) le 12 novembre 2015 Auteur Signaler Posté(e) le 12 novembre 2015 Tu dois d'abord apprendre ce que c'est gea... Tu ne peux pas mettre ta ligne comme ça n'importe où. Regarde dans ma signature, showroom gea et de la tu trouvera des exemples et un lien vers le fil du support gea. Sent from my Note4
Domodial Posté(e) le 23 décembre 2015 Signaler Posté(e) le 23 décembre 2015 De mémoire, Locale permet également de lancer des notif à tasker basées sur les calendriers Google (mais comme dit plus haut, je n'ai pas eu le temps de m'y remettre depuis un certain temps). Bonjour, C'est quoi Locale ? une appli smartphone ?
sebcbien Posté(e) le 23 décembre 2015 Auteur Signaler Posté(e) le 23 décembre 2015 Oui une applications Android style tasker pour automatiser Sent from my Note4
flamalex Posté(e) le 27 janvier 2016 Signaler Posté(e) le 27 janvier 2016 Salut Sebcbien, je souhaite push mon iphone, afin de le sortir de veille, ca fonctionne, mais aléatoirement cela varie en fonction du tps de reveil, il faudrait en moyen 3 à 10sec max (avant que la routine de recherche du phone démarre) pour être sur que le phone soit ou ne soit pas présent qu'en pensez vous? -- 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:call(130, "sendDefinedPushNotification", "99"); fibaro:log("Starting process"); local variable_globale_phone = "Phone_Alex_Present"; local thismodule=fibaro:getSelfId() local _deviceIp = fibaro:get(thismodule, 'IPAddress') local _devicePort = fibaro:get(thismodule, 'TCPPort') local _maxRetryProcess = 1; local time = tonumber(os.time()); --local maxtime = 14; local maxtime = 20; -- 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 = "Boucle #".. retry .." depuis "..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("Appareil a été trouvé."); 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("Appareil non trouvé!"); fibaro:setGlobal(variable_globale_phone,"0") end else fibaro:log("Error: " .. f); end
jmg38 Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 Bjr, Suite àla mise en place de la détection de présence V 1,03; j'obtiens cette ligne d'erreur en debug du bouton : ERROR 11:25:25: line 88:attempt to concatenate local if'(a boolean value' ). Quelqu'un àune idée de l'origine? merci d'avance Cdt
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 tu as probablement pas déclaré la VG ou tu as ait une faute de frappe dans le nom d'une variable. pour @flamalex , désolé mais je ne comprends pas ton explication ni ta demande
flamalex Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 oui en effet, ça ne l'est pas le téléphone est en veille donc wifi en veille (iphone), il faudrait qu'au clic sur le bouton du VD, (1ere étape) il envoie un push pour sortir le phone de veille (2eme etape) il lance la routine pour détecter le phone en fait il faudrait que cela ce fasse en 2 tps, mais que la première étape est le tps d'envoyer le push sans que la deuxième étape ne se superpose je ne sais pas si c'est plus clair actuellement, les 2 étapes sont envoyées en mm tps, donc si le push est trop long à réveiller le téléphone, résultat il dit que je ne suis pas présent, ce qui est faux et de tps en tps, le push arrive plus vite que la détection, de ce fait il dit que je suis présent et la c'est bon (c'est donc ce schéma qu'il me faudrait constamment) mais cela est aléatoire le but étant de mettre en place un ordre chronologique je ne sais tjr pas si je suis clair
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 ok, j'ai compris... mais tu vas avoir un push otutes les minutes sur ton téléphone... ça risque de saouler àla longue non ? Sinon il y a une autre methode avec un raspberry pour les iPhone, avec fing...
jmg38 Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 Je n'y arrive pas ... la variable globale est bien déclarée, je fais une erreur dans l'enregistrement de l'IP (adresse factice) et du port? fibaro:log("Starting process"); local variable_globale_phone = "TEL_JMG_PRE";local thismodule=fibaro:getSelfId()local _deviceIp = fibaro:get(thismodule,"192.000.0.00")local _devicePort = fibaro:get(thismodule, "3401")local _maxRetryProcess = 20;local time = tonumber(os.time());local maxtime = 56;
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 cette fonction: fibaro:get(thismodule, va récupérer les ip et ports déclarés dans les paramètres du module. Mets l'ip au bon endroit, pas dans le script
flamalex Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 dans un deuxième tps je regarderai la méthode Raspberry mais dans un premier tps, je souhaite résoudre ce probleme de push avant la detection wifi je comprends bien que cela risque de me saouler à la longue, mais je pourrais également m'en servir pour d'autres usages que la détection de présence "constante" j'aimerai que le script, un peu plus haut, fonctionne
jmg38 Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 Effectivement... ça marche merci Seb
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 super :-) @flamalex, rajute simplement un sleep de 3 secondes alors. fibaro:sleep(3*1000);
flamalex Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 ok, mais je ne sais pas ou mettre le "sleep"
flamalex Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 ensuite, je démarre ta deuxième solution http://blog-fibaro.fr/tuto-hc2-et-hcl-ping-telephone-en-veille-ou-tester-votre-presence-2-le-retour/ ceci dit, j'ai un synology et iphone, le wifi vient du routeur numericable bref, je ne vais jamais m'en sortir, c'est un mix de plusieurs tutossss
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 Le sleep tu le met juste après ton push Sent from my Note4
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 Le monde ne s'est pas fait en un jour. La tu es sur des tutos "avancés"... Prends ton temps Sent from my Note4
flamalex Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 le sleep c'est bon, ça fonctionne, merci SEB "Le monde ne s'est pas fait en un jour. La tu es sur des tutos "avancés"..." oui il n'y a que les tutos qui sont avancés!!! c'est pas comme moi
flamalex Posté(e) le 28 janvier 2016 Signaler Posté(e) le 28 janvier 2016 concernant, le synology, test ping, fibaro, as tu un lien, une piste à communiquer? à savoir: je ne sais pas comment exécuter du code sur le syno par exemple je n'ai aucune idée de l'architecture, fibaro, iphone, syno, routeur
sebcbien Posté(e) le 28 janvier 2016 Auteur Signaler Posté(e) le 28 janvier 2016 ce n'est pas moi qui ai fait cette solution, elle est seulement basée sur le même principe que cette methode-ci. Mais bonne chance, elle demande encore plus de connaissances que cette méthode-ci...
sebcbien Posté(e) le 2 avril 2016 Auteur Signaler Posté(e) le 2 avril 2016 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 5
Messages recommandés