Homematic und ioBroker

ioBroker ist mittlerweile ein fester Bestandteil meines SmartHome Systems und nicht mehr weg zu denken.

Ich verwende es nicht nur zur Visualisierung oder als Schnittstelle zu Alexa.
Vielmehr ist es viel mehr zu einem Gateway geworden welches mein Homematic System mit Geräten von anderen Herstellern verbindet.

Dabei ist es eine sehr praktische Funktion da das Homematic System kaum Unterstützung für andere Hersteller bietet.

Verbindung ioBroker zu Homematic

Die Geräte von Fremdherstellern werden einfach entsprechend der Adapter-Anleitung zu ioBroker hinzugefügt.

Um nun diese Geräte steuern zu können, die mit dem ioBroker verbunden sind benötigt man den Simple RESTful API-Adapter.

Suche nach Simple Rest mit dem Suchergebnis der richtigen Adapter um Geräte mit einem Link steuern zu können.

Dieser bietet einen die Möglichkeit die Datenpunkte in ioBroker mit einem GET oder SET Request zu bearbeiten und damit auch den Status von Geräten.

Die GitHub-Seite des Adapters bietet hier natürlich eine sehr gute Übersicht wie Datenpunkte gesteuert werden können.

Der wesentliche Vorteil liegt daran, dass Geräte nicht nur Ein bzw. Ausgeschaltet werden können sondern viel mehr ist es auch möglich das ganze Sätze an als Parameter übergeben werden können.

Dadurch war es mir auch möglich die Sprachausgabe über Alexa von dem Python Script auf ioBroker zu übertragen.

Steuerung der Alexa über ioBroker – Sprachausgabe

Da ich viel mit Sprachausgaben arbeite und das Python Script einige Nachteile hatte war ich eigentlich sehr froh eine zuverlässige Lösung hierzu gefunden zu haben.

Zusätzlich hat es den Vorteil, dass der Wartungsaufwand geringer wurde da nur noch ioBroker im Auge behalten werden muss und nicht auch noch das Zusatzprogramm.

Benötigt wird hierzu aber noch ein zusätzlicher Adapter in ioBroker um die Instanz mit der Amazon Cloud zu verbinden.

Suche nach Alexa in den ioBroker Adaptern mit Alexa2 (Amazon Echo) als Suchergebnis.

Mit diesem Adapter kann man nun die Alexa komplett steuern.
Das bedeutet Sprachausgabe, Musik, Routinen und auch SmartHome Geräte die an Alexa angelernt sind lassen sich so steuern.

Nach erfolgreicher Anmeldung an dem Adapter mit dem eigenen Amazon-Konto erhält man unter Objekte alle Echos angezeigt mit entsprechenden Steuerungsbefehlen.

Nach erfolgreicher Anmeldung am Alexa2 Adapter in ioBroker erhält man unter Objekte die Auswahl der möglichen Befehle an Alexa.

Um die Sprachausgabe nun von Homematic über ioBroker an Alexa zu senden muss das Objekt “Speak” unter Commands ausgewählt werden.

An dieser Stelle ist es am einfachsten den Befehlspfad mittels des “Kopieren-Icons” zu kopieren da dieser Pfad wird nun für das Homematic-Script benötigt wird.

