1) Freebox Home
Pour piloter ces volets depuis l’API Free (Node-RED) ou autre il faut dans un premier temps appairer ces volets avec l’application Freebox Home. Si les volets ne sont pas intégrés dans l’application de Free alors ils ne seront pas accessible depuis Node-RED et donc de Gladys.
2) Création virtual device dans l’intégration MQTT de Gladys
Pré-requis : Installer le brocker MQTT dans Gladys.
Ajouter un virtual device dans l’intégration MQTT avec les fonctionnalités Position du volet et Etat du volet.
3) Installation dans Node-RED
Pré-requis : Avoir installer Node-RED et configurer le broker MQTT. Si besoin aller voir la vidéo de @Pierre-Gilles
Pour piloter ses volets depuis Node-RED il faut installer node-red-contrib-freebox.
Pour cela se rendre dans le menu de Node-RED et cliquer sur Manage palette.
Dans l’onglet Install rechercher freebox et installer node-red-contrib-freebox.
Une fois installé les nœuds Freebox seront alors disponible dans la barre de gauche.
4) Configuration de la connexion avec la freebox.
Ajouter un nœud api sur votre flow Node-RED et faite un double-clic pour ouvrir la page de propriétés.
Sur la ligne serveur cliquer sur le crayon pour créer une nouvelle freebox.
Indiquez l’URL de votre freebox et le port
Cliquer ensuite sur Add pour ajouter la configuration.
Pour tester la connexion c’est possible d’ajouter un nœud Inject en entrée et un nœud Debug en sortie du nœud API.
Dans le nœud Inject envoyer le message ci-dessous. Cela permettra de récupérer tous les devices connectés de votre freebox ainsi que leur état. Le résultat de ce flow permettra de récupérer plus tard les identifiants de nos volets.
Un image du flow
Le code de ce flow pour l’importer directement dans Node-Red.
[
{
"id": "1d67dee27a16208d",
"type": "group",
"z": "d7c3929073ea7b03",
"name": "Call API Freebox",
"style": {
"fill": "#dbcbe7",
"label": true,
"color": "#000000"
},
"nodes": [
"4f8f16965ae54f50",
"72e75292b4cb21f9",
"7dd73ca182891c1b"
],
"x": 1254,
"y": 699,
"w": 552,
"h": 82
},
{
"id": "4f8f16965ae54f50",
"type": "api",
"z": "d7c3929073ea7b03",
"g": "1d67dee27a16208d",
"name": "",
"url": "",
"server": "35b9faf136b9302a",
"x": 1530,
"y": 740,
"wires": [
[
"72e75292b4cb21f9"
]
]
},
{
"id": "72e75292b4cb21f9",
"type": "debug",
"z": "d7c3929073ea7b03",
"g": "1d67dee27a16208d",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "payload",
"targetType": "msg",
"statusVal": "",
"statusType": "auto",
"x": 1690,
"y": 740,
"wires": []
},
{
"id": "7dd73ca182891c1b",
"type": "inject",
"z": "d7c3929073ea7b03",
"g": "1d67dee27a16208d",
"name": "/home/tileset",
"props": [
{
"p": "url",
"v": "/home/tileset/all",
"vt": "str"
}
],
"repeat": "",
"crontab": "",
"once": false,
"onceDelay": 0.1,
"topic": "",
"x": 1370,
"y": 740,
"wires": [
[
"4f8f16965ae54f50"
]
]
},
{
"id": "35b9faf136b9302a",
"type": "freebox-server",
"host": "https://mafreebox.freebox.fr",
"port": "443"
}
]
Lors de la première requête il sera nécessaire de valider l’application directement sur la façade de votre Freebox Delta.
Le nom Node-RED s’affichera sur la façade.
Attention il y a un délai pour accepter la demande. Si vous ne valider pas, la Freebox refusera la connexion avec Node-RED.
Ce n’est pas fini côté Freebox, il faudra aussi autoriser la lecture du pack sécurité dans les paramètres de la Freebox.
Pour cela se rendre sur Freebox OS ( https://mafreebox.freebox.fr), connectez vous et aller dans Paramètres de la Freebox et Gestion des accès
Dans Gestion des accès, dans l’onglet Application, vous devez retrouver une ligne correspondant à Node-RED
Cliquer sur le crayon à droite pour modifier les autorisations.
Cocher la case Gestion de l’alarme et maison connectée
5) Création du flow pour lire la position d’un volet
Il faudra configurer ces 3 noeuds et les adapter en fonction de votre installation.
1. noeud Poll free
Nom: nom de votre volet
Url: url pour intérrogé l’API free sur la position de votre volet… Ici il faudra changer uniquement la valeur 30 et indiqué la valeur node_id de votre volet. (voir ci dessous pour retrouver le node_id de votre volet
Interval: période en ms pour l’interrogation de l’API. Si vous réglé cette valeur sur 3000 cela veut dire que Node-RED va envoyé une requête à la Freebox toutes les 3s.
Serveur: indiquer ici votre freebox créer précédement. Vous devez retrouver ce choix en appuyant sur la flèche
Comment trouver le node_id de votre volet?
Pour retrouver le node_id il suffit d’exécuter le premier flow et de cherche la valeur dans le retour.
Développer le tableau obtenu jusqu’à trouver l’indication action: « store_slider »
En dessous vous pouvez donc lire l’identifiant de votre volet. Pour moi il s’agit donc de l’identifiant 30.
2. noeud fonction
Le noeud ‹ Get only the value › pas besoin de le modifier. La fonction inverse la valeur obtenu pour l’afficher correctement dans Gladys.
3. noeud MQTT OUT
Indiquez la valeur du topic MQTT de votre device MQTT dans Topic MQTT pour publier.
Le résultat dans Gladys, vous aurez une lecture la position de votre volet.
Ci dessous le flow Node-RED
[
{
"id": "83c677d56359578d",
"type": "poll",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Volet Bureau",
"url": "/home/tileset/30",
"interval": "3000",
"server": "35b9faf136b9302a",
"x": 1150,
"y": 540,
"wires": [
[
"633f74301050d2f8"
]
]
},
{
"id": "633f74301050d2f8",
"type": "function",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Get only the value",
"func": "msg.payload = 100 - msg.payload[0].data[0].value;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1750,
"y": 540,
"wires": [
[
"1ab1d89e132c7653"
]
]
},
{
"id": "1ab1d89e132c7653",
"type": "mqtt out",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Update Gladys value",
"topic": "gladys/master/device/mqtt:volet_bureau/feature/mqtt:position_volet_bureau/state",
"qos": "2",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "05eac840560ca08c",
"x": 2080,
"y": 540,
"wires": []
},
{
"id": "35b9faf136b9302a",
"type": "freebox-server",
"host": "https://mafreebox.freebox.fr",
"port": "443"
},
{
"id": "05eac840560ca08c",
"type": "mqtt-broker",
"name": "GladysMQTT",
"broker": "192.168.***.***",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
}
]
6) Création du flow pour modifier la position d’un volet
1. noeud MQTT IN
Serveur : Votre broker MQTT Gladys
Topic: Le topic de votre device slider récupérer dans l’intégration MQTT correspondant à la posititon de votre volet.
2. noeud fonction
Le noeud ‹ Convert to the correct value › il faudra modifier les identifiants dans l’URL pour mettre ceux de votre volet. La il y a 2 identifiants à récupérer, node_id qui correspont à votre volet et ep_id qui correspond à la fonctionnalité de votre volet.
Le message url est de ce format « /home/endpoints/node_id/ep_id »
Pour récupérer ces identifiants utiliser le premier flow que je vous ai donné.
Le node_id c’est toujours le même que dans le flow précédent.
Le ep_id se trouve dans la section data et il s’agit de la fonctionnalité position. Donc ici pour mon volet la valeur 3.
Cette valeur doit être identique pour tout le monde.
3. noeud api free
Indiquer l’url de votre freebox comme dans le premier flow.
Ci dessous le flow à importer dans node-RED.
[
{
"id": "42f1d4ec5102ed80",
"type": "mqtt in",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Gladys value",
"topic": "gladys/device/mqtt:volet_bureau/feature/mqtt:position_volet_bureau/state",
"qos": "2",
"datatype": "auto-detect",
"broker": "05eac840560ca08c",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 1150,
"y": 660,
"wires": [
[
"3bb82c10f8678d6a"
]
]
},
{
"id": "3bb82c10f8678d6a",
"type": "function",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Convert to the correct value",
"func": "msg.url = \"/home/endpoints/30/3\"\nmsg.method = \"PUT\"\nmsg.payload = {\n \"value\": 100 - msg.payload\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1540,
"y": 660,
"wires": [
[
"77d7357b042a5833"
]
]
},
{
"id": "77d7357b042a5833",
"type": "api",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "",
"url": "",
"server": "35b9faf136b9302a",
"x": 1950,
"y": 660,
"wires": [
[
"4efe8217d70b5fe3"
]
]
},
{
"id": "4efe8217d70b5fe3",
"type": "debug",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "debug 26",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 2200,
"y": 660,
"wires": []
},
{
"id": "05eac840560ca08c",
"type": "mqtt-broker",
"name": "GladysMQTT",
"broker": "192.168.***.***",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
},
{
"id": "35b9faf136b9302a",
"type": "freebox-server",
"host": "https://mafreebox.freebox.fr",
"port": "443"
}
]
7) Création d’un flow pour modifier la position d’un volet avec un bouton 3 état (OPEN / STOP / CLOSE)
1. noeud MQTT IN
Serveur : Votre broker MQTT Gladys
Topic: Le topic de votre device Etat du volet à récupérer dans l’intégration MQTT.
Pas besoin de toucher au 2 noeuds suivant (json et switch)
Le switch permettra de sélectionner l’action à éxécuté en fonction de l’appui sur le bouton dnas Gladys.
2. noeuds OPEN STOP CLOSE
Dans ces 3 noeuds modifier l’adresse URL indiquer l’id de votre volet à la place de la valeur 30.
3. noeud api free
Indiquer l’url de votre freebox comme dans le premier flow.
La deuxième partie du flow permet de sélectionner le bouton STOP dans Gladys au bout de 15s.
Ici on peut voir que le STOP est grisé (donc sélectionner). Je trouvais cela mieux visuellement de repasser l’état du bouton à STOP au bout d’un certain moment. Cette partie peut être supprimé.
Il faudra juste ici configurer le noeud MQTT OUT avec le topic de votre bouton. Topic à récupérer dans Gladys.
Ci dessous le flow à importer dans node-RED
[
{
"id": "471ec274b89ba7a7",
"type": "mqtt in",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Gladys value",
"topic": "gladys/device/mqtt:volet_bureau/feature/mqtt:cmd_volet_bureau/state",
"qos": "2",
"datatype": "auto-detect",
"broker": "05eac840560ca08c",
"nl": false,
"rap": true,
"rh": 0,
"inputs": 0,
"x": 1150,
"y": 320,
"wires": [
[
"79ea0b61e2b9efd3"
]
]
},
{
"id": "79ea0b61e2b9efd3",
"type": "json",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "",
"property": "payload",
"action": "",
"pretty": false,
"x": 1290,
"y": 320,
"wires": [
[
"661245a7f638d8d1"
]
]
},
{
"id": "661245a7f638d8d1",
"type": "switch",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "",
"property": "payload",
"propertyType": "msg",
"rules": [
{
"t": "eq",
"v": "1",
"vt": "num"
},
{
"t": "eq",
"v": "0",
"vt": "num"
},
{
"t": "eq",
"v": "-1",
"vt": "num"
}
],
"checkall": "true",
"repair": false,
"outputs": 3,
"x": 1410,
"y": 320,
"wires": [
[
"e67eee566c013802",
"06446de47c9607fd"
],
[
"cd893f51cc091045"
],
[
"51d16ab4960719bd",
"06446de47c9607fd"
]
],
"outputLabels": [
"Open",
"Stop",
"Close"
]
},
{
"id": "cd893f51cc091045",
"type": "function",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "STOP",
"func": "msg.url = \"/home/endpoints/30/1\"\nmsg.method = \"PUT\"\nmsg.payload = {\n \"value\": null\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1710,
"y": 320,
"wires": [
[
"8654a1df5516031e"
]
]
},
{
"id": "e67eee566c013802",
"type": "function",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "OPEN",
"func": "msg.url = \"/home/endpoints/30/3\"\nmsg.method = \"PUT\"\nmsg.payload = {\n \"value\": 0\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1710,
"y": 280,
"wires": [
[
"8654a1df5516031e"
]
]
},
{
"id": "51d16ab4960719bd",
"type": "function",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "CLOSE",
"func": "msg.url = \"/home/endpoints/30/3\"\nmsg.method = \"PUT\"\nmsg.payload = {\n \"value\": 100\n}\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1720,
"y": 360,
"wires": [
[
"8654a1df5516031e"
]
]
},
{
"id": "06446de47c9607fd",
"type": "trigger",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Wait for stable value",
"op1": "",
"op2": "",
"op1type": "nul",
"op2type": "payl",
"duration": "15",
"extend": true,
"overrideDelay": false,
"units": "s",
"reset": "",
"bytopic": "all",
"topic": "topic",
"outputs": 1,
"x": 1500,
"y": 400,
"wires": [
[
"0714f8d0c789b85c"
]
]
},
{
"id": "534e1350127d6e31",
"type": "mqtt out",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Update Gladys value",
"topic": "gladys/master/device/mqtt:volet_bureau/feature/mqtt:cmd_volet_bureau/state",
"qos": "2",
"retain": "",
"respTopic": "",
"contentType": "",
"userProps": "",
"correl": "",
"expiry": "",
"broker": "05eac840560ca08c",
"x": 2080,
"y": 400,
"wires": []
},
{
"id": "0714f8d0c789b85c",
"type": "function",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "Set value to 0",
"func": "msg.payload = 0;\nreturn msg;",
"outputs": 1,
"noerr": 0,
"initialize": "",
"finalize": "",
"libs": [],
"x": 1740,
"y": 400,
"wires": [
[
"534e1350127d6e31"
]
]
},
{
"id": "8654a1df5516031e",
"type": "api",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "",
"url": "",
"server": "35b9faf136b9302a",
"x": 2050,
"y": 300,
"wires": [
[
"d08253b67c85d52f"
]
]
},
{
"id": "d08253b67c85d52f",
"type": "debug",
"z": "facf6f6a9a445bc5",
"g": "7a04e315ea806549",
"name": "debug 23",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"statusVal": "",
"statusType": "auto",
"x": 2220,
"y": 300,
"wires": []
},
{
"id": "05eac840560ca08c",
"type": "mqtt-broker",
"name": "GladysMQTT",
"broker": "192.168.***.***",
"port": "1883",
"clientid": "",
"autoConnect": true,
"usetls": false,
"protocolVersion": "4",
"keepalive": "60",
"cleansession": true,
"birthTopic": "",
"birthQos": "0",
"birthPayload": "",
"birthMsg": {},
"closeTopic": "",
"closeQos": "0",
"closePayload": "",
"closeMsg": {},
"willTopic": "",
"willQos": "0",
"willPayload": "",
"willMsg": {},
"userProps": "",
"sessionExpiry": ""
},
{
"id": "35b9faf136b9302a",
"type": "freebox-server",
"host": "https://mafreebox.freebox.fr",
"port": "443"
}
]