Freebox Delta Integration

@gaelbillon, ich habe einen Test mit der Fernbedienung des Sicherheitspakets durchgeführt, aber es werden keine Informationen an die API zurückgemeldet.

Trotzdem erkenne ich sie, aber keine Werte ändern sich in den Daten

Der Wert bleibt für beide Features bei null

Ich werde am Wochenende die Aktivierung des Alarms überprüfen

Hallo @Will_71,
Mir geht es genauso, es ist viel günstiger als die Somfy-Boxen.
Meine Rollläden sind in IO.

Ich habe mehrere Versuche unternommen und werde mich vorerst auf die Rollläden und die Tür- und Bewegungssensoren beschränken. Die Kamera hatte ich noch keine Zeit zu prüfen, aber man kann sie manuell in die Gladys-Kamera-Integration einfügen.

Bei der Alarmanlage wird der Status der Fernbedienung nie über die API gemeldet. Weder der Batteriezustand noch der Zustand der Tasten.

Was die Aktivierung der Alarmanlage betrifft, ist das möglich, aber es gibt keine passende Komponente in Gladys.
Ich habe es einfach zum Testen mit einem Toggle-Button versucht, das funktioniert, ich kann die Alarmanlage aktivieren, aber ich finde das nicht wirklich passend. Es bräuchte entweder Schaltflächen oder einen Auswahlknopf (AUS / TOTAL / NACHT)

Ich versuche, dir nächste Woche ein Bild zu machen, damit du schon die Erkennung der Freebox und die Steuerung deiner Rollläden validieren kannst.

Den Auswahlschalter kann man in der UI hinzufügen :slight_smile: Du kannst zum Beispiel eine 3-Zustand-Steuerung (die haben wir schon) kopieren und in diesem Fall mit neuen Übersetzungen verwenden!

Ja, ich habe es hier gefunden, aber im Moment werde ich nicht zu viel hinzufügen, denke ich. Ich bin noch am Anfang und will nicht zu viel auf einmal machen und zu viele Fehler im Code schreiben.

Ich dachte schon daran, einen Pull Request mit dem zu machen, was ich zum Laufen bekomme (Jalousien, Öffnungssensor und Bewegung) und mit den aktuellen Komponenten von Gladys, und dann zu sehen, ob ich eine 3-Zustands-Komponente für die Alarme hinzufügen kann. Außerdem könnte das auch für deine Entwicklung zu den Alarmen nützlich sein.

Hallo @Will_71,

Schon eine schöne Arbeit, und da ich nicht am Codieren beteiligt bin, werde ich nicht zu anspruchsvoll sein! Die Jalousien + offener Sensor und Bewegung sind schon ein guter Anfang und das Wichtigste, um sie in Szenen zu integrieren.
Bei der Alarmanlage weiß ich nicht, wie es bei dir ist, aber persönlich hat die Fernbedienung nie wirklich funktioniert, weil die Batterie in Windeseile leer wird!! Aber nicht von großer Bedeutung und tatsächlich, mit der Entwicklung rund um die Alarmanlagen, ist es besser, wenn sich das nicht überschneidet.

Nochmals vielen Dank für diese Entwicklung und ich freue mich darauf, es testen zu können.

Ja, du hast recht, es ist besser, kleine PRs zu machen, die schnell gemerged werden, statt riesige PRs, die unmöglich zu reviewen sind :slight_smile:

Ehrlich gesagt nutze ich nur die Steuerung der Rollläden, die bisher über Node-RED und MQTT an Gladys gemeldet werden.

Hallo @Will_71,
Falls es dir nichts ausmacht, würde ich mich über deine Node-RED-Flüsse für die Rollläden freuen.

Hallo,

Ich versuche, das heute Abend für dich zu erledigen.

@gaelbillon hier sind die Erklärungen für das Freebox-Modul von Node-RED

Zuerst muss ein MQTT-Gerät mit den Funktionen Position des Rollladens und Zustand des Rollladens erstellt werden

In Node-RED muss das Modul node-red-contrib-freebox installiert und natürlich die Verbindung mit dem MQTT-Broker Gladys erstellt werden.

Bei der ersten Anfrage muss die Verwendung von Node-RED mit der Freebox bestätigt werden.
Dazu muss auf der Frontseite deiner Freebox bestätigt werden.

Anschließend muss Node-RED die Berechtigung erhalten, die Informationen des Sicherheits-Packs in den Einstellungen der Freebox zu lesen.
Dazu auf Freebox-OS, Einstellungen / Zugriffsverwaltung gehen

