Um einen Shelly per HomeMatic schalten zu können, benötigt man CUxD (40) 16-Kanal Universalsteuerung als Schalter.
Vorbereitung
Danach einmal in den Posteingang und das Gerät übernehmen.
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.
Per Klick auf Einstellen erreicht man die Einstellungen des Gerätes.
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.
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.
! 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 Shellyvar cux_device = "CUxD.CUX4000001:1";
<- ID und Kanal des CuX Gerätes für den Shellyvar 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.
Hallo, wie würde denn das ganze mit einem Shelly Plus Plug S funktionieren? Also die Befehle, der Rest ist ja wahrscheinlich gleich
Hallo Thomas,
auf https://www.kreyenborg.koeln/wissensdatenbank/shelly-plug-s/ habe ich die Befehle für den Plug-S aufgelistet – diese sind gleich zu dem Schalter.
Für andere Shelly Geräte kannst Du die http Befehle hier einsehen:
https://www.kreyenborg.koeln/wissensdatenbank/Kategorie/shelly/
Gruß,
Stephan
Eine perfekte Anleitung, ganz große Klasse
Servus , kann ich einen shelly 1 mit Schalter benutzen um einen
HomeMatic Funk-Schaltaktor 1-fach zu kombinieren? Also Licht per shelly und per Homematic ein ausschalten ? Direkte Verknüpfung ist ja mit cuxd nicht möglich oder ?
Hallo Karl,
direkte Verbindungen gehen nur mit physischen Geräten. CuX sind virtuell und müssten über Programme geschaltet werden.
Gruß,
Stephan
Sehr gute Anleitung – ich schaffe es aber nicht mein Shelly mit einem Taster zu steuern – nur über die Oberfläche der HM (Rasberry). Wie kann ich es verknüpfen?
Hallo Fabian,
Du kannst ein entsprechendes Skript in der Homematic anlegen, welches auf den Taster reagiert.
Dann kannst Du den Shelly schalten.
Gruß
Stephan
Servus,
ähnliches würde mich ausprobieren.
Was wäre das dann für ein Skript?
Hallo Karl,
Man erstellt sich ein Skript, welches als Bedingung den CuX Eingang hat und vorher prüft, ob die Lampe ein oder aus ist.
Dann wird entsprechend reagiert.
Gruß,
Stephan
Dies verstehe ich irgendwie nicht.
“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”
Habe 2 Schellys laufen, verstehe nicht wie ich die Exec Geräte Kanalmäßig zuordnen muss.
Muß ich für jeden Schelly einen neuen CuXd Exec anlegen, oder kann ich die Untergeordneten geräte kanal einen Schelly zuordnen.
Grüße Michael
Hallo Michael,
hier ist gemeint, das jedes Exec-Gerät und jeder Exec-Kanal nur einmalig verwendet wird, da sonst – sollte der Exec-Kanal doppelt belegt sein (durch in anderes Skript zum Beispiel) – die Abarbeitung nicht richtig funktioniert oder ggf. sogar abgebrochen wird.
Heisst:
1 Kanal – 1 Skript ODER
1 Kanal – mehrere Skripts, die auch garantiert zu unterschiedlichen Zeiten laufen.
Am Besten als immer 1 -1.
Gruß,
Stephan
Vielen Dank für die großartige Anleitung. Meine Shellys sind jetzt perfekt in der Raspberrymatic intergriert.
Hallo Hartmut,
Vielen Dank!
Gruß,
Stephan
Top Anleitung! Danke!
Beim Rückgabewert komme ich nicht weiter… Wenn ich die URL im Browser eingebe:
http://192.168.xxx.xxx:8181/x.exe?Antwort=dom.GetObject(“Shelly1”).State(0)
Kommt ein Login? Muss ich da noch irgendwo User / PW eintragen?
Hallo Thomas,
eigentlich sollte dort kein Login kommen.
Hast Du deine Homematic mit einem Passwort versehen?
Dann kannst Du http://Benutzer:Passwort@192…
versuchen.
Grüße,
Stephan
Ups – Deine Antwort war noch nicht ersichtlich… DANKE!
Prima 😉
Hat sich erledigt! Habe einen User gesetzt und vor im Shelly mitgegeben… Sorry!
http://User:PW@xxx.xxx.xxx.xxx:PORT/x.exe?Antwort=dom.GetObject(“Shelly-Keller.SET_STATE”).State(1)
Danke für die Anleitung!
Genau so meinte ich dies. Schön, wenn es geklappt hat!
kann man diese Syntax
wget -q -O – ‘http://192.168.2.31/relay/0?turn~3don’
erweitern, wenn man für z.B. 60 Sekunden den Schalter einschalten will (und damit nicht generell in der Konfiguration den Schalter als Timer mit festgelegter Dauer) ?
Gruß
PM
Hallo Paul,
ja, das ist möglich. Folgende Syntax wäre hier für 60 Sekunden zu nutzen:
wget -q -O – ‘http://192.168.2.31/relay/0?auto_off~3d60’
Gruß,
Stephan
Tolle Anleitung !!
In der Vorbereitung sollte noch der Geräte-Posteingang nach dem Erzeugen des CUxD-Gerätes erwähnt werden.
Danke für den Hinweis. Den Posteingang habe ich hinzugefügt 😉