Homematic, ioBroker und der Motion

    • Offizieller Beitrag

    Hallo zusammen,

    in Ergänzung zur Kopplungsanleitung von SparkyMaster und mir, möchte ich hier eine batterieschonende Alternative bzw. Ergänzung für User, die den ioBroker parallel zur Homematic am Laufen haben, aufzeigen:

    Hintergrund des Ganzen ist der Batterieverbrauch, der durch ein kurzes Aktualisierungsintervall sehr leidet, wie ich inzwischen dank eigenem Motion auch feststellen konnte / musste.

    Je kürzer das Aktualisierungsintervall, desto kürzer die Betriebszeit mit einer Akkuladung. Das ist genau so logisch, wie die Auslösehäufigkeit die Akkubetriebsdauer beeinflußt. Ein Motion, der nur 1x am Tag ausgelöst wird, wird länger durchhalten als z.B. in der Küche, wo er vielleicht 100x ausgelöst wird.

    Ohne Aktualisierung und Skriptabfrage bekommen wir aber den Luxwert und die Batteriedaten nicht in Homematic via unserer Kopplungsanleitung. Die Bewegung bekommen wir ja via Actions direkt in den "CUxD-Motion".

    Gerade aber um z.B. eine helligkeitsabhängige Beleuchtungssteuerung zu realisieren ist eine zeitnahe Aktualisierung des Lux-Wertes unerlässlich.

    Hier nun meine Lösung für Homematic und ioBroker-User:

    Voraussetzungen:

    • Shelly Motion in Homematic eingebunden gemäß Kopplungsanleitung
    • ioBroker mit installiertem Shelly- und Node-Red-Adapter
    • COAP bzw. inzwischen COIOT im Shelly aktiviert (Remote Adresse ist die IP des ioBrokers, Port wird automatisch gesetzt)

    In Node-Red legt Ihr einen Flow an, in dem Ihr einen oder auch mehrere Motion entsprechend auswerten und die Daten in die Systemvariablen der Homematic schreiben lasst. Für 1 Motion sieht das ganze so aus:

    ShellyMotion Flow.png


    Auf der linken Seite wird jeweils mit einem Node "ioBroker in" der Wert der entsprechende Wert des Shelly Motion abgefragt. und mit dem Node "ioBroker out" auf der rechten Seite in die Systemvariable der Homematic übergeben.

    Das passiert dann automatisch nach jedem Update der Motion-Daten via COAP.

    Exemplarisch für den Lux-Wert hier noch die Detailseinstellungen der Nodes:

    Node in:

    Node in.png

    Node out:

    Node out.png

    Durch Klick auf die Felder "..." müsst Ihr natürlich Eure Datenpunkte des Motion-Sensors (in) bzw. der Homematic-Systemvariablen (out) auswählen.

    Am Ende nicht vergessen durch Druck auf "deploy" den Flow zu aktivieren!

    Das war es schon. :)

    Nun kann jeder für sich entscheiden, ob der das alternativ oder ergänzend zur Aktualisierung mittels Homematic-Skript betreibt.

    Ich selbst habe in der Homematic-Kopplung das Aktualisierungsintervall nun auf 12 Stunden (also 2x am Tag) gesetzt. Da ein permanenter, zyklischer ping das Ganze ad absurdum führen würde, wird so 2x am Tag der Onlinestatus gecheckt und in der Homematic-Variablen abgebildet.

    Viel Spass damit. :thumbup:

  • Die obige 1. Version hat folgenden Schönheitsfehler:

    Die "ioBroker in" - Nodes geben die Daten von Haus aus als String weiter. Das funktioniert zwar in diesem Fall, führt aber zu unschönen Warnungen im Log des ioBroker hinsichlich der Differenz zwischen erwartetem Wert (z.B. Zahl oder Boolean) und tatsächlichem Wert (String).

    Das kann in anderen Anwendungsfällen leicht auch zu ernsteren Problemen in der Datenverarbeitung führen.

    Daher habe ich diese Fehler nun (durch dazulernen ;) ) bereinigen können und stelle Euch hier Version 2 zur Verfügung.

    Bildschirmfoto vom 2021-10-17 11-26-16.png

    Und hier der Flow zum Import:

    Spoiler anzeigen

    [

    {

    "id": "a95f6f26.66818",

    "type": "tab",

    "label": "Flow 1",

    "disabled": false,

    "info": ""

    },

    {

    "id": "935eae2a.28417",

    "type": "ioBroker out",

    "z": "a95f6f26.66818",

    "name": "Shelly-Motion_1_Helligkeit",

    "topic": "hm-rega.0.41436",

    "ack": "false",

    "autoCreate": "false",

    "stateName": "",

    "role": "",

    "payloadType": "",

    "readonly": "",

    "stateUnit": "",

    "stateMin": "",

    "stateMax": "",

    "x": 680,

    "y": 180,

    "wires": []

    },

    {

    "id": "186b6899.27b357",

    "type": "ioBroker in",

    "z": "a95f6f26.66818",

    "name": "Illuminance",

    "topic": "shelly.0.SHMOS-01#60A523975706#1.sensor.lux",

    "payloadType": "value",

    "onlyack": "",

    "func": "rbe",

    "gap": "",

    "fireOnStart": "false",

    "x": 150,

    "y": 180,

    "wires": [

    [

    "1d33b84d.57802"

    ]

    ]

    },

    {

    "id": "91d5889f.89e458",

    "type": "comment",

    "z": "a95f6f26.66818",

    "name": "Motion Küche",

    "info": "",

    "x": 90,

    "y": 120,

    "wires": []

    },

    {

    "id": "478c08ad.99bc1",

    "type": "ioBroker in",

    "z": "a95f6f26.66818",

    "name": "Battery capacity",

    "topic": "shelly.0.SHMOS-01#60A523975706#1.sensor.battery",

    "payloadType": "value",

    "onlyack": "",

    "func": "rbe",

    "gap": "",

    "fireOnStart": "false",

    "x": 160,

    "y": 260,

    "wires": [

    [

    "c49be710.cb2098"

    ]

    ]

    },

    {

    "id": "63b58a6b.42a0ec",

    "type": "ioBroker out",

    "z": "a95f6f26.66818",

    "name": "Shelly-Motion_1_Batterie",

    "topic": "hm-rega.0.41434",

    "ack": "false",

    "autoCreate": "false",

    "stateName": "",

    "role": "",

    "payloadType": "",

    "readonly": "",

    "stateUnit": "",

    "stateMin": "",

    "stateMax": "",

    "x": 670,

    "y": 260,

    "wires": []

    },

    {

    "id": "83672cc7.89aa38",

    "type": "ioBroker in",

    "z": "a95f6f26.66818",

    "name": "Motion",

    "topic": "shelly.0.SHMOS-01#60A523975706#1.sensor.motion",

    "payloadType": "value",

    "onlyack": "",

    "func": "all",

    "gap": "",

    "fireOnStart": "false",

    "x": 130,

    "y": 340,

    "wires": [

    [

    "135663d.45aa51c"

    ]

    ]

    },

    {

    "id": "f39ec3d3.85ff2",

    "type": "ioBroker out",

    "z": "a95f6f26.66818",

    "name": "Shelly-Motion_1_Bewegung",

    "topic": "hm-rega.0.41437",

    "ack": "false",

    "autoCreate": "false",

    "stateName": "",

    "role": "",

    "payloadType": "",

    "readonly": "",

    "stateUnit": "",

    "stateMin": "",

    "stateMax": "",

    "x": 680,

    "y": 340,

    "wires": []

    },

    {

    "id": "1506ee75.1cb51a",

    "type": "comment",

    "z": "a95f6f26.66818",

    "name": "Homematic-Variablen:",

    "info": "",

    "x": 680,

    "y": 120,

    "wires": []

    },

    {

    "id": "1d33b84d.57802",

    "type": "change",

    "z": "a95f6f26.66818",

    "name": "Umwandlung String Zahl",

    "rules": [

    {

    "t": "set",

    "p": "payload",

    "pt": "msg",

    "to": "$number(payload)",

    "tot": "jsonata"

    }

    ],

    "action": "",

    "property": "",

    "from": "",

    "to": "",

    "reg": false,

    "x": 390,

    "y": 180,

    "wires": [

    [

    "935eae2a.28417"

    ]

    ]

    },

    {

    "id": "c49be710.cb2098",

    "type": "change",

    "z": "a95f6f26.66818",

    "name": "Umwandlung String Zahl",

    "rules": [

    {

    "t": "set",

    "p": "payload",

    "pt": "msg",

    "to": "$number(payload)",

    "tot": "jsonata"

    }

    ],

    "action": "",

    "property": "",

    "from": "",

    "to": "",

    "reg": false,

    "x": 390,

    "y": 260,

    "wires": [

    [

    "63b58a6b.42a0ec"

    ]

    ]

    },

    {

    "id": "135663d.45aa51c",

    "type": "change",

    "z": "a95f6f26.66818",

    "name": "Umwandlung String Boolean",

    "rules": [

    {

    "t": "change",

    "p": "payload",

    "pt": "msg",

    "from": "false",

    "fromt": "str",

    "to": "false",

    "tot": "bool"

    },

    {

    "t": "change",

    "p": "payload",

    "pt": "msg",

    "from": "true",

    "fromt": "str",

    "to": "true",

    "tot": "bool"

    }

    ],

    "action": "",

    "property": "",

    "from": "",

    "to": "",

    "reg": false,

    "x": 380,

    "y": 340,

    "wires": [

    [

    "f39ec3d3.85ff2"

    ]

    ]

    }

    ]

    Nach dem Import nicht vergessen die Datenpunkte durch Eure zu ersetzen!

    Viel Spass damit. :) :thumbup: