HomeMatic Node Red Tutorial

HomeMatic – Withings Sleep in die Hausautomatisierung einbinden

Die Schlafsensormatte Sleep von Withings erkennt sehr zuverlässig die Momente des zu Bett Gehens und Aufstehens. Nachfolgend zeige ich, wie ich sie bei mir als Sensor in die HomeMatic eingebunden habe.

Als beispielhafter Anwendungsfall soll das Licht im Schlafzimmer ausgehen, wenn man sich nachts in das Bett begibt und sich beim Aufstehen, sofern es noch dunkel ist, automatisch einschalten.

Die Withings Sleep kann zwar anscheinend auch über die Withings API eingebunden werden, was ich dazu bislang gelesen hatte, hat mich aber nicht wirklich überzeugt. Ich habe daher den Weg über IFTTT gewählt, jedoch auf eine eher „unkonventionelle“ Art und Weise.

Wer z.B. Hue oder Yeelight Lampen einsetzt, kann diese direkt über IFTTT steuern. Auch Alexa-Nutzer können mit IFTTT-Triggern diverse Lampen steuern. Eine direkte HomeMatic-Einbindung in IFTTT ist derzeit aber nicht möglich.

Um die Einbindung in die CCU dennoch zu realisieren, kann z.B. Node-RED verwendet werden, das mit dem Add-On RedMatic für CCU 3 und RaspberryMatic verfügbar ist.

Es gibt Node Red Knoten, die IFTTT direkt in Node Red einbinden, die meisten haben jedoch nur einen Trigger nach IFTTT. Lediglich der node-red-contrib-ifttt-broker bietet derzeit die Möglichkeit, einen Trigger von IFTTT einzubinden. Hierzu braucht IFTTT aber einen http- oder https-Zugang zu dem Gerät, auf dem Node Red installiert ist (also der CCU). Da dies für mich aus Sicherheitsgründen grenzwertig ist, habe ich einen Umweg über Pushbullet gewählt. Die sich dadurch ergebenden leichten Verzögerungen von wenigen Sekunden sind für viele Anwendungsfälle hinnehmbar.

Voraussetzungen für die Umsetzung dieses Projekts sind Accounts bei IFTTT und Pushbullet.

In RedMatic müssen folgende Knoten zusätzlich installiert sein/werden:

Zunächst werden in IFTTT zwei Withings Sleep Applets wie folgt eingerichtet…

Die so an Pushbullet versandten Nachrichten,…

…kann man mit dem node-red-node-pushbullet Eingangsknoten in Node Red unmittelbar auswerten.

Nachdem im node-red-node-pushbullet Knoten der eigene Pushbullet Access-Token eingetragen wurde, gibt er die eingehenden Nachrichten an den node-red-contrib-sun-position Knoten weiter.

Dort werden unter „Konfiguration“ die Koordinaten eingetragen und Start sowie Ende nach Wunsch konfiguriert. Bei Bedarf kann man noch einen Offset eintragen…

Über den oberen Ausgang wird die Nachricht bei zutreffender Bedingung, über den unteren bei nicht zutreffender Bedingung weitergegeben. Da die Lampe nur bei Dunkelheit geschaltet werden soll, wird der obere Ausgang gewählt…

Der folgende Switch Knoten filtert die Pusbullet-Nachrichten nach dem Inhalt der Kopfzeile (topic)…

Am Ausgang 1 (Hinlegen) geben wir mit dem anschließenden Change Knoten den Payload „false“ (Aktor ausschalten) weiter…

Am Ausgang 2 (Aufstehen) entsprechend „true“ (Aktor einschalten).

Die HomeMatic value-Knoten werden wie folgt konfiguriert…

Im Beispiel werden beim Hinlegen beide Leuchten ausgeschaltet, beim Aufstehen wird nur die Stehleuchte eingeschaltet.

Das Vorgehen über Pushbullet lässt sich auf alle möglichen, in IFTTT verfügbare Trigger und individuelle Zwecke anpassen.

Hier der verwendete Node…

