nach dem erfolgreichen Einbinden des Shelly1 und des Shelly2 als Rollladenaktor, habe ich nun auch den Shelly2 als 2-fach-Schaltaktor eingebunden.
DIe Vorteile aus meiner Sicht:
- sehr günstiger Preis (19,99€)
- 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
- 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)
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 diverse Einträge hier im Forum und vor Allem die CUxD-Doku!)
Falls noch nicht vorhanden, bitte ein Gerät (28) System Exec anlegen! Darüber werden die Befehle abgesetzt.
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:
Code: Alles auswählen
wget -q -O - 'http://192.168.1.128/relay/0?turn~3doff'
Einstellungen für SWITCH|CMD_LONG:
Code: Alles auswählen
wget -q -O - 'http://192.168.1.128/relay/0?turn~3don'
Schalter 2:
Einstellung für SWITCH|CMD_SHORT:
Code: Alles auswählen
wget -q -O - 'http://192.168.1.128/relay/1?turn~3doff'
Einstellungen für SWITCH|CMD_LONG:
Code: Alles auswählen
wget -q -O - 'http://192.168.1.128/relay/1?turn~3don'
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!
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:
Code: Alles auswählen
!Skript zur Statusaktualisierung Shelly2 mit Originalfirmware als 2-fach Schalter (by 66er V2.2.0)
!***** 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";
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:
Code: Alles auswählen
!**** Leistungsaufnahme Shelly2 als 2-fach-Schalter aktualisieren (by66er V 2.3.0)****
!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);
}
}
IP des Shelly2
CUxD-Exec-Kanal (Im Skript: CUX2801001:3)
Name der Variablen (Im Skript: Shelly2_Schaltleistung-Test)
LG und ggf. viel Spass damit.
Stefan