image

In der Zugriffsverwaltung, im Tab Anwendung, muss eine Zeile gefunden werden, die Node-RED entspricht


Auf den Stift zum Bearbeiten rechts klicken
image

Die Option Alarmanlage und Smart Home aktivieren
image

Unten ein erster Flow, um die Verbindung zu testen und die Rückmeldung aller Geräte des Sicherheits-Packs zu erhalten.

[
    {
        "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"
    }
]

Hier der Ablauf eines Flügels

[
    {
        "id": "18e154108b13c26c",
        "type": "group",
        "z": "d7c3929073ea7b03",
        "name": "Bürofenster",
        "style": {
            "stroke": "#7fb7df",
            "label": true,
            "fill": "#92d04f",
            "color": "#000000"
        },
        "nodes": [
            "3e15afd9376757c9",
            "a49eaa136556eee7",
            "a748fcd15020c73e",
            "10b39b8328881bdb",
            "1ecb5525b3ad37c6",
            "a7c2664d98109c89",
            "fd923244d0fb66d2",
            "2a32a9e720ae58f3",
            "31a13ffcc844be3f",
            "26f4754086a73f61",
            "768a96d8a1add8e5",
            "3bdfec7e2be1d3cb",
            "3dab952dd0a739a3",
            "83331d58417a9467",
            "30d53f3a1ed9df4c",
            "277875ed0aa28e4b"
        ],
        "x": 54,
        "y": 1179,
        "w": 1512,
        "h": 342
    },
    {
        "id": "3e15afd9376757c9",
        "type": "mqtt in",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "Gladys-Wert",
        "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": 150,
        "y": 1220,
        "wires": [
            [
                "83331d58417a9467"
            ]
        ]
    },
    {
        "id": "a49eaa136556eee7",
        "type": "mqtt out",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "Gladys-Wert aktualisieren",
        "topic": "gladys/master/device/mqtt:volet_bureau/feature/mqtt:position_volet_bureau/state",
        "qos": "2",
        "retain": "",
        "respTopic": "",
        "contentType": "",
        "userProps": "",
        "correl": "",
        "expiry": "",
        "broker": "05eac840560ca08c",
        "x": 1080,
        "y": 1480,
        "wires": []
    },
    {
        "id": "a748fcd15020c73e",
        "type": "mqtt in",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "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": 150,
        "y": 1320,
        "wires": [
            [
                "10b39b8328881bdb"
            ]
        ]
    },
    {
        "id": "10b39b8328881bdb",
        "type": "json",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "",
        "property": "payload",
        "action": "",
        "pretty": false,
        "x": 290,
        "y": 1320,
        "wires": [
            [
                "1ecb5525b3ad37c6"
            ]
        ]
    },
    {
        "id": "1ecb5525b3ad37c6",
        "type": "switch",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "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": 410,
        "y": 1320,
        "wires": [
            [
                "fd923244d0fb66d2",
                "31a13ffcc844be3f"
            ],
            [
                "a7c2664d98109c89"
            ],
            [
                "2a32a9e720ae58f3",
                "31a13ffcc844be3f"
            ]
        ],
        "outputLabels": [
            "Öffnen",
            "Stop",
            "Schließen"
        ]
    },
    {
        "id": "a7c2664d98109c89",
        "type": "function",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "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": 710,
        "y": 1320,
        "wires": [
            [
                "30d53f3a1ed9df4c"
            ]
        ]
    },
    {
        "id": "fd923244d0fb66d2",
        "type": "function",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "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": 710,
        "y": 1280,
        "wires": [
            [
                "30d53f3a1ed9df4c"
            ]
        ]
    },
    {
        "id": "2a32a9e720ae58f3",
        "type": "function",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "SCHLIESSEN",
        "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": 720,
        "y": 1360,
        "wires": [
            [
                "30d53f3a1ed9df4c"
            ]
        ]
    },
    {
        "id": "31a13ffcc844be3f",
        "type": "trigger",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "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": 500,
        "y": 1400,
        "wires": [
            [
                "3dab952dd0a739a3"
            ]
        ]
    },
    {
        "id": "26f4754086a73f61",
        "type": "poll",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "Bürofenster",
        "url": "/home/tileset/30",
        "interval": "3000",
        "server": "35b9faf136b9302a",
        "x": 150,
        "y": 1480,
        "wires": [
            [
                "768a96d8a1add8e5"
            ]
        ]
    },
    {
        "id": "768a96d8a1add8e5",
        "type": "function",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "Nur den Wert erhalten",
        "func": "msg.payload = 100 - msg.payload[0].data[0].value;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 750,
        "y": 1480,
        "wires": [
            [
                "a49eaa136556eee7"
            ]
        ]
    },
    {
        "id": "3bdfec7e2be1d3cb",
        "type": "mqtt out",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "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": 1080,
        "y": 1400,
        "wires": []
    },
    {
        "id": "3dab952dd0a739a3",
        "type": "function",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "Wert auf 0 setzen",
        "func": "msg.payload = 0;\nreturn msg;",
        "outputs": 1,
        "noerr": 0,
        "initialize": "",
        "finalize": "",
        "libs": [],
        "x": 740,
        "y": 1400,
        "wires": [
            [
                "3bdfec7e2be1d3cb"
            ]
        ]
    },
    {
        "id": "83331d58417a9467",
        "type": "function",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "In den korrekten Wert umwandeln",
        "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": 780,
        "y": 1220,
        "wires": [
            [
                "30d53f3a1ed9df4c"
            ]
        ]
    },
    {
        "id": "30d53f3a1ed9df4c",
        "type": "api",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "",
        "url": "",
        "server": "35b9faf136b9302a",
        "x": 1250,
        "y": 1320,
        "wires": [
            [
                "277875ed0aa28e4b"
            ]
        ]
    },
    {
        "id": "277875ed0aa28e4b",
        "type": "debug",
        "z": "d7c3929073ea7b03",
        "g": "18e154108b13c26c",
        "name": "",
        "active": true,
        "tosidebar": true,
        "console": false,
        "tostatus": false,
        "complete": "payload",
        "targetType": "msg",
        "statusVal": "",
        "statusType": "auto",
        "x": 1450,
        "y": 1320,
        "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"
    }
]