[
    {
        "id": "f953c3c6.2aa548",
        "type": "tab",
        "label": "Licht bei Bettruhe",
        "disabled": false,
        "info": ""
    },
    {
        "id": "24cb24ce.ef6a14",
        "type": "pushbullet in",
        "z": "f953c3c6.2aa548",
        "config": "2d53efc7.e061c",
        "name": "",
        "x": 80,
        "y": 140,
        "wires": [
            [
                "50ed165.b2ca9e8"
            ]
        ]
    },
    {
        "id": "96f77a64.2d0088",
        "type": "switch",
        "z": "f953c3c6.2aa548",
        "name": "Schlafen oder Aufstehen?",
        "property": "topic",
        "propertyType": "msg",
        "rules": [
            {
                "t": "cont",
                "v": "Bedtime detection",
                "vt": "str"
            },
            {
                "t": "cont",
                "v": "Out of bed detection",
                "vt": "str"
            }
        ],
        "checkall": "true",
        "repair": false,
        "outputs": 2,
        "x": 620,
        "y": 140,
        "wires": [
            [
                "37450f7f.2d2178"
            ],
            [
                "c7d4df41.0d4a08"
            ]
        ]
    },
    {
        "id": "c7d4df41.0d4a08",
        "type": "change",
        "z": "f953c3c6.2aa548",
        "name": "einschalten",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "true",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 850,
        "y": 180,
        "wires": [
            [
                "55507308.4c2144"
            ]
        ]
    },
    {
        "id": "55507308.4c2144",
        "type": "ccu-value",
        "z": "f953c3c6.2aa548",
        "name": "Wohnzimmer Stehlampe",
        "iface": "BidCos-RF",
        "channel": "ABC1234567:1 Wohnzimmer Stehlampe:1",
        "datapoint": "STATE",
        "mode": "",
        "start": true,
        "change": true,
        "cache": false,
        "queue": false,
        "on": 0,
        "onType": "undefined",
        "ramp": 0,
        "rampType": "undefined",
        "working": false,
        "ccuConfig": "38263145.35ea0e",
        "topic": "${CCU}/${Interface}/${channel}/${datapoint}",
        "x": 1110,
        "y": 100,
        "wires": [
            []
        ]
    },
    {
        "id": "18547a5b.02bb3e",
        "type": "ccu-value",
        "z": "f953c3c6.2aa548",
        "name": "Wohnzimmer Lampe Fensterbank",
        "iface": "BidCos-RF",
        "channel": "ABC1234568:1 Wohnzimmer Lampe Fensterbank:1",
        "datapoint": "STATE",
        "mode": "",
        "start": true,
        "change": true,
        "cache": false,
        "queue": false,
        "on": 0,
        "onType": "undefined",
        "ramp": 0,
        "rampType": "undefined",
        "working": false,
        "ccuConfig": "38263145.35ea0e",
        "topic": "${CCU}/${Interface}/${channel}/${datapoint}",
        "x": 1140,
        "y": 180,
        "wires": [
            []
        ]
    },
    {
        "id": "37450f7f.2d2178",
        "type": "change",
        "z": "f953c3c6.2aa548",
        "name": "ausschalten",
        "rules": [
            {
                "t": "set",
                "p": "payload",
                "pt": "msg",
                "to": "false",
                "tot": "bool"
            }
        ],
        "action": "",
        "property": "",
        "from": "",
        "to": "",
        "reg": false,
        "x": 850,
        "y": 100,
        "wires": [
            [
                "18547a5b.02bb3e",
                "55507308.4c2144"
            ]
        ]
    },
    {
        "id": "664d4611.52ae78",
        "type": "comment",
        "z": "f953c3c6.2aa548",
        "name": "Licht aus nach zu Bett gehen; Licht an nach Aufstehen",
        "info": "",
        "x": 230,
        "y": 60,
        "wires": []
    },
    {
        "id": "50ed165.b2ca9e8",
        "type": "within-time-switch",
        "z": "f953c3c6.2aa548",
        "name": "zwischen Sunset und Sunrise",
        "positionConfig": "6db036ad.18af",
        "startTime": "sunsetStart",
        "startTimeType": "pdsTime",
        "startOffset": "-30",
        "startOffsetType": "num",
        "startOffsetMultiplier": 60000,
        "endTime": "sunriseEnd",
        "endTimeType": "pdsTime",
        "endOffset": "30",
        "endOffsetType": "num",
        "endOffsetMultiplier": 60000,
        "propertyStart": "",
        "propertyStartType": "none",
        "propertyStartCompare": "true",
        "propertyStartThreshold": "",
        "propertyStartThresholdType": "num",
        "startTimeAlt": "",
        "startTimeAltType": "entered",
        "startOffsetAlt": 0,
        "startOffsetAltType": "none",
        "startOffsetAltMultiplier": 60000,
        "propertyEnd": "",
        "propertyEndType": "none",
        "propertyEndCompare": "true",
        "propertyEndThreshold": "",
        "propertyEndThresholdType": "num",
        "endTimeAlt": "",
        "endTimeAltType": "entered",
        "endOffsetAlt": 0,
        "endOffsetAltType": "none",
        "endOffsetAltMultiplier": 60000,
        "tsCompare": "0",
        "lastMsgOnStartOut": false,
        "lastMsgOnEndOut": false,
        "x": 290,
        "y": 140,
        "wires": [
            [
                "96f77a64.2d0088"
            ],
            []
        ]
    },
    {
        "id": "2d53efc7.e061c",
        "type": "pushbullet-config",
        "z": "",
        "name": ""
    },
    {
        "id": "38263145.35ea0e",
        "type": "ccu-connection",
        "z": "",
        "name": "localhost",
        "host": "localhost",
        "regaEnabled": true,
        "bcrfEnabled": true,
        "iprfEnabled": false,
        "virtEnabled": true,
        "bcwiEnabled": false,
        "cuxdEnabled": true,
        "regaPoll": true,
        "regaInterval": "30",
        "rpcPingTimeout": "60",
        "rpcInitAddress": "127.0.0.1",
        "rpcServerHost": "127.0.0.1",
        "rpcBinPort": "2047",
        "rpcXmlPort": "2048",
        "queueTimeout": "5000",
        "queuePause": "250",
        "contextStore": ""
    },
    {
        "id": "6db036ad.18af",
        "type": "position-config",
        "z": "",
        "name": "Berlin",
        "isValide": "true",
        "longitude": "0",
        "latitude": "0",
        "angleType": "deg",
        "timeZoneOffset": 99,
        "timeZoneDST": 0
    }
]

Bitte beachten...

SMART WOHNEN in Stern's Haus ist ein rein privates Projekt. Support kann ich daher nur im Rahmen meiner begrenzten Freizeit leisten, hierfür bitte ich um Verständnis. Meine Hinweise, Anleitungen, Schaltungen und Software werden so angeboten, „wie sie sind“. Die Verwendung erfolgt auf eigenes Risiko, ich übernehme hierfür keinerlei Gewährleistung bzw. Haftung! Für die Einhaltung der einschlägigen technischen Vorschriften ist jeder Anwender selbst verantwortlich!
Creative Commons Lizenzvertrag
Copyright © Jens-Peter Stern | SMART WOHNEN in Stern's Haus | smart-wohnen.org

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.