Wie binde ich den Shelly2 als Rollladenaktor ein?
Bei Shelly2 handelt es sich um einen günstigen Rollladenaktor, den es in allen gängigen Shops zu kaufen gibt und sich relativ einfach in das HomeMatic-System einbinden lässt. Der folgende Artikel beschreibt die Integration des Aktors und entstand in Zusammenarbeit von Stefan & Black aus dem HomeMatic Forum.
Im Gegensatz zu den herkömmlichen Aktoren aus dem HomeMatic Sortiment ist der Shelly2 ein sehr preiswerte Alternative (~ 20 EUR). Zusätzlich sind folgende Vorteile herauszuheben:
- Sämtliche Shelly2-Eigenschaften bleiben erhalten (u.a. auch die Schutzfunktion vor Überlast)
- Volle Shelly App-Bedienbarkeit parallel zur HomeMatic-Automatisierung
- Als manueller Schalter können markenunabhängig alle vorhandenen Rollladenschalter (weiter) genutzt werden
- Betrieb als lokale Lösung oder über Shelly-Cloud (zusätzlich HomeMatic)
Folgende Funktionen wurden durch die Autoren dabei umgesetzt:
- Rollladen öffnen (Behanghöhe 100%)
- Rollladen schließen (Behanghöhe 0%)
- laufende Fahrt Stop
- Anfahren von 1 definierte Beschattungsposition
- Aktualisierung der aktuellen Behanghöhe in frei einstellbarem Intervall, unabhängig davon, ob die Bedienung über Homematic oder Shelly-App oder Taster erfolgt
- Überwachung des Onlinestatus (Erreichbarkeit im WLAN)
Ansicht der Anbindung

Umsetzung
Für die Integration ist das HomeMatic-AddOn "CUx-Daemon" nötig, das als Zusatzsoftware auf der CCU installiert wird. Nähere Informationen zu diesem AddOn sind der beiliegenden und sehr ausführlichen Dokumentation zu entnehmen. Wichtig ist, dass das Gerät CUx-D (28) System Exec angelegt wurde, welches eine absturzsichere Variante des "system.exec"-Befehls implementiert.
Zusätzlich muss noch das Gerät CUxD (40) 16-Kanal Universalsteuerung als Taster angelegt werden. Von diesem Gerät werden je Rollladenaktor 2 Tasten benötigt (siehe oberes Bild). Die Taste 1 wurd dabei für AUF und AB sowie optional für die Darstellung der Behanghöhe und des Onlinestatus benötigt. Die Taste 2 dient als STOP sowie zum Anfahren einer definierten Beschattungsposition.
Einstellung der Kanäle

Taste 1
Einstellung für SWITCH|CMD_SHORT:
wget -q -O - 'http://<IP des Shelly2>/roller/0?go~3dopen'
Einstellung für SWITCH|CMD_LONG:
wget -q -O - 'http://<IP des Shelly2>/roller/0?go~3dclose'
Taste 2
Einstellung für SWITCH|CMD_SHORT:
wget -q -O - 'http://<IP des Shelly2>/roller/0?go~3dstop'
Einstellung für SWITCH|CMD_LONG:
wget -q -O - 'http://<IP des Shelly2>/roller/0?go~3dto_pos~26roller_pos~3d20'
Anzeige der Behanghöhe & des Onlinestatus
Im Prinzip ist die eigentliche Steuerung des Shelly2-Aktors nach den obigen Schritten bereits abgeschlossen und sollte funktionieren. Möchte man zusätzlich noch die Behanghöhe und den Onlinestatus angezeigt bekommen, sind je eine Systemvariable anzulegen:
Systemvariable für die Behanghöhe

Systemvariable für den Onlinestatus

Den Onlinestatus überwacht und steuert dabei ein so genannter CUx-D Ping Kanal. Das dazu passende Gerät (CUx-D (28) Ping) bietet dabei 16 unabhängige Kanäle, das bis zu 16 Shelly2 überwachen könnte. Natürlich kann auch ein freier Kanal eines schon vorhandenen CUxD-Ping genutzt werden:

Einstellung für SWITCH|CMD_EXEC_TRUE:
extra/timer.tcl Onlinestatus_Shelly_Roll_SZ 1
Einstellung für SWITCH|CMD_EXEC_FALSE:
extra/timer.tcl Onlinestatus_Shelly_Roll_SZ 0
Damit die Behanghöhe stimmt, muss der Shelly2-Aktor zuvor kalibriert werden.
Anschließend nutzt man einen CUx-D Timer, der als Auslöser der Aktualisierung dient:

Das eigentliche Programm, welches auf den zuvor definierten Timer auslöst, sieht dabei wie folgt aus:

Das aufgerufene Skript muss noch vor dem Einsatz wie folgt bearbeitet werden:
- IP-Adresse des Shelly2 eintragen
- Ggf. CUxD-Exec-Kanal (Im Skript: CUX2801001:3) anpassen
- Ggf. Name der Variablen (Im Skript: Shelly_Behanghoehe_Rollladen_SZ) anpassen
!Skript zur Behanghöheaktualisierung (%) Shelly2 als Rollladenaktor mit Originalfirmware (by 66er V2.0)
!Raumbezeichnung (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly2 als Rollladenaktor*****
!In der folgenden Zeile IP des Shelly2 anpassen!
var url = "http://192.168.1.xxx/roller/0";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen
dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:3.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801001:3.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001:3.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings *** Mein Dank an Black für die Unterstützung *** ****
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current_pos"')) {
string e = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(e);
}
}
!**** Variable Rollladenbehanghöhe setzen****
!Variablennamen anpassen
dom.GetObject("Shelly_Behanghoehe_Rollladen_SZ").State(e);