ANLEITUNG: Somfy IO Jalousien mit Node-RED und dem Freebox Delta Sicherheitspaket steuern

1) Freebox Home

Um diese Rollläden über die Free-API (Node-RED) oder andere zu steuern, müssen Sie zunächst diese Rollläden mit der Freebox Home-App koppeln. Wenn die Rollläden nicht in der Free-App integriert sind, sind sie nicht über Node-RED und damit auch nicht über Gladys zugänglich.

2) Erstellung eines virtuellen Geräts in der MQTT-Integration von Gladys

Voraussetzung: MQTT-Broker in Gladys installieren.

Ein virtuelles Gerät in der MQTT-Integration mit den Funktionen Rollladenposition und Rollladenstatus hinzufügen.

3) Installation in Node-RED

Voraussetzung: Node-RED installiert und MQTT-Broker konfiguriert. Bei Bedarf das Video von @Pierre-Gilles ansehen

Um die Rollläden von Node-RED aus zu steuern, müssen Sie node-red-contrib-freebox installieren.
Dazu im Node-RED-Menü auf Manage palette klicken.

Im Installations-Tab nach freebox suchen und node-red-contrib-freebox installieren.

Sobald installiert, sind die Freebox-Knoten dann im linken Bereich verfügbar.

4) Konfiguration der Verbindung mit der Freebox.

Ein api-Knoten auf Ihrem Node-RED-Flow hinzufügen und doppelt klicken, um die Eigenschaftsseite zu öffnen.

In der Zeile Server auf den Stift klicken, um eine neue Freebox zu erstellen.

Geben Sie die URL Ihrer Freebox und den Port an

Klicken Sie dann auf Add, um die Konfiguration hinzuzufügen.

Zum Testen der Verbindung können Sie einen Inject-Knoten als Eingang und einen Debug-Knoten als Ausgang des API-Knotens hinzufügen.

Im Inject-Knoten die folgende Nachricht senden. Dadurch werden alle verbundenen Geräte Ihrer Freebox sowie deren Status abgerufen. Das Ergebnis dieses Flows ermöglicht es, später die Identifikatoren unserer Rollläden zu ermitteln.

Ein Bild des Flows

Der Code dieses Flows zum direkten Importieren in 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"
    }
]

Bei der ersten Anfrage müssen Sie die Anwendung direkt auf der Frontseite Ihrer Freebox Delta bestätigen.

Der Name Node-RED wird auf der Frontseite angezeigt.
Achtung: Es gibt eine Frist, um die Anfrage zu akzeptieren. Wenn Sie nicht bestätigen, wird die Freebox die Verbindung mit Node-RED ablehnen.

Das ist noch nicht alles bei der Freebox, Sie müssen auch die Leserechte für das Sicherheitspaket in den Einstellungen der Freebox freigeben.

Dazu gehen Sie zu Freebox OS ( https://mafreebox.freebox.fr), melden Sie sich an und gehen Sie zu Freebox-Einstellungen und Zugriffsverwaltung


image

In der Zugriffsverwaltung, im Reiter Anwendung, müssen Sie eine Zeile finden, die Node-RED entspricht

Klicken Sie auf den Stift rechts, um die Berechtigungen zu ändern.
image

Aktivieren Sie das Kontrollkästchen für die Verwaltung von Alarmanlage und Smart Home
image

5) Erstellen des Flows zum Lesen der Position eines Rollladens

image

Sie müssen diese 3 Knoten konfigurieren und sie entsprechend Ihrer Installation anpassen.

1. Knoten Poll free

Name: Name Ihres Rollladens
URL: URL zum Abfragen der API der Freebox zur Position Ihres Rollladens. Hier müssen Sie nur den Wert 30 ändern und den node_id-Wert Ihres Rollladens angeben. (siehe unten, um den node_id Ihres Rollladens zu finden)
Intervall: Zeitraum in ms für die API-Abfrage. Wenn Sie diesen Wert auf 3000 einstellen, bedeutet das, dass Node-RED alle 3 Sekunden eine Anfrage an die Freebox sendet.
Server: Geben Sie hier Ihre zuvor erstellte Freebox an. Sie sollten diese Auswahl finden, indem Sie auf den Pfeil drücken

Wie finde ich den node_id meines Rollladens?
Um den node_id zu finden, führen Sie einfach den ersten Flow aus und suchen Sie den Wert in der Antwort.
Entfalten Sie die erhaltene Tabelle, bis Sie die Angabe action: « store_slider » finden.


Darunter können Sie die Kennung Ihres Rollladens lesen. In meinem Fall handelt es sich also um die Kennung 30.

2. Funktionsknoten
Der Knoten ‹ Get only the value › muss nicht geändert werden. Die Funktion invertiert den erhaltenen Wert, um ihn korrekt in Gladys anzuzeigen.

