Externe Sensoren einbinden in Homematic / HomeKit

Hat man Sensoren anderer Hersteller als Homematic möchte man diese vielleicht eben auch a) zur Steuerung nutzen oder b) diese “sehen” über HomeKit zum Beispiel.

Ich verwende von Xiaomi den Temperatur- und Feuchtigkeitssensor. Der Nebenbei auch noch den Luftdruck misst. Der Sensor ist gefühlt nur 3×3 cm groß 🙂 also super klein. Funken kann der Sensor mittels ZigBee. Und so wird das System aussehen:

Der Sensor wird über den ConBee II im Daemon DECONZ angemeldet. DECONZ bietet hier eine API an womit man den abfragen kann. DECONZ läuft bei mir als Docker-Container. Gleichzeitig läuft auf der CCU3 der CUx-Daemon der virtuelle Geräte erstellen kann ( ja der könnte auch zigbee 😉 )
Kernstück ist dann Node Red – was die ganzen Dienste verknüpft. Es holt sich die Daten von Deconz und schaufelt sie in die CCU3, in die InfluxDB und aus der CCU3 gelangen die Geräte ins HomeKit

Vorbereitungen

  1. Über den CUxD legen wir ein Thermostat an
  2. in der CCU3 muss das CUxD-Gerät konfiguriert und einem Raum zugewiesen werden.
  3. Der Sensor muss im DECONZ angelernt werden.

Anlegen im CUxD

Dazu in der CCU3: Einstellung >> Gerätemanager >> CUx-Daemon auswählen
Im CUx-Daemon dann im Menü oben “Geräte” auswählen und wie folgt einrichten:

Konfig in der CCU3

In der CCU3 erscheint das Gerät nun im Posteingang, kann einem Raum/Gewerke zugeordnet werden und mit Fertig in die Geräteliste übernommen werden.

hier sind nun einmal der Mode auf “Temp+HUM” zu setzen und “USE_HMDATAPT” ist zu deaktivieren.

Anlernen in der Phoscon App / DECONZ

Dazu einfach auf Einstellungen >> Sensoren gehen und “Neuen Sensor verbinden” anklicken. Am Sensor selbst musste ich die Taste nur einmal kurz betätigen. Der Sensor blinkte blau und zack waren beide verbunden.

Im Node RED

Für den Zugriff auf DECONZ benötigen wir das Modul: node-red-contrib-deconz. Und das Modul node-red-contrib-ccu.

Hier wird nun der Wert vom Sensor abgefragt, kurz umgewandelt (division durch 100) und dann a) der CCU3 gemeldet (dazu gleich mehr) und in meinem Fall sende ich das noch an die Influx DB.

Um den Wert in der CCU3 ist es wichtig das Gerät wie oben beschrieben zu konfigurieren und dann die SET_HUMIDITY bzw. SET_TEMPERATURE zu setzen und nicht HUMIDITY oder TEMPERATURE direkt!

Anzeigen im HomeKit

Das ist wohl der einfachste Teil. Mithilfe des Node Red Paketes redmatic-homekit muss man nur, wie in der Anleitung gut beschrieben, eine Home Bridge in einen Flow ziehen und schon werden alle CCU3 Geräte veröffentlicht – vollautomatisch. 🙂

Alternativ kann man das auch händig machen. Die DECONZ Adapter haben alle 2 Ausgänge. Der erste immer für das Datenobjekt bzw. den State (je nach Einstellung) und der 2. ist der Service Ausgang für ein Universalgerät im HomeKit. siehe https://github.com/rdmtc/RedMatic/wiki/Homekit#universal-accessory

Node Red Flow

