Node-Red : Créez une alarme intelligente grâce à votre Freebox
Vous utilisez probablement des capteurs de présence dans votre installation domotique. Cependant comment éteindre ces capteurs automatiquement quand vous ou quelqu'un de votre famille rentre à votre domicile ?
Pour répondre à cette problématique, j'ai mis en place une solution simple à mon domicile. J'utilise les API de la Freebox pour identifier la liste des téléphones mobiles attachés à mon réseau Wifi.
Cela me permet facilement de savoir si quelqu'un de ma famille est à mon domicile ou non et donc de m'alerter uniquement quand une présence anormale est détectée.
Pour mettre en place cette solution sur mon système de domotique qui fonctionne sur la base de Node-Red, j'ai développé un noeud Node-Red qui a comme seule vocation de récupérer la liste des terminaux connectés au réseau de la Freebox et de les pousser en sortie.
https://github.com/ltoinel/node-red-contrib-freebox
Pour installer ce noeud sur votre installation Node-Red, voici la commande à lancer depuis le répertoire de Node-Red :
$npm install clone https://github.com/ltoinel/node-red-contrib-freebox.git
Lors de la première utilisation de ce noeud, vous devrez autoriser l'usage de ce noeud depuis le panneau de votre Freebox.
Attention, vous n'aurez que 30 secondes pour valider la demande d'autorisation de token depuis votre Freebox.
Afin que le jeton d'authentification récupéré sur la Freebox puisse être persisté dans Node-Red, vous devrez préalablement décommenter le paramètre ci-dessous du fichier configuration de Node-Red. Cette option permettra de garder le jeton durablement dans un fichier du répertoire Data de Node-Red.
contextStorage: {
default: {
module:"localfilesystem"
},
},
Enfin, pour vérifier la présence d'un téléphone connu à votre domicile, vous pourrez juxtaposer une "Function" avec le code suivant qui retournera "true" ou "false" en fonction de la détection réalisée. Ce qui vous permettra de détecter une alarme seulement quand aucun de vos terminaux mobiles n'est détecté.
var deviceFound = false
for(var i in msg.payload){
var device = msg.payload[i];
if (device.primary_name.trim() == "iPhone Ludo"){
if (device.reachable == true) deviceFound = true
}
}
return { payload: deviceFound };
Vous voilà avec une alarme intelligente qui se déclenchera seulement quand aucune personne connue n'est à votre domicile !
Voici un exemple de flow Node-Red pour vous aider à démarrer plus rapidement avec mon plugin Freebox :
[{"id":"b31f7b2c.81e058","type":"tab","label":"Flow 1","disabled":false,"info":""},{"id":"97fbef24.63e0a","type":"freebox","z":"b31f7b2c.81e058","name":"Check connected devices on Freebox","x":390,"y":220,"wires":[["26567c06.3f9e34","c8524ec0.dbb54"]]},{"id":"26567c06.3f9e34","type":"function","z":"b31f7b2c.81e058","name":"Search trust devices","func":"var deviceFound = false\n\nfor(var i in msg.payload){\n\n // We extract the device\n var device = msg.payload[i];\n var device_name = device.primary_name.trim();\n \n // We check the device name\n if (device_name == \"iPhone Geeek\"){\n \n if (device.reachable == true) {\n deviceFound = true;\n }\n \n }\n}\n\nreturn { payload: deviceFound };","outputs":1,"noerr":0,"initialize":"","finalize":"","x":680,"y":220,"wires":[["bbe46e14.d7676"]]},{"id":"bbe46e14.d7676","type":"switch","z":"b31f7b2c.81e058","name":"If mobile device is found","property":"payload","propertyType":"msg","rules":[{"t":"false"},{"t":"true"}],"checkall":"true","repair":false,"outputs":2,"x":910,"y":220,"wires":[["db52f783.c6cfa8"],["abfbe901.073028"]]},{"id":"c8524ec0.dbb54","type":"debug","z":"b31f7b2c.81e058","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":650,"y":300,"wires":[]},{"id":"e0a3d521.0ada28","type":"comment","z":"b31f7b2c.81e058","name":"Nobody at home","info":"","x":1140,"y":140,"wires":[]},{"id":"3931ed77.12d532","type":"inject","z":"b31f7b2c.81e058","name":"","props":[{"p":"payload"},{"p":"topic","vt":"str"}],"repeat":"","crontab":"","once":false,"onceDelay":0.1,"topic":"","payload":"","payloadType":"date","x":140,"y":220,"wires":[["97fbef24.63e0a"]]},{"id":"96918243.56666","type":"comment","z":"b31f7b2c.81e058","name":"I'm at home","info":"","x":1130,"y":300,"wires":[]},{"id":"db52f783.c6cfa8","type":"debug","z":"b31f7b2c.81e058","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1130,"y":180,"wires":[]},{"id":"abfbe901.073028","type":"debug","z":"b31f7b2c.81e058","name":"","active":true,"tosidebar":true,"console":false,"tostatus":false,"complete":"false","statusVal":"","statusType":"auto","x":1130,"y":260,"wires":[]},{"id":"8311eea1.725ea","type":"comment","z":"b31f7b2c.81e058","name":"Something happens","info":"","x":150,"y":180,"wires":[]}]
N'hésitez pas à me proposer des pull request si vous voyez des améliorations à ce noeud Node-Red. Si vous avez des difficultés à utiliser le plugin, n'hésitez pas à rejoindre le serveur Geeek sur Discord.
Si vous souhaitez construire une baie de brassage avec tous vos équipements domotique, je vous invite à lire cet article.