3. Knoten MQTT OUT

Geben Sie den Wert des MQTT-Topics Ihres MQTT-Geräts in Topic MQTT zum Veröffentlichen ein.

Das Ergebnis in Gladys: Sie haben eine Anzeige der Position Ihres Rollladens.

Unten der Node-RED-Flow

[
    {
        "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) Erstellen des Flows zur Änderung der Position eines Rollladens

image

1. MQTT-Eingangsknoten

Server: Ihr MQTT-Broker Gladys
Topic: Das Topic Ihres Slider-Geräts, das Sie in der MQTT-Integration entsprechend der Position Ihres Rollladens erhalten.

2. Funktionsknoten
Der Knoten „Convert to the correct value“ erfordert die Änderung der Identifikatoren in der URL, um die Ihres Rollladens einzugeben. Hier müssen zwei Identifikatoren abgerufen werden: der node_id, der Ihrem Rollladen entspricht, und der ep_id, der der Funktionalität Ihres Rollladens entspricht.
Die URL-Nachricht hat dieses Format « /home/endpoints/node_id/ep_id »


Um diese Identifikatoren abzurufen, verwenden Sie den ersten Flow, den ich Ihnen gegeben habe.

Der node_id ist immer derselbe wie im vorherigen Flow.
Der ep_id befindet sich im Datenabschnitt und bezieht sich auf die Funktionalität der Position. Daher ist hier für meinen Rollladen der Wert 3.

Dieser Wert sollte für alle gleich sein.

3. Freebox-API-Knoten
Geben Sie die URL Ihrer Freebox wie im ersten Flow an.

Unten finden Sie den Flow, der in node-RED importiert werden kann.

[
    {
        "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) Erstellen eines Flusses zum Ändern der Position eines Rollladens mit einem 3-Zustandsschalter (ÖFFNEN / STOPP / SCHLIESSEN)

1. MQTT-Eingangsknoten


Server: Ihr MQTT-Broker Gladys
Topic: Das Topic Ihres Geräts „Zustand des Rollladens“, das Sie in der MQTT-Integration abrufen.

Die nächsten beiden Knoten (JSON und Switch) müssen nicht verändert werden.

Der Switch ermöglicht die Auswahl der auszuführenden Aktion basierend auf der Betätigung des Buttons in Gladys.

2. Knoten ÖFFNEN STOPP SCHLIESSEN
In diesen drei Knoten müssen Sie die URL-Adresse ändern und die ID Ihres Rollladens anstelle des Werts 30 angeben.

3. Knoten API Free
Geben Sie die URL Ihrer Freebox wie im ersten Fluss an.

Der zweite Teil des Flusses ermöglicht die Auswahl des STOPP-Buttons in Gladys nach 15 Sekunden.
image
image
Hier sieht man, dass STOPP deaktiviert ist (also ausgewählt). Ich fand es optisch besser, den Zustand des Buttons nach einer bestimmten Zeit wieder auf STOPP zu setzen. Dieser Teil kann entfernt werden.
Sie müssen hier nur den MQTT-Ausgangsknoten mit dem Topic Ihres Buttons konfigurieren. Topic in Gladys abrufen.

Hier ist der zu importierende Flow für node-RED

[
    {
        "id": "471ec274b89ba7a7",
        "type": "mqtt in",
        "z": "facf6f6a9a445bc5",
        "g": "7a04e315ea806549",
        "name": "Gladys-Wert",
        "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": [
            "Öffnen",
            "Stop",
            "Schließen"
        ]
    },
    {
        "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": "ÖFFNEN",
        "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": "Warten auf stabilen Wert",
        "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": "Gladys-Wert aktualisieren",
        "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": "Wert auf 0 setzen",
        "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"
    }
]

@Will_71

Und um sie in Abhängigkeit von der Sonnenposition zu steuern, gibt es hier ein Tutorial

OK cool, das ist keine Funktion, die mich interessiert, aber vielleicht kann es jemandem nützlich sein.

Mein Tutorial ist fertig. :smile:

Hallo @Will_71,
Super dein Tutorial, nur ein paar kleine Details:
Hier « nur den Wert » 30 angeben…

Und hier « slider » durch Rollladen ersetzen, um mit dem Rest des Tutorials konsistent zu bleiben

Du siehst wirklich nur Kleinigkeiten, um zu meckern :smile: :smile: :smile:
Ich werde es genau testen, wenn ich es in die Produktion bringe, aber ich überlege, ob ich auf die Produktion des Node-Red-Starts mit einem Klick auf Gladys warten soll.

Nochmals vielen Dank und :clap: :clap:

Danke für dein Feedback.
Beim Slider habe ich einfach nur „device“ davor gesetzt, weil es wirklich nur um die MQTT-Funktionalität ging.

Und normalerweise werde ich das Bild der Integration diese Woche einstellen.