- Offizieller Beitrag
©2019 Stefan K. (alias 66er) - ausführlicher Hinweis dazu am Ende der Anleitung
Hallo zusammen,
um den Shelly 2 in Homematic einzubinden, braucht es keine Fremdfirmware, die man flashen muß.
Für den Modus "2-fach Schaltaktor" stelle ich meine Lösung mit der Originalfirmware vor:
DIe Vorteile aus meiner Sicht:
- sehr günstiger Preis (19,99€) gegenüber dem Homematic-Original(59,95€)
- alle Shelly2-Eigenschaften bleiben erhalten, da ich die Aktoren mit der originalen Herstellerfirmware betreibe
- alle zukünftigen Shelly2-Aktualisierungen/ -updates werden nutzbar sein
- Volle Shelly-App-Bedienbarkeit parallel zur Homematic-Automatisierung
- Als manueller Schalter können markenunabhängig alle vorhandenen Schalter (weiter) genutzt werden
- Betrieb als lokale Lösung oder über Shelly-Cloud, zusätzlich Homematic
Folgende Funktionen habe ich auf der Homematic-Seite umgesetzt:
- unabhängiges Schalten der 2 Schaltkanäle
- Aktualisierung des aktuellen Schaltzustandes in frei einstellbarem Intervall, unabhängig davon, ob die Bedienung über Homematic oder Shelly-App oder Taster erfolgt
- Optionale Überwachung des Onlinestatus (Erreichbarkeit im WLAN)
- Optinale Anzeige des Schaltleistung (Shelly-seitig nur als Gesamtleistung beider Kanäle)
Die Ansicht der Anbindung:
Bild1 die CUxD-Schalter (2 Kanäle)
Die Umsetzung:
(Auf die Beschreibung des Anlegens der CUxD-Geräte verzichte ich an dieser Stelle, dafür gibt es die CUxD-Doku!)
Falls noch nicht vorhanden, bitte ein Gerät (28) System Exec anlegen! Darüber werden die Befehle abgesetzt.
Hier gibt es bei Bedarf eine Anleitung zum Anlegen des CUxD-Exec-Gerätes.
Anlegen einer CUxD (40) 16-Kanal Universalsteuerung als Schalter
Davon werden je Shelly2 als 2-fach-Aktor 2 Tasten benötigt (siehe Bild 1):
Schalter 1 --> für Kanal 1
Schalter 2 --> für Kanal 2
Die Einstellungen der Kanäle:
Kanaleinstellungen Schalter 1:
Schalter 1:
Einstellung für SWITCH|CMD_SHORT:
Einstellungen für SWITCH|CMD_LONG:
und entsprechend für den Schalter/Kanal 2
Schalter 2:
Einstellung für SWITCH|CMD_SHORT:
Einstellungen für SWITCH|CMD_LONG:
IP-Adresse des Shelly2 jeweils anpassen !
Damit sind die Schalter schon einsatzbereit.
Was noch fehlt ist die autom. Aktualisierung des Schaltstatus und die optionalen Anzeigen von Leistung und Onlinestatus.
Die Anzeige des Onlinestatus erfolgt wie beim Shelly 1 mittels Systemvariable und CUxD-Ping-Gerät(28) und ist beim Shelly1 bereits ausführlich beschrieben und kann im entsprechenden Thread nachgelesen werden!
Aktualisierung Schaltstatus:
Nachtrag;
Darauf kann man seit Firmware 1.5.0 ggf. verzichten, wenn man zur Statusaktualisierung die "Actions" in den Shelly nutzt. Vor- und Nachteile wurden in diesem Thread erörtert.
Auch die Einrichtung der Actions ist dort beschrieben.
Für die autom. Aktualisierung des Schaltstatus und die optionalen Anzeigen von Leistung werden zunächst 1 CUxD-Timer ...
Aktualisierung alle 60 Sekunden (Zeit variabel)
... und eine Systemvariable benötigt, die wie beim Shelly1 dem entsprechenden CUxD-Schalter-Kanal zugeordnet wird (siehe oben Bild1).
Nun noch 1 Programm für die Aktualisierungen:
Skript 1:
!Skript zur Statusaktualisierung Shelly2 mit Originalfirmware als 2-fach Schalter (c) 66er V2.2.1
!***** Schaltstatus auslesen Schalter 1 ****
!In der folgenden Zeile die IP des Shelly2 anpassen
var url = "http://192.168.1.128/relay/0/status";
!In den folgenden 4 Zeilen die CUxD-Exec-Geräteadresse anpassen (hier: 2801001:2)
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("0");
!WriteLine(Antwort);
!In diesem Abschnitt NICHTS ändern
string word = "ison:";
integer word_laenge = word.Length();
integer word_position = Antwort.Find(word);
string daten = Antwort.Substr((word_position + word_laenge +4), 5);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -3));
Antwort = "true";
!WriteLine(daten);
!**** Zustand Kanal 1 aktualisieren ****
!In den folgenden 3 Abschnitten die CUxD-Adresse für den Kanal1 des Shelly2 anpassen
var zustand = dom.GetObject("CUxD.CUX4000005:15.STATE").State();
!WriteLine(zustand);
if ((daten == "true,") && (zustand != true) )
{dom.GetObject("CUxD.CUX4000005:15.SET_STATE").State(1);
WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX4000005:15.SET_STATE").State(0);
WriteLine("if off");
}
!***** Schaltstatus aktualisieren Schalter 2 ****
!In der folgenden Zeile die IP des Shelly2 anpassen
var url = "http://192.168.1.128/relay/1/status";
!In den folgenden 4 Zeilen die CUxD-Exec-Geräteadresse anpassen (hier: 2801001:2)
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("0");
WriteLine(Antwort);
!In diesem Abschnitt NICHTS ändern
string word = "ison:";
integer word_laenge = word.Length();
integer word_position = Antwort.Find(word);
string daten = Antwort.Substr((word_position + word_laenge +4), 5);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -3));
Antwort = "true";
WriteLine(daten);
!**** Zustand Kanal 2 aktualisieren ****
!In den folgenden 3 Abschnitten die CUxD-Adresse für den Kanal2 des Shelly2 anpassen
var zustand = dom.GetObject("CUxD.CUX4000005:16.STATE").State();
!WriteLine(zustand);
if ((daten == "true,") && (zustand != true) )
{dom.GetObject("CUxD.CUX4000005:16.SET_STATE").State(1);
WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX4000005:16.SET_STATE").State(0);
WriteLine("if off");
}
daten = "0";
Alles anzeigen
Gemäß den Hinweisen im Skript sind anzupassen:
IP des Shelly2
CUxD-Exec-Kanal (Im Skript: CUX2801001:3)
CUxD-Geräte-Kanäle der Schalter (Im Skript: CUX4000005:15 und CUX4000005:16)
Skript 2:
!**** Leistungsaufnahme Shelly2 als 2-fach-Schalter aktualisieren (c) by66er V 2.3.1****
!In der folgenden Zeile die IP-Adresse des Shelly2 anpassen
var url = "http://192.168.1.128/meter/0?power";
!**** Abfrage des Shelly2 ****
!In den folgenden Zeilen jeweils den CUxD-Exec-Kanal anpassen (5x)
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 ****
!In diesem Abschnitt NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string e = (s.StrValueByIndex (":",1).RTrim ("}")).ToInteger();
! WriteLine(e);
!**** Variable Shelly2_Leistung-Gesamt setzen****
!Variablennamen anpassen
dom.GetObject("Shelly2_Schaltleistung-Test").State(e);
}
}
Alles anzeigen
Gemäß den Hinweisen im Skript sind anzupassen:
IP des Shelly2
CUxD-Exec-Kanal (Im Skript: CUX2801001:3)
Name der Variablen (Im Skript: Shelly2_Schaltleistung-Test)
Viel Spass damit.
____________________________________________________________
Die Anleitung inkl. der Skripte und Bilder unterliegt dem Urheberrecht. Wer gegen das Urheberrecht verstößt (z.B. Bilder oder Texte unerlaubt kopiert und auf anderen Webseiten publiziert), macht sich gem. §§ 106 ff UrhG strafbar, kann zudem kostenpflichtig abgemahnt werden und muss Schadensersatz leisten (§ 97 UrhG).
© 2019 Stefan K. (alias 66er)
Alle Rechte vorbehalten