[{"id":"f166fe9f.4bcde","type":"deconz-input","z":"dde2b0e6.aa168","name":"Bad Feuchte","server":"81052cf.8204ed","device":"00:15:8d:00:04:65:9e:1a-01-0405","device_name":"Multisensor 3 Bad : ZHAHumidity","state":"humidity","output":"always","outputAtStartup":true,"x":110,"y":440,"wires":[["5d167aa.1a49e84","2027fc31.7aab34"],[]]},{"id":"2027fc31.7aab34","type":"function","z":"dde2b0e6.aa168","name":"/ 100","func":"msg.payload = ( msg.payload / 100.0 )\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":680,"wires":[["368e868c.72f33a"]]},{"id":"5d167aa.1a49e84","type":"function","z":"dde2b0e6.aa168","name":"/ 100","func":"msg.payload = {Bad_Feuchte: ( msg.payload / 100.0 )}\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":420,"wires":[["391f3cc9.1cf6a4"]]},{"id":"85bc5941.0fe3e8","type":"function","z":"dde2b0e6.aa168","name":"/ 100","func":"msg.payload = ( msg.payload / 100.0 )\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":740,"wires":[["6bba9e24.dd6f"]]},{"id":"617ed7c2.c5d398","type":"function","z":"dde2b0e6.aa168","name":"/ 100","func":"msg.payload = {BadTemperatur: ( msg.payload  / 100.0 )}\nreturn msg;","outputs":1,"noerr":0,"x":330,"y":500,"wires":[["391f3cc9.1cf6a4"]]},{"id":"18e0e1f9.2b591e","type":"deconz-input","z":"dde2b0e6.aa168","name":"Bad Temp","server":"81052cf.8204ed","device":"00:15:8d:00:04:65:9e:1a-01-0402","device_name":"Multisensor 3 Bad : ZHATemperature","state":"temperature","output":"always","outputAtStartup":true,"x":110,"y":500,"wires":[["617ed7c2.c5d398","85bc5941.0fe3e8"],[]]},{"id":"6bba9e24.dd6f","type":"ccu-set-value","z":"dde2b0e6.aa168","name":"set temp","iface":"CUxD","ccuConfig":"c14af3ca.fbc75","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"CUX9002003","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"","deviceTypeRx":"str","channel":"CUX9002003:1","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","channelIndex":"","channelIndexRx":"str","datapoint":"SET_TEMPERATURE","datapointRx":"str","force":false,"x":580,"y":740,"wires":[]},{"id":"368e868c.72f33a","type":"ccu-set-value","z":"dde2b0e6.aa168","name":"set feuchte","iface":"CUxD","ccuConfig":"c14af3ca.fbc75","rooms":"","roomsRx":"str","functions":"","functionsRx":"str","device":"CUX9002003","deviceRx":"str","deviceName":"","deviceNameRx":"str","deviceType":"","deviceTypeRx":"str","channel":"CUX9002003:1","channelRx":"str","channelName":"","channelNameRx":"str","channelType":"","channelTypeRx":"str","channelIndex":"","channelIndexRx":"str","datapoint":"SET_HUMIDITY","datapointRx":"str","force":false,"x":570,"y":680,"wires":[]},{"id":"391f3cc9.1cf6a4","type":"change","z":"dde2b0e6.aa168","name":"Klima_Innen","rules":[{"t":"set","p":"measurement","pt":"msg","to":"Klima_Innen","tot":"str"}],"action":"","property":"","from":"","to":"","reg":false,"x":590,"y":440,"wires":[["444445b0.f3c80c"]]},{"id":"a5473156.07d27","type":"influxdb out","z":"dde2b0e6.aa168","influxdb":"542a42d0.731ccc","name":"Insert Influx Hausdaten","measurement":"","precision":"","retentionPolicy":"","x":1150,"y":440,"wires":[]},{"id":"444445b0.f3c80c","type":"delay","z":"dde2b0e6.aa168","name":"","pauseType":"rate","timeout":"5","timeoutUnits":"seconds","rate":"1","nbRateUnits":"2","rateUnits":"second","randomFirst":"1","randomLast":"5","randomUnits":"seconds","drop":false,"x":860,"y":440,"wires":[["a5473156.07d27"]]},{"id":"81052cf.8204ed","type":"deconz-server","z":"","name":"Phoscon-GW","ip":"192.168.103.2","port":"8098","apikey":"AB6C93F0DF","ws_port":"8099","secure":false,"polling":"15"},{"id":"c14af3ca.fbc75","type":"ccu-connection","z":"","name":"CCU3","host":"192.168.103.3","regaEnabled":true,"bcrfEnabled":true,"iprfEnabled":true,"virtEnabled":true,"bcwiEnabled":false,"cuxdEnabled":true,"regaPoll":true,"regaInterval":"30","rpcPingTimeout":"60","rpcInitAddress":"192.168.103.2","rpcServerHost":"192.168.103.2","rpcBinPort":"2047","rpcXmlPort":"2048","queueTimeout":"5000","queuePause":"250","contextStore":""},{"id":"542a42d0.731ccc","type":"influxdb","z":"","hostname":"192.168.103.2","port":"8086","protocol":"http","database":"Hausdaten","name":"Influx Raspi 4 Hausdaten","usetls":false,"tls":""}]

