flamalex Posté(e) le 2 février 2022 Signaler Posté(e) le 2 février 2022 (modifié) Bonjour, j'ai cru comprendre que ça ne pingait pas mais peut on adapter pour pinger dans la HC2, si détection par capteur extérieur (trigg-1 dans GEA) donc appui sur BP "Check if iphone is Present" du VD IP Smartphone Presence Check V1.2-- Copyright © 2014 Sébastien Jauquet. , alors notif sur phone, ça le réveillait et donc accroche du wifi (si présent) et ping le code du VD avec un BP sur la HC2 était celui ci, est il possible de l'adapter sur la HC3? -- 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(759, "sendDefinedPushNotification", "99"); fibaro:sleep(6*1000); fibaro:log("Starting process"); local variable_globale_phone = "Phone_Alex"; local thismodule=fibaro:getSelfId() local _deviceIp = fibaro:get(thismodule, 'IPAddress') local _devicePort = fibaro:get(thismodule, 'TCPPort') local _maxRetryProcess = 5; local time = tonumber(os.time()); local maxtime = 14; 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,"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("Appareil non trouvé!"); fibaro:setGlobal(variable_globale_phone,"Absent") end else fibaro:log("Error: " .. f); end Modifié le 23 février 2022 par flamalex
fastvd Posté(e) le 5 février 2022 Signaler Posté(e) le 5 février 2022 salut flamalex. en fait, ce QA fonctionne bien sur mac. Mais il y a des nuances : 1) personnellement j'ai commencé à travailler normalement quand j'ai mis plus de délais et plus de contrôles... tout est dans le code... 2) voici comment je l'ai personnellement configuré: self.maxRetry_Process = 10 - nombre de recherche maximum self.scheduler_value = 5 - minutes entre 2 recherches téléphoniques self.check_wait = 10 - seconde entre 2 ping 3) vous devez savoir et comprendre, si vous avez 1 routeur avec 1 adaptateur wifi à la maison, vous pouvez facilement trouver l'adresse mac de votre téléphone sur votre routeur et tout fonctionnera bien 4) si vous avez plusieurs routeurs à la maison avec différents SSID (noms), alors TOUS les téléphones ont ce qu'on appelle une protection, sous la forme d'une randomisation de l'adresse mac du téléphone pour différents SSID. Mais dans les paramètres du téléphone spécifiquement pour ce SSID, vous pouvez désactiver la randomisation, puis sur tous les appareils de votre maison, il y aura 1 MAC d'origine. 5) si vous ne voulez pas ou ne pouvez pas désactiver la randomisation, vous devrez faire plusieurs QA pour chaque mac
flamalex Posté(e) le 5 février 2022 Signaler Posté(e) le 5 février 2022 Merci @fastvd pour ces explications je comprends bien mon utilisation est un peu « détournée » je m’explique, lorsque l’alarme est activée TOTAL, alors les 2 phones sont forcés en absent. Si alarme désactivée ils sont forcés en présent. A quoi me sert le Ping? Eh bien, si je rentre et qu’une barrière extérieur me détecte alors la box envoie une notification sur les 2 phones pour les réveiller si l’un des 2 phones accroche le wifi, alors c’est ma femme ou moi qui rentrons et donc désactivation alarme. sur la hc2 je faisais 3 vérifications en 15secondes afin d’être certain. je souhaite reproduire la même chose sur hc3, mais étant débutant sur celle ci, je suis perdu (sur plusieurs sujets)
Dragoniacs Posté(e) le 24 février 2022 Auteur Signaler Posté(e) le 24 février 2022 Perso, je n'utiliserai pas ce QA pour armer et désarmer une alarme.Moi je m'en sert pour activer le profil "Away" qui réduit le chauffage, lance l'aspirateur robot et active une alarme "silencieuse". Mais comme mon tél perd régulièrement le wifi, il m'arrive d'être en réunion en télétravail et que l'aspirateur se lance Donc je ne me risque pas a armer une vraie alarme Envoyé de mon M2012K11AG en utilisant Tapatalk
flamalex Posté(e) le 24 février 2022 Signaler Posté(e) le 24 février 2022 Moi non plus! mais ce n’est pas ce que je dis.
flamalex Posté(e) le 24 février 2022 Signaler Posté(e) le 24 février 2022 (modifié) Je dis: « sur déclenchement barrière multi faisceau, push notification sur 2 phones, afin de les réveiller pour qu’ils accrochent le wifi si ils sont dans la zone wifi, puis un push sur le Bp check du vd presence, qui a pour effet de pinger sur ARP et voir si un des 2 phones apparaît, si oui alors actions divers » pour info, c’est hyper fiable, je l’utilise depuis 7 ans sur hc2. le fait de l’utiliser ou non sur une alarme n’est pas la question ni le problème, je n’ai d’ailleurs pas précisé l’alarme ni même le contexte. la question est: ou est passé le Bp check presence qu’il y avait sur le vd d’origine, qui lui permettait de fiabiliser les actions. j’espère avoir été un peu plus clair. Merci Modifié le 25 février 2022 par flamalex
Dragoniacs Posté(e) le 25 février 2022 Auteur Signaler Posté(e) le 25 février 2022 Ah ok, je comprends mieux.Le bouton était présent sur le VD mais je ne l'ai pas remis sur le QA. Il servait à lancer la vérification, a interval régulier.Je peux le remettre si tu veux. Envoyé de mon M2012K11AG en utilisant Tapatalk
flamalex Posté(e) le 25 février 2022 Signaler Posté(e) le 25 février 2022 (modifié) Oh oui volontiers ça serait cool @Dragoniacs pourrais tu publier une le V1.2 avec le BP check if phone is present ? j'avais ceci dans le BP check sur HC2 fibaro:call(759, "sendDefinedPushNotification", "99"); fibaro:sleep(6*1000); fibaro:log("Starting process"); local variable_globale_phone = "Phone_Alex"; local thismodule=fibaro:getSelfId() local _deviceIp = fibaro:get(thismodule, 'IPAddress') local _devicePort = fibaro:get(thismodule, 'TCPPort') local _maxRetryProcess = 5; local time = tonumber(os.time()); local maxtime = 14; 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 then fibaro:log("Appareil a été trouvé."); fibaro:setGlobal(variable_globale_phone,"Present") else fibaro:log("Appareil non trouvé!"); fibaro:setGlobal(variable_globale_phone,"Absent") end else fibaro:log("Error: " .. f); end et ceci dans la boucle principale --[[ %%autostart %%properties %%globals ]]-- local thismodule = fibaro:getSelfId(); local status = fibaro:getGlobal("Phone_Alex") if status == "Absent" then fibaro:call(thismodule, "setProperty", "currentIcon", 1075) fibaro:setGlobal("PRESENCE","non") end if status == "Present" then fibaro:call(thismodule, "setProperty", "currentIcon", 1074) fibaro:setGlobal("PRESENCE","oui") end fibaro:sleep(1000); pour info: dans le VD HC2, l'appui sur le BP check provoquait la recherche de l'ip fixe du phone sur le port 62078 (vu la fiabilité, j'aimerai reproduire exactement la même chose sur HC3, merci) Modifié le 27 février 2022 par flamalex
flamalex Posté(e) le 28 février 2022 Signaler Posté(e) le 28 février 2022 Le 25/02/2022 à 09:25, flamalex a dit : Oh oui volontiers ça serait cool @Dragoniacs pourrais tu publier une le V1.2 avec le BP check if phone is present ? j'avais ceci dans le BP check sur HC2 fibaro:call(759, "sendDefinedPushNotification", "99"); fibaro:sleep(6*1000); fibaro:log("Starting process"); local variable_globale_phone = "Phone_Alex"; local thismodule=fibaro:getSelfId() local _deviceIp = fibaro:get(thismodule, 'IPAddress') local _devicePort = fibaro:get(thismodule, 'TCPPort') local _maxRetryProcess = 5; local time = tonumber(os.time()); local maxtime = 14; 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 then fibaro:log("Appareil a été trouvé."); fibaro:setGlobal(variable_globale_phone,"Present") else fibaro:log("Appareil non trouvé!"); fibaro:setGlobal(variable_globale_phone,"Absent") end else fibaro:log("Error: " .. f); end et ceci dans la boucle principale --[[ %%autostart %%properties %%globals ]]-- local thismodule = fibaro:getSelfId(); local status = fibaro:getGlobal("Phone_Alex") if status == "Absent" then fibaro:call(thismodule, "setProperty", "currentIcon", 1075) fibaro:setGlobal("PRESENCE","non") end if status == "Present" then fibaro:call(thismodule, "setProperty", "currentIcon", 1074) fibaro:setGlobal("PRESENCE","oui") end fibaro:sleep(1000); pour info: dans le VD HC2, l'appui sur le BP check provoquait la recherche de l'ip fixe du phone sur le port 62078 (vu la fiabilité, j'aimerai reproduire exactement la même chose sur HC3, merci)
Dragoniacs Posté(e) le 2 mars 2022 Auteur Signaler Posté(e) le 2 mars 2022 @flamalex Voilà la V1.2 pour toi 2
flamalex Posté(e) le 2 mars 2022 Signaler Posté(e) le 2 mars 2022 (modifié) @Dragoniacs top merci observation(s): - je coupe le wifi sur le phone, je clic sur BP FIND, il lui faut 2 à 3 min pour me dire que je suis absent - à l'inverse, je rétablis le wifi du phone, il me trouve de suite, sans que je clic sur le BP je souhaiterai que des le clic sur BP il trouve ou pas instantanément le phone EDIT 1: j'ai supprimé le mainloop: résultat, je rétablis le wifi du phone, il me trouve de suite (3 sec), apres avoir clic sur le BP mais j'ai toujours un temps de retour élevé lorsque il faut me signaler l'absence je coupe le wifi sur le phone, je clic sur BP FIND, il lui faut 1 min pour me dire que je suis absent Modifié le 2 mars 2022 par flamalex
Dragoniacs Posté(e) le 2 mars 2022 Auteur Signaler Posté(e) le 2 mars 2022 Oui, car il faut plusieurs boucles pour vérifier que le tel n'est pas joignable.Il faut que tu modifies les paramètres si tu veux que ce soit plus rapide .Envoyé de mon M2012K11AG en utilisant Tapatalk
flamalex Posté(e) le 2 mars 2022 Signaler Posté(e) le 2 mars 2022 (modifié) @Dragoniacs oui en réduisant ceci j'ai obtenu 1 minute self.maxRetry_Process = 5 -- nombre max de ping de recherche self.scheduler_value = 1 -- minutes entre 2 recherches de téléphone self.check_wait = 5 -- secondes entre 2 ping EDIT 1: j'ai supprimé le mainloop: résultat, je rétablis le wifi du phone, il me trouve de suite (3 sec), apres avoir clic sur le BP mais j'ai toujours un temps de retour élevé lorsque il faut me signaler l'absence je coupe le wifi sur le phone, je clic sur BP FIND, il lui faut 1 min pour me dire que je suis absent EDIT 2: il y a ceci à modifier? --check for error if self.foundUser == false then if retry < self.maxRetry_Process then fibaro.sleep(self.check_wait*1000); self:FindMac(retry + 1); Modifié le 2 mars 2022 par flamalex
Dragoniacs Posté(e) le 2 mars 2022 Auteur Signaler Posté(e) le 2 mars 2022 Oui, c'est ça qu'il faut changer.Attention à ne pas surcharger ton réseau. Mais effectivement, si tu supprimes le mainloop pour ne garder que le lancement à la demande, cela ne devrait pas poser de problème.Envoyé de mon M2012K11AG en utilisant Tapatalk
flamalex Posté(e) le 2 mars 2022 Signaler Posté(e) le 2 mars 2022 ok, peut on passer le scheduler en seconde? est ce que moi "0,2" minute fonctionne? self.maxRetry_Process = 2 -- nombre max de ping de recherche self.scheduler_value = 0,2 -- minutes entre 2 recherches de téléphone self.check_wait = 5 -- secondes entre 2 ping
Dragoniacs Posté(e) le 2 mars 2022 Auteur Signaler Posté(e) le 2 mars 2022 Essaye Envoyé de mon M2012K11AG en utilisant Tapatalk
Dragoniacs Posté(e) le 2 mars 2022 Auteur Signaler Posté(e) le 2 mars 2022 C'est surtout le check_wait qu'il faut que tu réduise je pense Envoyé de mon M2012K11AG en utilisant Tapatalk
flamalex Posté(e) le 2 mars 2022 Signaler Posté(e) le 2 mars 2022 ok, j'obtiens 8 secondes pour l'absence, c'est good. ce qui compte c'est la présence en moins de 3 sec, c'est top il me reste à coller des variable "ABSENT" "PRESENT" dans le code pour les recup dans GEA ou pour les forcer
Dragoniacs Posté(e) le 2 mars 2022 Auteur Signaler Posté(e) le 2 mars 2022 Il y a plus simple : le QA est un module de présence !Il suffit de récupérer l'état de ce module : true ou falseEnvoyé de mon M2012K11AG en utilisant Tapatalk 1
chrisalex Posté(e) le 23 juillet 2022 Signaler Posté(e) le 23 juillet 2022 bonjour @Dragoniacs, merci pour ce QA. Cependant j'ai une petite question en rapport avec ton code, en effet j'essaye de comprendre pour progresser en m'inspirant de vos réalisations, et je ne comprends pas les lignes "tools:Message" Cela fait il appel à un fichier non inclu dans le QA et si non comment obtenir ces messages intéressants? par avance merci de tes lumières
Dragoniacs Posté(e) le 23 juillet 2022 Auteur Signaler Posté(e) le 23 juillet 2022 Sur la HC3, tu as la possibilité de faire plusieurs fichiers de code dans un même QA.Le code principal est dans le fichier "main".Et j'ai un fichier "boîte à outil" qui est nommé "tools".Tu y accède via une icône a gauche, quand tu modifies le QA.Envoyé de mon M2012K11AG en utilisant Tapatalk
chrisalex Posté(e) le 23 juillet 2022 Signaler Posté(e) le 23 juillet 2022 merci @Dragoniacs pour ta réactivité, effectivement j'ai bien trouvé ton fichier tools. Du coup je comprends mieux. Cependant il y a une chose qui me chagrine c'est que ne vois pas les messages en question dans la fenetre de debug (si je remplace le code "tools:Message" par "print" ça fonctionne bien le code est bavard comme attendu). Qu'en penses-tu?
Dragoniacs Posté(e) le 23 juillet 2022 Auteur Signaler Posté(e) le 23 juillet 2022 Dans le débug il faut que tu affiches 2 choses : les lignes du QA_### et QA_nomduQA_###Envoyé de mon M2012K11AG en utilisant Tapatalk 1
chrisalex Posté(e) le 23 juillet 2022 Signaler Posté(e) le 23 juillet 2022 effectivement c'est parfait, merci bien, je ne connaissais pas cette subtilité.
Messages recommandés