Was du in Gladys erhalten wirst

Falls du Fragen hast, zögere nicht.

Hallo @Will_71,
Vielen Dank, ich werde damit morgen anfangen und ja, ich denke, es wird Fragen geben.
Gute Nacht

@Will_71 Danke fürs Teilen! Tolle Arbeit!
Würdest du das nicht in ein spezifisches Tutorial packen, damit es nicht verloren geht?

Das könnte gehen. Ich versuche es morgen.

Hallo @Will_71,
Ich habe angefangen zu schauen und schon ein paar Fragen, nur zur Info, ich bin kein Entwickler.
Kannst du mir bitte auf dem ersten Flow zeigen, was du gemacht hast?
Danke

Hallo @gaelbillon,
Was möchtest du genau sehen? Denn wenn du den Flow importierst, den ich erstellt habe, hast du alles darin.

Ah, jetzt verstehe ich! Der Code, den du gepostet hast, war der Datenstrom, den ich importieren sollte!! Ich bin wirklich noch ganz am Anfang :smile:
Ich habe die Verbindung hinbekommen:

Wenn ich nur eine Sache wissen darf: Woher kommt der Wert von msg.url = « /home/endpoints/30/3 »?
Ich muss wohl dumm sein, aber ich finde es nicht.

Ja, ich verstehe warum, denn ich habe vergessen, darüber zu sprechen, und diese Zeile muss entsprechend deiner Rollläden angepasst werden.
Dazu wird dir der erste Flow, den ich dir gegeben habe, helfen, diese Werte zu finden.

Wenn du den Flow ausführst, erhältst du Folgendes

Wenn du es entfaltest, findest du alle deine Geräte

Mein Rollladen im Beispiel befindet sich im Wert 7 der Tabelle

So bildest du den msg.url

/home/endpoints/node_id/ep_id

Dabei ist node_id die Kennung deines Rollladens, hier ist es 30 => Wert, der aus der oben erhaltenen Payload abgerufen werden muss. Du musst ihn also entsprechend des Wertes ändern, den du an deinem Rollladen hast.

Und ep_id ist die Kennung deiner Funktion, hier verwende ich die Funktionalität Position, die die Kennung 3 hat => dieser Wert muss normalerweise nicht geändert werden, bei meinen 6 Rollläden ist diese Kennung dieselbe.

Ich weiß nicht, ob ich heute Abend Zeit haben werde, aber parallel schreibe ich gerade das Tutorial um, wie gefordert.
Danke, dass du mich gefragt hast, so werde ich es hinzufügen.