Über Danny Sotzny

Hallo, ich bin Danny Sotzny und bin Software- entwickler und Fotograf. Dabei beschäftige ich mich mit aktuellen Technologien und bekannten Problemen. Schwerpunkte setze ich bei der Webentwicklung (PHP/JS) und der Software- entwicklung mit .NET (C#). Der Blog dient für mich selbst als Gedächtnishilfe für typische und alltägliche Probleme, aber auch persönliche Erlebnisse werden veröffentlicht. Ich betreibe zusätzlich noch Foto-Sotzny.de für meine Fotografien und sotzny.net, was meine Webseite für die Softwareentwicklung ist.
Dieser Beitrag wurde unter Blogroll abgelegt und mit , , , , , , , , , , , , , verschlagwortet. Setze ein Lesezeichen auf den Permalink.

6 Antworten zu Externe Sensoren einbinden in Homematic / HomeKit

  1. Marco sagt:

    Hallo Danny,

    sehr interessanter Artikel – vielen Dank. Als Einsteiger hätte ich noch Fragen.
    Wie sieht die Anzeige innerhalb der App aus, die Du benutzt? (Vermutlich eine fürs Homekit).
    Kann man sich auch bei Erreichen/Unterschreiten festgelegter Temperaturen warnen lassen und erhält eine Meldung am Smartphone (über die App)?

    Danke für Deine Mühe.
    Marco

    • Danny Sotzny sagt:

      Hallo Marco,
      also über HomeKit selbst kann man sich auch informieren lassen wenn man z.b. einen Fensterkontakt dafür virtuell bereitstellt und dann triggert.
      Da ich das mit einer Homematic CCU3 nutze, nutze ich da die PocketControl App für iOS und da ist es “relativ” einfach Pushnachrichten an das Smartphone zu schicken (Einfach eine Variable setzen in der CCU3).
      Alternativ kann man aber auch den Dienst Pushover nutzen.
      Anzeigen lasse ich mir die sachen a) über Grafana (Export in eine influx DB) und b) exportiere ich die Daten von den Sensoren in virtuelle Geräte der CCU3 (erstellt mittels CUxD) und habe sie so in der CCU3 und in der app 🙂

      über Node Red kannst du diese Trigger recht einfach “programmieren” rudimentäre Kenntnisse in Javascript sind dafür nur notwendig. Node Red hat auch Adapter für Email, Telegram , PushOver usw. Da kann man das also auch gleich in einer Anwendung machen.

      Wenn die Daten in der InfluxDB liegen kann man z.b. auch den Durchschnittswert recht einfach berechnen und damit vergleichen ^_^ und dann Temperatur abfälle oder anstiege besser triggern.

      VG Danny

  2. Christian Richter sagt:

    Hi und vielen Dank für deinen Artikel.
    Sehr interessant, gerne mehr davon…:-)

    Könntest du noch zeigen, wie du die Funktion “/100” gelöst hast?!
    Wäre sicher für jeden Neuling, wie mich, sehr von Interesse.

    Vielen Dank

    • Danny Sotzny sagt:

      Das ist einfach eine Funktion wo folgendes drinnen steht:
      [cc lang=”js”]msg.payload = {BadTemperatur: ( msg.payload / 100.0 )}
      return msg;[/cc]

      in dem Fall wird ein Objekt erzeugt und BadTemperatur gesetzt. Es könnte auch heißen:
      msg.payload = msg.payload / 100.0

  3. Heinzo sagt:

    Sehr schön, danke ür die Anleitung. Aber was ist mit dem Luftdruck?! Wie bringe ich den in die CCU?

Schreibe einen Kommentar

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

Diese Website verwendet Akismet, um Spam zu reduzieren. Erfahre mehr darüber, wie deine Kommentardaten verarbeitet werden.