Puzzle

Shelly Schalter in HomeMatic integrieren

Um einen Shelly per HomeMatic schalten zu können, benötigt man CUxD (40) 16-Kanal Universalsteuerung als Schalter.

Vorbereitung

CuX Gerät erstellen
CuX Gerät erstellen

Pro Shelly Kanal (Shelly 1(PM) -> 1 Kanal, Shelly 2.5PM -> 2 Kanäle) wird ein Kanal der Universalfernbedienung benötigt.
Die einzelnen Kanäle können in der Geräte Übersicht verschieden benannt werden und auch den einzelnen Räumen zugeordnet werden.

Geräte Einstellung

Als nächstes in die Geräte-Übersicht und das Gerät einstellen.

CuX Gerät bennen und Raum zuordnen
CuX Gerät bennen und Raum zuordnen

Per Klick auf Einstellen erreicht man die Einstellungen des Gerätes.

Parameter für den CuX Schalter anpassen
Parameter für den CuX Schalter anpassen

Einstellung für SWITCH|CMD_SHORT:

wget -q -O - 'http://192.168.2.31/relay/0?turn~3doff'

Einstellung für SWITCH|CMD_LONG:

wget -q -O - 'http://192.168.2.31/relay/0?turn~3don'

Hierbei ist zu beachten, das die IP-Adresse des Shelly’s angepasst wird.

Da das CuX Gerät als Schalter definiert ist, bleibt der Ein- und Aus Zustand hinterlegt. Da aber der Shelly auch am physischen Schalter/Taster oder per App geschaltet werden kann, bekommt die HomeMatic dies natürlich nicht mit. Dazu verhelfen wir uns einer Funktion, die in der Shelly Web-Oberfläche integriert ist: Actions.

Der Shelly übermittelt so beim Betätigen des physischen Schalters, als auch beim Schalten per App den richtigen Status an die HomeMatic.

Shelly Action Konfiguration

Dazu rufen wir die Web-Oberfläche des Shelly mit seiner IP Adresse im Browser auf.

Einstellungen des Shelly auf der Weboberfläche
Einstellungen des Shelly auf der Weboberfläche

Url to be hit when the button is switched ON:

http://192.168.2.20:8181/x.exe?Antwort=dom.GetObject("CUxD.CUX4000001:1.SET_STATE").State(1)

Hier bitte auch wieder die Adresse der HomeMatic anpassen.
Die ID (CUX4000001) des CuX ist die, die oben angelegt wurde.
State(1) besagt, das der Status auf wahr (true) gesetzt wird.

Url to be hit when the button is switched OFF:

http://192.168.2.20:8181/x.exe?Antwort=dom.GetObject("CUxD.CUX4000001:1.SET_STATE").State(0)

Hier auch wieder die Adresse der HomeMatic anpassen. Das State(0) am Ende besagt, das der Status auf falsch (false) gsetzt wird.

Mit diesen Daten können wir den Schalter nun von allen Stellen (HomeMatic, Shelly App/Cloud und physischer Schalter) aus- und einschalten.

Es kann vorkommen, dass der Shelly den Status in der HomeMatic manchmal nicht aktualisiert. Dies kann der Fall sein, wenn der Shelly seine Mitteilung senden möchte, die HomeMatic aber gerade “blockiert” ist und die Anfrage nicht bearbeitet.
Hier habe ich mir eines kleinen Programms beholfen, welches alle 30 Sekunden ausgeführt wird und so den Status aller Shelly’s abholt und den jeweiligen CuX Geräten zuweist. Es ist nicht notwendig, für jeden Shelly ein eigenes Programm ausführen zu lassen.

Hilfsprogramm zur Aktualisierung des Shelly in der HomeMatic

Damit dieses Programm funktioniert, benötigt man ein CuX Exec (28) Gerät.

CuX Exec Gerät erstellen
CuX Exec Gerät erstellen
Shelly Status Aktualisierung in der HomeMatic
Shelly Status Aktualisierung in der HomeMatic
! Statusaktualisierung von Shelly-Aktoren ###################
! Statusaktualisierung von Shelly-Aktor Schlafzimmer Schrankbeleuchtung
var url = "http://192.168.2.31/relay/0/status";
var cux_device = "CUxD.CUX4000001:1";
var cux_exec = "CUxD.CUX2801001:2";

dom.GetObject(""#cux_exec#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#cux_exec#".CMD_QUERY_RET").State(1);
string Status = dom.GetObject(""#cux_exec#".CMD_RETS").State();
dom.GetObject(""#cux_exec#".CMD_SETS").State("0");  
if (Status.Contains("\"ison\":false")) {
  dom.GetObject(""#cux_device#".SET_STATE").State(0);
}
if (Status.Contains("\"ison\":true")) {
  dom.GetObject(""#cux_device#".SET_STATE").State(1);
}

Als Zeitsteuerung verwende ich die der HomeMatic.
Ausführung ganztägig/alle 30 Sekunden.

Hier bitte folgende Daten anpassen:

var url = "http://192.168.2.31/relay/0/status"; <- Adresse des Shelly
var cux_device = "CUxD.CUX4000001:1"; <- ID und Kanal des CuX Gerätes für den Shelly
var cux_exec = "CUxD.CUX2801001:2"; <- Das System-Exec Gerät.

Darauf achten, das hier der Kanal angepasst wird, wenn man mehrere Exec Geräte in anderen Skripten ausführen lässt.
Zum Beispiel:
Kanal 2: Aktualisierung der Shellys

Das Skript kann man nun mehrmals in das Programm kopieren und somit den Status von allen Shellys abholen lassen. Der Kanal des System Exec kann für alle Shellys verwendet werden. Da der Kanal nach jeder Abarbeitung wieder freigegeben wird, besteht hier auch keine Gefahr, das der Kanal “besetzt” ist und mit anderen Ausführungen kollidiert.

Schreibe einen Kommentar

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