Seite 1 von 1

Shelly2 mit Originalfirmware als 2-fach Schaltaktor

Verfasst: 02.03.2019, 23:53
von 66er
Hallo zusammen,

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
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:
Schalter.JPG
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 :arrow: für Kanal 1
Schalter 2 :arrow: für Kanal 2


Die Einstellungen der Kanäle:



Kanaleinstellungen Schalter 1:
Einstellungen Schalter 1.JPG

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'
und entsprechend für den Schalter/Kanal 2


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'
IP-Adresse des Shelly2 jeweils anpassen :!:


Damit sind die Schalter schon einsatzbereit. :D

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! :wink:

Für die autom. Aktualisierung des Schaltstatus und die optionalen Anzeigen von Leistung werden zunächst 1 CUxD-Timer

Timer.JPG
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).

Sysvar Leistung.JPG

Nun noch 1 Programm für die Aktualisierungen:

Programm.JPG

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";

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:

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);

   }
}  
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)

LG und ggf. viel Spass damit. :wink:
Stefan