Lazer Posté(e) le 2 juillet 2017 Signaler Posté(e) le 2 juillet 2017 (modifié) Détection de présence avec points d'accès Wi-Fi Ubiquiti Unifi Surveillance d'équipements réseaux connectés (smartphone, etc) Prérequis : Une ou plusieurs borne(s) Ubiquiti Unifi (gamme UAP) Logiciel Unifi Controller opérationnel sur une machine (VM, NAS, etc) Des appareils connectés sur le réseau IP en Wi-Fi Installation : Dans Unifi Controller, créer un utilisateur dédié avec des droits en Read-Only : Dans Unifi Controller, récupérer l'adresse MAC de tous les appareils à surveiller : Télécharger le code LUA en pièce jointe Dans la HC2, créer une nouvelle scène Copier/coller le code LUA dans cette scène Modifier le début du code LUA de la scène comme suit : -- User variables local URL = "https://192.168.1.1:8443" local username = "User" local password = "Password" local intervalle = 60 local LAN_Devices = { { mac = "00:00:00:00:00:00", -- Sony Xperia Z2 vg = "Unifi_LAN_XperiaZ2" }, { mac = "00:00:00:00:00:00", -- Samsung Galaxy S4 Mini vg = "Unifi_LAN_S4mini" } } URL : chemin d'accès à l'interface Web de Unifi Controller username : nom d'utilisateur créé précédemment password : mot de passe de cet utilisateur intervalle : rafraichissement toutes les 60 secondes LAN_Devices : mac : adresse MAC des périphériques Wi-Fi à surveiller vg : variable globale qui contient le timestamp Unix de la dernière fois que l'appareil a été vu sur le réseau (ces variables globales seront automatiquement créées au démarrage de la scène) Sauvegarder la scène, et affecter une icône, par exemple : Sur la HC2, créer une autre scène contenant le code LUA suivant, à adapter en fonction de vos besoins : --[[ %% autostart %% properties %% globals Unifi_LAN_XperiaZ2 Unifi_LAN_S4mini --]] function Check() local delay = 3600*12 local timestamp = os.time() local Unifi_LAN_XperiaZ2 = tonumber(fibaro:getGlobalValue("Unifi_LAN_XperiaZ2")) local Unifi_LAN_S4mini = tonumber(fibaro:getGlobalValue("Unifi_LAN_S4mini")) local PresenceChristophe = fibaro:getGlobalValue("PresenceChristophe") if Unifi_LAN_XperiaZ2 < timestamp - delay and Unifi_LAN_S4mini < timestamp - delay then if PresenceChristophe == "1" then fibaro:debug(os.date('%d/%m/%Y').." : Absence détectée") fibaro:setGlobal("PresenceChristophe", "0") end else if PresenceChristophe == "0" then fibaro:debug(os.date('%d/%m/%Y').." : Présence détectée") fibaro:setGlobal("PresenceChristophe", "1") end end end local trigger = fibaro:getSourceTrigger() if trigger["type"] == "autostart" then fibaro:debug(os.date('%d/%m/%Y').." : Autostart infinite loop...") while true do Check() fibaro:sleep(300*1000) -- 5 minutes end elseif trigger["type"] == "global" then fibaro:debug("Global variable change : "..trigger['name']) Check() elseif trigger["type"] == "other" then fibaro:debug(os.date('%d/%m/%Y').." : Started manually") Check() elseif trigger["type"] == "property" then fibaro:debug(os.date('%d/%m/%Y').." : Property changed : ".. trigger['deviceID'].." => "..trigger['propertyName']) else fibaro:debug(os.date('%d/%m/%Y').." : Unknown trigger : "..trigger["type"]) end Dans l'en-tête, en trigger, on positionne les variables globales Unifi_LAN_XXX Pensez à modifier le code en fonction du nom des variables globales que vous avez choisi. Comme on peut le voir, je monitore 2 téléphones, ce qui me permet d'améliorer la fiabilité de détection. Il faut juste modifier légèrement le code pour ne surveiller qu'un seul ou plusieurs appareils. J'ai configuré un délai de détection de 12h, car cette scène me permet de détecter si je suis absent plus de 12h de la maison, donc que je suis en déplacement professionnel, c'est à dire que je ne passerai pas la nuit au domicile. Cela est très fiable. Ensuite, on peut utiliser la variable globale PresenceXXX dans des scénarios (Scènes, VD, GEA, etc) Si on veut gérer la présence de plusieurs personnes, il suffit de créer plusieurs scènes et autant de variables globales correspondantes. Remarque : c'est exactement le même code que la scène de détection de présence via Freebox, il est donc possible d'utiliser la même scène pour détecter des appareils via la Freebox et les bornes Unifi simultanément. Problème connu : Si dans le debug de la scène vous avez le message d'erreur "sslv3 alert handshake failure" ou "wrong version number" : [DEBUG] 00:00:00: httpClient:request() : Error : sslv3 alert handshake failure Alors c'est que la HC2 n'accepte pas la suite de chiffrement proposée par le serveur Web de l'Unifi Controller, et tente de se connecter en SSLv3, qui est un vieux protocole peu sécurisé et bloqué. Mon Unifi Controller est installé dans une VM sous Debian 9, voici la procédure : Modifier le fichier system.properties : vi /var/lib/unifi/system.properties Notes : - sur Synology, le fichier se trouve dans /var/packages/Unifi Controller 5/target/data/system.properties => Voir tuto de Nico plus bas dans la page. - sur Windows, le fichier se trouve dans C:\Users\XX YOUR USER NAME\Ubiquiti UniFi\data\system.properties => Merci Sebcbien Ajouter les suites de chiffrement comme suit, ce qui aura pour conséquence de résoudre le problème de la HC2 qui n'arrive pas à se connecter, et d'augmenter la sécurité globale de l'interface Web de Unifi Controller : unifi.https.ciphers=TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA256,TLS_ECDHE_RSA_WITH_AES_128_CBC_SHA,TLS_RSA_WITH_AES_256_CBC_SHA,TLS_RSA_WITH_AES_128_CBC_SHA,TLS_DHE_RSA_WITH_AES_256_CBC_SHA unifi.https.sslEnabledProtocols=TLSv1.2,TLSv1.1,TLSv1 Puis redémarrer le démon Unifi Controller : service unifi restart Puis redémarrer la scène sur la HC2. Compatibilité avec Unifi Dream Machine et Cloud Key v2 (basés sur Unifi OS) : Voir le message de @PdB en page 13 : Et également le script modifié partagé par @Nico en page 16 : Monitoring des 2 scènes avec le Watchdog : {type = "Scene", id = 1, match = {text="GetDevices", interval=2*60}, no_match = {text=""}, count=1, restart=true, notification = {"push", "email"}}, -- Unifi {type = "Scene", id = 6, match = {text="", interval=0}, no_match = {text=""}, count=1, restart=true, notification = {"push", "email", "sms"}}, -- Présence Téléchargement : Scene Ubiquiti Unifi v1.2.lua Modifié le 18 avril 2021 par Lazer 4
pepite Posté(e) le 2 juillet 2017 Signaler Posté(e) le 2 juillet 2017 (modifié) Excellent @Lazer, encore merci Perfect. Tu passes par 2 scènes ? Une tu ne pouvais pas ? Modifié le 2 juillet 2017 par pepite
jojo Posté(e) le 2 juillet 2017 Signaler Posté(e) le 2 juillet 2017 Merci @Lazer, je vais regarder , si ok pour toi, comment je pourrais mettre celà dans ma LD. C'est du lourd ...
Lazer Posté(e) le 2 juillet 2017 Auteur Signaler Posté(e) le 2 juillet 2017 @Pepite ; oui 2 scène, c'est plus propre, je sépare la scène Unfi de la scène de détection de présence, qui sont 2 choses qui n'ont rien à voir (même si j'ai besoin de la première pour faire fonctionner la 2nde). C'était pareil pour la Freebox (le VD Freebox, et la scène de détection de présence) L'énorme avantage, est que la scène de détection de présence peut prendre plusieurs sources... donc des VG issues de la Freebox, de l'Unifi, et pourquoi pas d'autres trucs plus tard). @Jojo : l'API n'est pas documentée, mais voici un lien pour t'aider : http://bartsimons.me/playing-around-with-the-ubiquiti-unifi-controller/ Comme tu le verras, l'astuce consiste à se connecter pour récupérer un Cookie, qui est ensuite injecté dans les requêtes suivantes. Attention, comme pour le SID de Synology, ce cookie peut expirer de temps en temps, il faut donc gérer son renouvellement. 2
Nico Posté(e) le 2 juillet 2017 Signaler Posté(e) le 2 juillet 2017 Hum tu me sors ça ce soir Vais voir, test ce soir ou demain soir
Nico Posté(e) le 2 juillet 2017 Signaler Posté(e) le 2 juillet 2017 Bon, test encours, et bien sûr j'ai le souci de SSL. Me reste à trouver comment modifier ça sur une version Unifi en paquet sur le Syno.
Nico Posté(e) le 2 juillet 2017 Signaler Posté(e) le 2 juillet 2017 Bon, fichier trouvé, cette partie est ok. Par contre cela bloque désormais sur : Error : status=400 après le get devices puis login puis nbeed to login and new cookie...
jojo Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 @Nico, pourrais tu SVP nous partager ta solution pour Synology, car nous sommes plusieurs à utiliser ce paquet. Merci Envoyé de mon Nexus 5 en utilisant Tapatalk
Nico Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 Yes, c'est prévu, dès que c'est 100% opérationnel je vous donne tout, Lazer pourra le mettre en post 2. Pour l'instant je butte sur cette erreur 400, j'attends son retour, à moins qu'il y ait une doc des codes retours.
Lazer Posté(e) le 3 juillet 2017 Auteur Signaler Posté(e) le 3 juillet 2017 Sur Wikipedia tu as les codes http, pour le 400 ça donne : - Bad Request - La syntaxe de la requête est erronée. Etonnant, il faudrait que tu actives le debug=true et que tu m'envoie le Debug complet
Nico Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 Oups sorry, je ne savais pas que c'était le 400 HTTP, je pensais que c'était la réponse Ubiquiti au niveau connexion. Je regarde cela ce soir et te ferai une trace si je ne trouve pas. Merci.
Nico Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 Lazer, ci dessous l'erreur détaillée si cela te parle...
Lazer Posté(e) le 3 juillet 2017 Auteur Signaler Posté(e) le 3 juillet 2017 Hum, étrange ça... il n'arrive même pas à faire le login Est ce que tu es certain de : - l'URL et le port pour accéder à l'interface de Unifi ? - le login et password utilisé ? Tu as quelle version du Controller ? Est-ce que tu peux faire un login via l'interface Web avec les outils de debug du navigateur activé pour voir la requête qui est envoyée (normalement du POST) et les datas associées ?
CharlesO Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 salut bravo pour le boulot moi j ai juste un petit problème : [DEBUG] 22:08:32: 03/07/2017 : Autostart infinite loop... [DEBUG] 22:08:32: line 18: attempt to compare nil with number merci
Nico Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 J'ai trouvé !! La double quote autour du login avait disparu... Raté de copié/collé. Sorry Christophe. Donc moi c'est ok, ça fonctionne !! Nickels. Je vais du coup attaquer après le film la partie utilisation de la détection !!! Yes.
Nico Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 Sinon pour ceux utilisant le paquet Ubiquiti natif pour Syno. Pour modifier le fichier system.properties, il faut : -Soit ce connecter en SSH sur le Syno, et naviguer, VI, bref, truc de GNU -Soit lancer WinSCP (Vive Windows), et se connecter sur son Syno, toujours port 22, utilisateur root et mot de passe de l'admin du Syno (Bien activer le SSH dans les paramètres du Syno si ce n'est pas déjà fait). De là : 1. Faire répertoire du haut (Car par défaut vous arrivez dans un sous-répertoire) 2. Naviguer dans /var/packages/Unifi Controller 5/target/data 3. Vous tombez sur le fichier system.properties 4. Clique droit éditer le fichier 5. Coller les 2 lignes de Lazer. Vous constaterez qu'elles y sont déjà partiellement, mais en commentaires 6. Enregistrer puis quitter WinSCP 7. Aller dans le gestionnaire des paquets du Syno, et sur le paquet Ubiquiti, stop puis start Et voilà, c'est tout. 3
Nico Posté(e) le 3 juillet 2017 Signaler Posté(e) le 3 juillet 2017 Bon, j'ai commencé à mettre en place, par contre autant au niveau connexion c'est instantané, autant niveau déconnexion Wifi, c'est plus long. C'est comme si le pooling prenait un peu de temps. Car si on clique sur reconnect manuellement au niveau du contrôleur Unifi, la déconnexion est instantanément détectée. Par contre j'ai pas trouvé comment augmenter la fréquence de ce pooling. Maintenant ce n'est pas bloquant, le point important était la connexion lors de l'arrivée à la maison.
CharlesO Posté(e) le 4 juillet 2017 Signaler Posté(e) le 4 juillet 2017 Il y a 11 heures, CharlesO a dit : salut bravo pour le boulot moi j ai juste un petit problème : [DEBUG] 22:08:32: 03/07/2017 : Autostart infinite loop... [DEBUG] 22:08:32: line 18: attempt to compare nil with number merci salut j'ai regler le probleme merci
Lazer Posté(e) le 4 juillet 2017 Auteur Signaler Posté(e) le 4 juillet 2017 @Nico je ne suis pas certain de bien comprendre, est-ce que tu as réduit le paramètre delay dans la scène de détection de présence ?
Nico Posté(e) le 4 juillet 2017 Signaler Posté(e) le 4 juillet 2017 Oui, ça j'ai tout réglé aux petits oignions. D'ailleurs ne pas descendre trop bas, car les timestamps ne sont pas si fin sur la remonté du contrôleur Ubiquiti, il peut y avoir 15-20s entre 2 timestamps, du coup 5 s ça ne le fait pas, car cela fait du n'importe quoi. Non, moi je parlais du délai de pooling de la borne elle même. Fais un test : Tu connectes ton téléphone en Wifi sur ta borne, au niveau du contrôleur, dans la seconde ton téléphone apparaît, et donc la remonté vers la HC2 peut être instantané. Maintenant coupe le WIFI sur ton tél, pour simuler ton départ. Et rafraîchi ta vue des devices sur le contrôleur, tu verras que ton téléphone reste là encore un petit moment,, je dirai entre 1 et 3 minutes, j'ai pas trop mesuré. Ensuite rallumes ton WIFI, il sera reconnu de suite puis coupe le de nouveau. Et la dans la vue des devices, tu cliques à côté de ton device sur refresh, et là de suite la borne détecte qu'il n'est plus là et il disparaît de la liste. Du coup, je ne sais pas trop comment cela fonctionne : Soit la borne pool en faisant ce refresh en auto toutes les x secondes, soit je ne sais pas. Et ce délai entre 2 pool d'un device, j'aurai aimer le diminuer.
Lazer Posté(e) le 4 juillet 2017 Auteur Signaler Posté(e) le 4 juillet 2017 OK maintenant c'est très clair. Je n'ai pas testé ce cas de figure, car comme je le précise bien, la détection de présence pour moi n'est utilise que sur des très long délais, plus de 12 heures pour ma part, afin de détecter mes déplacement professionnels, donc absent de la maison le soir. Je n'ai pas recopié le paragraphe que j'avais fait sur le tuto de détection de présence avec la Freebox, mais le revoici pour rappel : Je considère qu'il n'est pas possible de faire de la détection de présence de courte durée par monitoring des smartphones, pour plusieurs raisons : - le smartphone peut avoir été laissé à la maison pendant une absence, temporairement - le smartphone peut être en panne de batterie temporairement - le smartphone peut avoir le Wi-Fi désactivé temporairement Donc ce type de détection de présence n'est pas adapté à des scénarios de mise en marche/arrêt d'alarme par exemple. Perso, dans ma domotique, c'est du 100% de fiabilité, ou alors je ne fais pas. Aujourd'hui, je ne peux garantir à 100% que mon smartphone est connecté au Wifi, donc je ne fais pas ce genre de détection.
Nico Posté(e) le 4 juillet 2017 Signaler Posté(e) le 4 juillet 2017 Oui tout à fait. Mais moi par exemple c'est pour des scénarios : -Plus personne à la maison, est ce que l'alarme est mise ? Non, alors interactiv push permettant de mettre l'alarme directement -Plus personne à la maison, et portail ouvert, c'est pas normal, interativ push permettant de le fermer Etc. Donc cela n'est jamais l'élément principale, mais nous sert de fonction d'alerte supplémentaire. Et cela fonctionne vraiment super bien. Et comme dit, plus on arrive à diminuer le délai, plus les interactions sont rapides.
Lazer Posté(e) le 4 juillet 2017 Auteur Signaler Posté(e) le 4 juillet 2017 Oui en alerte supplémentaire c'est acceptable Après on pourrait imaginer ajouter la détection Bluetooth du téléphone, ou une balise Bluetooth attachée au porte clé, la localisation GPS du smartphone, etc.... mais on retombe dans exactement les mêmes biais que j'ai cité concernant le Wi-Fi. A l'heure actuelle, et tant qu'on n'aura pas de puce RFID implantée sous la peau, je ne connais pas de méthode fiable à 100% et réactive instantanément.
Messages recommandés