Détection de présence avec la Freebox
Surveillance d'équipements réseaux connectés (smartphone, etc)
Prérequis :
Freebox v6 Revolution en mode routeur (par défaut)
Module virtuel Freebox Server de @Krkroff en version 0.1.1 minimum
Des appareils connectés sur le réseau IP (en Wi-Fi ou câble Ethernet)
Installation :
Télécharger le module virtuel Freebox et suivre les instructions de @Krikroff pour son installation : https://www.domotique-fibaro.fr/topic/328-plugin-freebox-v6/La dernière version connue à ce jour est la v0.1.1 : https://www.domotique-fibaro.fr/topic/328-plugin-freebox-v6/?page=9#comment-101866
Sur l'interface Web d'administration de Freebox OS, il faut aller dans la fenêtre Périphériques réseaux pour découvrir les adresses MAC des appareils à surveiller.
Modifier la Main Loop du module virtuel Freebox afin d'ajouter la surveillance d'équipements réseaux, voici la syntaxe (vous pouvez ajouter autant d'éléments que désiré)
_lanDevice = {
{
mac = "00:00:00:00:00:00", -- Sony Xperia Z2 (ether-00:00:00:00:00:00)
vg = "FbxV6_LAN_XperiaZ2"
},
{
mac = "00:00:00:00:00:00", -- Samsung Galaxy S4 Mini
vg = "FbxV6_LAN_S4mini"
}
},
mac : adresse MAC relevée sur la Freebox
vg : variable globale qui contient le timestamp Unix de la dernière fois que l'appareil a été vu sur le réseau... cela concerne donc aussi bien le Wi-Fi (sans-fil) que l'Ethernet (câble).
Sur la HC2, dans le panneau de variables, Pensez à créer vous-même les variables globales FbxV6_LAN_XXX choisies précédemment, ce n'est pas pris en charge automatiquement par le module virtuel Freebox.
Créer également une autre variable prédéfinie PresenceXXX qui contiendra le statut de la présence, soit 0 ou 1 :
Sauvegarder le module virtuel Freebox, qui va se connecter sur la Freebox et récupérer les informations de dernière connexion des périphériques réseaux surveillés. Les timestamps (valeur numérique) doivent apparaitre automatiquement dans les variables globales.
Sur la HC2, créer une scène contenant le code LUA suivant, à adapter en fonction de vos besoins :
--[[
%% autostart
%% properties
%% globals
FbxV6_LAN_XperiaZ2
FbxV6_LAN_S4mini
--]]
function Check()
local delay = 3600*12
local timestamp = os.time()
local FbxV6_LAN_XperiaZ2 = tonumber(fibaro:getGlobalValue("FbxV6_LAN_XperiaZ2"))
local FbxV6_LAN_S4mini = tonumber(fibaro:getGlobalValue("FbxV6_LAN_S4mini"))
local PresenceChristophe = fibaro:getGlobalValue("PresenceChristophe")
if FbxV6_LAN_XperiaZ2 < timestamp - delay and FbxV6_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 FbxV6_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.
Mais 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.
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.