string msg = "Textnachricht an Alexa";
string alexa = "<Kopierte Pfad des Speak-Obejekts>";
string MESSAGE = msg.ToUTF8().Replace(" ", "%20");
system.Exec("/usr/bin/curl 'http://<ioBroker-IP>:8087/set/'"#alexa#"'?value='"#MESSAGE);

Durch diesen Befehl wird nun das Speak-Obejekt in ioBroker durch die Simple RESTful API auf den Text gesetzt und von Alexa ausgesprochen.

Steuerung der Alexa über ioBroker – Routinen

Es ist natürlich auch sehr praktisch wenn man mittels Script Routinen in Alexa starten kann.

Diese werden aber etwas anders gestartet, da die angelegten Routinen ein eigenes Objekt in ioBroker darstellen.

Übersicht der in Alexa angelegten Routinen als Datenpunkt des ioBroker Systems.

Hier ist es nun auch möglich den entsprechenden Pfad direkt zu kopieren um diesen im Homematic-Script weiterzuverwenden.

Das benötigte Script von der Sprachausgabe kann hier wieder verwendet werden.
Nur mit dem unterschied das als msg die Variable auf true gesetzt wird und kein Text übergeben wird.

string msg = "true";
string alexa = "<Kopierte Pfad des Routine-Obejekts>";
string MESSAGE = msg.ToUTF8().Replace(" ", "%20");
system.Exec("/usr/bin/curl 'http://<ioBroker-IP>:8087/set/'"#alexa#"'?value='"#MESSAGE);

Auf diese Art und weise kann man natürlich alle Datenobjekte die der Alexa2 Adapter bietet über Homematic steuern.

Steuerung der Geräte über ioBroker

Das man nun über Homematic so präzise Steuerungsbefehle an Alexa senden kann ist schon sehr smart jedoch funktioniert das auch mit anderen Geräten die an ioBroker angelernt sind.

Hierfür muss man sich lediglich den Datenpunkt zum passenden Gerät heraussuchen und diesen per /usr/bin/curl auf den passenden Schaltwert setzen.

Um das ganze auch als Gerät in Homematic zu steuern bietet es sich an dafür ein CUxD Gerät zu verwenden und den jeweiligen State als Geräteparameter zu definieren.

In CUxD legt man nun ein neues Gerät als Gerätetyp (28) System an.
Die restlichen Felder können nach eigenen belieben ausgefüllt werden.

Anlage eines neuen CUxD Geräts in Homematic als Gerätetyp 28 - System

Nach Erzeugung des Geräts muss dieses noch über den Geräte-Posteingang in der CCU bestätigt werden und befindet sich danach normal unter den Geräten.

In den Geräte-Einstellungen sind nun eigentlich nur 2 Variablen relevant.
SWITCH|CMD_SHORT = Auschalten
SWITCH|CMD_LONG = Einschalten

Kanalübersicht in Homematic des gerade erstellen CUxD Geräts.
Dabei sind nur 2 Kanäle relevant.

Somit ergibt sich als CMD_Short folgender Befehl:

/usr/bin/curl 'http://<ioBroker-IP>:8087/set/<Kopierte Pfad des Obejekts>?value=false

Zum Einschalten des Geräts:

/usr/bin/curl 'http://<ioBroker-IP>:8087/set/<Kopierte Pfad des Obejekts>?value=true

Somit ist man nun in der Lage dieses ioBroker Geräts einfach in einem Homematic Programm ein oder auszuschalten.

Status aus ioBroker in Homematic-Variable schreiben

Es kann auch nötig oder sinnvoll sein den Inhalt eines Datenpunkts zur Auswertung von ioBroker an Homematic zu übertragen.

Hierfür muss eine entsprechende Variable in der Homematic CCU angelegt werden als Werteliste.
Zusätzlich wird ein gültiges CUxD Gerät benötigt aber hier kann man einfach die ID des bereits erzeugten CUxD Gerätes verwenden.

Dieses Script ist etwas aufwendiger aber nicht unmöglich zu verwenden da nur 2 Punkte angepasst werden müssen.

var url = "http://<ioBroker-IP>:8087/getPlainValue/<Pfad zum Datenpunkt>";
dom.GetObject("CUxD.CUX2801003:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801003:2.CMD_QUERY_RET").State(1);
string iobroker = dom.GetObject("CUxD.CUX2801003:2.CMD_RETS").State();
! WriteLine(iobroker);
dom.GetObject(ID_SYSTEM_VARIABLES).Get("<Variable>").State(iobroker);

Durch dieses Script wird der reine Text-Wert eines Datenpunkts in eine Variable von Homematic geschrieben.
Als Auslöser dieses Programms kann man entweder einen Taster verwenden und das ganze Ereignisbasiert umsetzen oder aber auch eine Timer-Funktion verwenden dass die Variable regelmäßig überprüft wird.

Fazit

Durch die Simple RESTful API bietet einem ioBroker nahezu ungeahnte Möglichkeiten auch Fremdgeräte in Homematic Programme einzubinden.

Da Alexa über ioBroker gesteuert werden kann, bietet einem das nochmal einige Extra-Funktionen die das eigene Haus nochmal etwas smarter macht.

Somit wäre es auch denkbar einen Staubsauger-Roboter nach verlassen des Hauses losfahren zu lassen ohne hier in eine extra App zu gehen oder mit einem Timer zu arbeiten.

Alles in allem ist ioBroker und Homematic einer sehr gute Kombination die sich einfach untereinander vernetzen lassen.

Speichere in deinen Favoriten diesen permalink.

2 Kommentare

  1. Hallo,
    Vielen lieben Dank erstmal für die tolle Beschreibung.
    Hat auf Anhieb funktioniert.
    Nur leider verzweifle ich gerade daran die Lautstärke für die Sprachausgabe bei Alexa über speakvolume zu erhöhen ☹️
    Hast du da vielleicht einen Tipp für mich ?
    Lg Daniel

    • Hallo Daniel,

      ich denke hier kommt man nicht daran vorbei in dem Script die Lautstärke vorher manuell zu setzen.

      Ist jetzt ungetestet, aber so – oder so Ähnlich sollte es klappen.


      string msg = "Textnachricht an Alexa";
      string volume = "50";
      string alexa = "Kopierte Pfad des Speak-Obejekts";
      string alexavol ="Kopierter Pfad von speak-volume";
      string MESSAGE = msg.ToUTF8().Replace(" ", "%20");
      string VOL = volume.ToUTF8().Replace(" ", "%20");
      system.Exec("/usr/bin/curl 'http://:8087/set/'"#alexavol#"'?value='"#VOL);
      system.Exec("/usr/bin/curl 'http://:8087/set/'"#alexa#"'?value='"#MESSAGE);

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.