Mit viel Glück schaltet dann zwar der entsprechende Ausgang vom Shelly an dem dann die Lampe hängt , aber dimmen kannst du darüber nicht...
Nicht zwingend! Bei Busch&Jaeger funktioniert auch die Dimmung! Man müsste das Datenblatt haben.
VPN/Proxy erkannt
Es scheint, dass Sie einen VPN- oder Proxy-Dienst verwenden. Bitte beachten Sie, dass die Nutzung eines solchen Dienstes die Funktionalität dieser Webseite einschränken kann.
Mit viel Glück schaltet dann zwar der entsprechende Ausgang vom Shelly an dem dann die Lampe hängt , aber dimmen kannst du darüber nicht...
Nicht zwingend! Bei Busch&Jaeger funktioniert auch die Dimmung! Man müsste das Datenblatt haben.
Hallo MarvinTheRobot ,
WILLKOMMEN im Forum!
Hast mal hier geschaut?:
https://shelly-forum.com/index.php?atta…mmer-2247u-png/
Grundlage dieser Schemen mit Busch-Dimmer 2247U war eine Anfrage von alex81 im Support-Bereich und die Kommunikation in diesem Thread: Wechselschaltung mit Busch-Dimmer 2247
Erläuterungen, Einstellungen und Bedienung siehe: Shelly schalten per Busch-Dimmer 2247 U und/oder Schalter
Die 2 fache Schalthandlung müsste ich noch einmal mit den von alex81 angegebenen Button-Einstellungen gegentesten, hatte leider bis dato keine Zeit dafür.
Hallo Bernd, so wild ist das gar nicht!
Ich hatte mal bei Dimitar zwecks Stromwertausgabe beim EM angefragt, sinngemäß war die Antwort „...wozu, die Kunden wollen vorrangig Leistungsdaten messen, besonders von Photovoltaik-Anlagen...“
Deshalb meine obige „Spekulation“.
Bei mir funktioniert es zumindest über WebUI tadellos.
Hatte am Wochenende am iPad Updates gemacht, waren erfolgreich auf den ersten Blick. Zwei Tage später zeigten ca. 3 Shellys wieder das Update, ca. 20 waren wirklich erfolgreich.
Bei Messwanler ist die Stromrichtung k-> l.
Meine Messwandler hatte ich stromrichtig von der EVU gesehen auf die Adern geklemmt. Leider waren es negative Messdaten, musste sie umdrehen. Warum weiß ich nicht, müsste ich mal in QA nachfragen.
Ich denke mal, bezugnehmend auf das Schema in der Anleitung, geht Allterco davon aus, dass die Mehrheit der Kunden Messdaten erneuerbaren Energien messen werden. Also rückführend ins Netz.
7. currently total returned energy display:
evaluates the total returned energy (Photovoltaik) of the Shelly 3EM channels, displays it in the CUxD device and of course the value can also be used in programs.
For this we need 3 system variable (per Phase) for the currently total returned Energy:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 7th THEN line to update the total returned energy data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this:
!Skript zur Energie-Einspeisung-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung1").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung2").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung3").State(p.ToFloat()/1000);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case! (here: Shelly_3EM_Hauptzaehler_Energie_Einspeisung1)
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the total returned energy is now updated.
8. currently total returned energy display:
evaluates the total returned energy (Photovoltaik) of the Shelly 3EM channels (total of all 3 channels), displays it in the CUxD device and of course the value can also be used in programs.
For this we need 1 system variable for the currently total returned energy:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 8th THEN line to update the consumed total returned energy data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this:
!Skript zur Energie-Gesamteinspeisung-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung1").State(p.ToFloat()/1000);
var pg1 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung2").State(p.ToFloat()/1000);
var pg2 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung3").State(p.ToFloat()/1000);
var pg3 = p.ToFloat();
!Berechnung gesamt
var pgg = pg1 + pg2 + pg3;
!WriteLine (pgg/1000);
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_EinspeisungGesamt)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_EinspeisungGesamt").State(pgg/1000);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case! (here: Shelly_3EM_Hauptzaehler_Energie_EinspeisungGesamt)
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the total returned energy is now updated.
____________________________________________________________
The instructions including the scripts and pictures are subject to copyright. Who violates the copyright (for example, images or texts illegally copied and published on other websites), makes itself gem. §§ 106 ff UrhG punishable, can also be warned with costs and must pay damages (§ 97 UrhG).
© 2020 SparkyMaster
7.) aktuelle Anzeige der eingespeisten Energie:
wertet die eingespeiste Energie (von z.B. Photovoltaik) jedes Shelly 3EM-Kanals aus, zeigt sie im CUxD-Gerät an.
Dazu brauchen wir 3 Systemvariablen (eine je Phase) für die aktuellen Energiewerte:
Die Variable wird dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch wird sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 7. DANN Zeile zur Aktualisierung der eingespeiste Energie ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu:
!Skript zur Energie-Einspeisung-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung1").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung2").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung3").State(p.ToFloat()/1000);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung1)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle eingespeiste Energie aktualisiert.
8.) aktuelle Anzeige der eingespeisten Gesamtenergie:
wertet die eingespeiste Gesamtenergie (von z.B. Photovoltaik) des Shelly 3EM aus (Summe der 3 Phasen), zeigt sie im CUxD-Gerät an.
Dazu brauchen wir 1 Systemvariablen für den aktuellen Energiewert:
Die Variable wird dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch wird sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 8. DANN Zeile zur Aktualisierung der eingespeiste Gesamtenergie ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu:
!Skript zur Energie-Gesamteinspeisung-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung1").State(p.ToFloat()/1000);
var pg1 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung2").State(p.ToFloat()/1000);
var pg2 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total_returned";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total_returned"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_Einspeisung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_Einspeisung3").State(p.ToFloat()/1000);
var pg3 = p.ToFloat();
!Berechnung gesamt
var pgg = pg1 + pg2 + pg3;
!WriteLine (pgg/1000);
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie_EinspeisungGesamt)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie_EinspeisungGesamt").State(pgg/1000);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_Energie_EinspeisungGesamt)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle eingespeiste Gesamtenergie aktualisiert.
____________________________________________________________
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).
© 2020 SparkyMaster
Instruction to update firmware in case with ID collision
Error messages are accumulating that some Shelly devices cannot connect to the cloud due to device ID problems.
Allterco reacted here and published instructions for action.
Method:
-> shellyip -> adjust the IP address of the shelly! (see second point)
-> http: // provided-url-of-ota-update -> adjust "provided-url-of-ota-update"! (select the following corresponding .zip file)
-> https://shelly.cloud/support/user-manuals/
6. currently consumed total energy display:
evaluates the consumed total energy of the Shelly 3EM channels (total of all 3 channels), displays it in the CUxD device and of course the value can also be used in programs.
For this we need 1 system variable for the currently total consumed Energy:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 6th THEN line to update the consumed total energy data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this: (Stefan (66er), thank you for the help and support!)
!Skript zur Energie-Gesamtbezug-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.4)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie1_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie1_Bezug").State(p.ToFloat()/1000);
var pg1 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie2_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie2_Bezug").State(p.ToFloat()/1000);
var pg2 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie3_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie3_Bezug").State(p.ToFloat()/1000);
var pg3 = p.ToFloat();
!Berechnung gesamt
var pgg = pg1 + pg2 + pg3;
!WriteLine (pgg/1000);
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_EnergieGesamt_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_EnergieGesamt_Bezug").State(pgg/1000);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case!
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the consumed total energy is now updated.
____________________________________________________________
The instructions including the scripts and pictures are subject to copyright. Who violates the copyright (for example, images or texts illegally copied and published on other websites), makes itself gem. §§ 106 ff UrhG punishable, can also be warned with costs and must pay damages (§ 97 UrhG).
© 2020 SparkyMaster
6.) aktuelle Anzeige der bezogenen Gesamtenergie:
wertet die bezogene Gesamtenergie (von der EVU) des Shelly 3EM aus (Summe der 3 Phasen), zeigt sie im CUxD-Gerät an.
Dazu brauchen wir 1 Systemvariablen für den aktuellen Energiewert:
Die Variable wird dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch wird sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 6. DANN Zeile zur Aktualisierung der bezogenen Gesamtenergie ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu: (Stefan (66er), Danke für die Unterstützung bei diesem Skript!)
!Skript zur Energie-Gesamtbezug-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.4)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie1_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie1_Bezug").State(p.ToFloat()/1000);
var pg1 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie2_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie2_Bezug").State(p.ToFloat()/1000);
var pg2 = p.ToFloat();
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie3_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie3_Bezug").State(p.ToFloat()/1000);
var pg3 = p.ToFloat();
!Berechnung gesamt
var pgg = pg1 + pg2 + pg3;
!WriteLine (pgg/1000);
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_EnergieGesamt_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_EnergieGesamt_Bezug").State(pgg/1000);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_EnergieGesamt_Bezug)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle bezogenen Energie aktualisiert.
____________________________________________________________
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).
© 2020 SparkyMaster
Optional ads:
1.) Online Status:
As with all other couplings, the opt. display of the online status is also made using the system variable and CUxD ping device (28).
To display the online status, 1 system variable is required:
The variable is linked again to the corresponding channel of the CUxD device and thus displayed there.
The online status is monitored and controlled by a CUxD ping channel. That, with 1 CUxd Ping device (28) up to 16 Shelly EM can be monitored. Of course, a free channel of an existing CUxD ping can be used.
Adjust IP!
Settings for: SWITCH|CMD_EXEC_TRUE:
Settings for SWITCH|CMD_EXEC_FALSE:
Adapt the name of the system variable in each case! (here:Onlinestatus_Shelly3EM_Hauptzaehler)
In the set interval of the timer, the online status is now updated.
2.) currently power display:
evaluates the power of the Shelly 3EM channels, displays it in the CUxD device and of course the value can also be used in programs.
For this we need 3 system variable (per Phase) for the currently power value:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 2nd THEN line to update the power data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this:
!Skript zur Leistungsaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase L1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?status";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Leistung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Leistung1").State(p);
!****Abfrage des Shelly 3EM Phase L2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?status";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Leistung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Leistung2").State(p);
!****Abfrage des Shelly 3EM Phase L3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?status";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Leistung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Leistung3").State(p);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case! (here:Shelly_3EM_Hauptzaehler_Leistung1)
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the currently power is now updated.
3.) currently voltage display:
evaluates the voltage of the Shelly 3EM, displays it in the CUxD device and of course the value can also be used in programs.
For this we need 3 system variable (per Phase) for the currently voltage value:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 3rd THEN line to update the voltage data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this:
!Skript zur Spannungsaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?voltage";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"voltage"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Spannung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Spannung1").State(p);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?voltage";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"voltage"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Spannung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Spannung2").State(p);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?voltage";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"voltage"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Spannung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Spannung3").State(p);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case! (here:Shelly_3EM_Hauptzaehler_Spannung1)
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the currently voltage is now updated.
4. currently current display:
evaluates the current of the Shelly 3EM channels, displays it in the CUxD device and of course the value can also be used in programs.
For this we need 3 system variable (per Phase) for the currently current value:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 4th THEN line to update the current data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this:
!Skript zur Stromaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?current";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Strom1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Strom1").State(p);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?current";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Strom2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Strom2").State(p);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?current";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Strom3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Strom3").State(p);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case! (here:Shelly_3EM_Hauptzaehler_Strom1)
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the current is now updated.
5. currently total consumed energy display:
evaluates the total consumed energy of the Shelly 3EM channels, displays it in the CUxD device and of course the value can also be used in programs.
For this we need 3 system variable (per Phase) for the currently total consumed Energy:
The variables are assigned to the corresponding channel of the Shelly CUxD device. This makes it visible as shown in Figure 1 in # 1.
In the status updating program (see picture in # 2) we add a 5th THEN line to update the total consumed energy data.
Attention:
The names of the system variables must not contain any "spaces" !
The script for this: (Stefan (66er), thank you for the help and support!)
!Skript zur Energie-Bezug-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie1_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie1_Bezug").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie2_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie2_Bezug").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie3_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie3_Bezug").State(p.ToFloat()/1000);
!Ende Skript
Alles anzeigen
Adapt the name of the system variable in each case! (here:Shelly_3EM_Hauptzaehler_Energie1_Bezug)
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
In the set interval of the timer, the total consumed energy is now updated.
____________________________________________________________
The instructions including the scripts and pictures are subject to copyright. Who violates the copyright (for example, images or texts illegally copied and published on other websites), makes itself gem. §§ 106 ff UrhG punishable, can also be warned with costs and must pay damages (§ 97 UrhG).
© 2020 SparkyMaster
Update the switch-state
The update is important, so that in Homematic the switching state is also correct, if e.g. via the Shelly app Pros and cons are described in # 1 linked thread.
For the autom. Updating the switching status we need 1 timer ...
Update every 60 seconds (time variable)
... that triggers the update program:
Alternatively, in the IF, it is also possible to trigger on the "Timerevent" of the timer.
Missing only the script for the 1st THEN line:
!Skript zur Statusaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!***** Schaltstatus auslesen ****
!In der folgenden Zeile die IP des Shelly 3EM anpassen
var url = "http://192.168.178.32/relay/0/status";
!In den folgenden 4 Zeilen die CUxD-Exec-Geräteadresse anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.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 +2), 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 Shelly 3EM anpassen
var zustand = dom.GetObject("CUxD.CUX4000005:2.STATE").State();
!WriteLine(zustand);
if ((daten == "true,") && (zustand != true) )
{dom.GetObject("CUxD.CUX4000005:2.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX4000005:2.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
!Ende Skript
Alles anzeigen
According to the instructions in the script have to be adapted:
IP of the Shelly 3EM
CUxD Exec channel
CUxD channel of the Shelly 3EM
Now, the switching state of the Shelly 3EM is also updated in Homematic when switching via the app or Shelly scenes.
____________________________________________________________
The instructions including the scripts and pictures are subject to copyright. Who violates the copyright (for example, images or texts illegally copied and published on other websites), makes itself gem. §§ 106 ff UrhG punishable, can also be warned with costs and must pay damages (§ 97 UrhG).
© 2020 SparkyMaster
Hello Homematic Friends,
finally the time comes, the integration of Shelly 3EM in the HomeMatic. The Shelly 3EM was a long time coming!
To integrate the Shelly 3EM into Homematic, you do not need any third-party firmware, that you have to flash.
Below my solution with the original firmware:
techn. Requirements:
(The knowledge about the handling CUxD, such as devices create, I assume at this point, otherwise "exploded" this guide Thank you for understanding.)
I implemented the following functions on the Homematic page:
I would like to recommend you to take a look at these threads before the implementation:
At the appropriate place in the manual, everyone has to decide for themselves which route the switching status monitor wants to use.
A view to the connection:
Picture 1
Note!
At this point I would like to point out, based on the amount of measurement data, that it is also possible to "sort" the individual electrical quantities in separate CUxD device channels. On / off has no function there!
You only have to make sure that the channels of the "CUxD (40) 16-channel universal control as switch" are assigned accordingly in the system variables and the scripts !!!
The implementation:
(On the description of the creation of the CUxD devices I give up at this point, of course there is the CUxD document!)
If not yet available, please create a device (28) System Exec! Above that the commands are issued. (No entries are made in CUxD-Exec!)
Creation of a CUxD (40) 16-channel universal control as a switch
(I use a free channel of the remote control of the Shelly EM!)
With each channel of the CUxD device, 1 Shelly 3EM can be mapped.
The settings of the channels:
The Shelly 3EM has two measuring channels to which two transducers can be connected.
Attention !: However, only one relay / switching output is integrated to control an external controls. When creating scenes or actions, the correct channel selection must be observed!
SWITCH|CMD_EXEC: Check mark!
Settings for SWITCH|CMD_SHORT:
Settings for SWITCH|CMD_LONG:
Adapt the IP address of the Shelly 3EM in each case!
This makes the Shelly 3EM ready for use and can be switched on and off.
____________________________________________________________
The instructions including the scripts and pictures are subject to copyright. Who violates the copyright (for example, images or texts illegally copied and published on other websites), makes itself gem. §§ 106 ff UrhG punishable, can also be warned with costs and must pay damages (§ 97 UrhG).
© 2020 SparkyMaster
Optionale Anzeigen:
1.) Onlinestatus:
Die optinale Anzeige des Onlinestatus erfolgt wie bei allen anderen Kopplungen auch mittels Systemvariable und CUxD-Ping-Gerät(28) .
Für die Anzeige des Onlinestatus wird 1 Systemvariable benötigt:
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Die Variable wird wieder mit dem entsprechenden Kanal des CUxD-Gerät verknüpft und somit dort angezeigt.
Den Onlinestatus überwacht und steuert ein CUxD-Ping Kanal. D.h. mit 1 CUxd-Ping-Gerät (28) können bis zu 16 Shelly 3EM überwacht werden. Natürlich kann auch ein freier Kanal eines schon vorhandenen CUxD-Ping genutzt werden.
IP anpassen!
Einstellungen für SWITCH|CMD_EXEC_TRUE:
Einstellungen für SWITCH|CMD_EXEC_FALSE:
Name der Systemvariablen jeweils anpassen! (hier: Onlinestatus_Shelly3EM_Hauptzaehler)
Im eingestellten Intervall des Timers wird nun der Onlinestatus aktualisiert.
2.) aktuelle Leistungsanzeige:
wertet die Leistung jedes Shelly 3EM-Kanals aus, zeigt sie im CUxD-Gerät an und natürlich kann der Wert auch in Programmen genutzt werden.
Dazu brauchen wir 3 Systemvariable (eine je Phase) für den aktuellen Leistungswert:
Die Variablen werden dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch werden sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 2. DANN Zeile zur Aktualisierung der Leistungsdaten ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu:
!Skript zur Leistungsaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase L1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?status";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Leistung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Leistung1").State(p);
!****Abfrage des Shelly 3EM Phase L2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?status";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Leistung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Leistung2").State(p);
!****Abfrage des Shelly 3EM Phase L3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?status";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"power"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Leistung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Leistung3").State(p);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_Leistung1)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle Leistung aktualisiert.
3.) aktuelle Spannungsanzeige:
wertet die Spannung des Shelly 3EM aus, zeigt sie im CUxD-Gerät an und natürlich kann der Wert auch in Programmen genutzt werden.
Dazu brauchen wir 3 Systemvariable (eine je Phase) für den aktuellen Spannungswert:
Die Variable wird dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch wird sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 3. DANN Zeile zur Aktualisierung der Spannungsdaten ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu:
!Skript zur Spannungsaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?voltage";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"voltage"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Spannung1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Spannung1").State(p);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?voltage";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"voltage"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Spannung2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Spannung2").State(p);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?voltage";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"voltage"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Spannung3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Spannung3").State(p);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_Spannung1)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle Spannung aktualisiert.
4.) aktuelle Stromanzeige:
wertet den Strom des Shelly 3EM aus, zeigt sie im CUxD-Gerät an und natürlich kann der Wert auch in Programmen genutzt werden.
Dazu brauchen wir 3 Systemvariable (eine je Phase) für den aktuellen Stromwert:
Die Variable wird dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch wird sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 4. DANN Zeile zur Aktualisierung der Stromdaten ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu:
!Skript zur Stromaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?current";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Strom1)
dom.GetObject("Shelly_3EM_Hauptzaehler_Strom1").State(p);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?current";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Strom2)
dom.GetObject("Shelly_3EM_Hauptzaehler_Strom2").State(p);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?current";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"current"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Strom3)
dom.GetObject("Shelly_3EM_Hauptzaehler_Strom3").State(p);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_Strom1)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle Stromwert aktualisiert.
5.) aktuelle Anzeige der bezogenen Energie:
wertet die bezogene Energie (von der EVU) jedes Shelly 3EM-Kanals aus, zeigt sie im CUxD-Gerät an.
Dazu brauchen wir 3 Systemvariablen (eine je Phase) für die aktuellen Energiewerte:
Die Variable wird dem entsprechenden Kanal des Shelly-CUxD-Gerätes zugeordnet. Dadurch wird sie wie im Bild 1 in #1 sichtbar.
In das Programm zur Statusaktualisierung (siehe Bild in #2) fügen wir nun eine 5. DANN Zeile zur Aktualisierung der bezogenen Energie ein.
Achtung:
Die Namen der Systemvariablen dürfen keine Leerzeichen und keine Umlaute enthalten!
Das Skript dazu: (Stefan (66er), Danke für die Unterstützung bei diesem Skript!)
!Skript zur Energie-Bezug-Aktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!Hauptzähler (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly 3EM Phase 1*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/0?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie1_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie1_Bezug").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 2*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/1?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie2_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie2_Bezug").State(p.ToFloat()/1000);
!****Abfrage des Shelly 3EM Phase 3*****
!In der folgenden Zeile IP des Shelly 3EM anpassen!
var url = "http://192.168.178.32/emeter/2?total";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("0");
!WriteLine(Antwort);
!WriteLine(t);
!****Auswertung des Antwortstrings ****
!Hier NICHTS ändern
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"total"')) {
string p = (s.StrValueByIndex (":",1).RTrim ("}"));
! WriteLine(p);
}
}
!**** Variable setzen****
!Variablennamen anpassen (hier: Shelly_3EM_Hauptzaehler_Energie3_Bezug)
dom.GetObject("Shelly_3EM_Hauptzaehler_Energie3_Bezug").State(p.ToFloat()/1000);
!Ende Skript
Alles anzeigen
Namen der Systemvariablen jeweils anpassen! (hier: Shelly_3EM_Hauptzaehler_Energie1_Bezug)
Gemäß den Hinweisen im Skript sind weiterhin anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
Im eingestellten Intervall des Timers wird nun die aktuelle bezogenen Energie aktualisiert.
____________________________________________________________
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).
© 2020 SparkyMaster
Aktualisierung des Schaltstatus:
Die Aktualisierung ist wichtig, damit in Homematic der Schaltzustand auch stimmt, wenn z.B. über die Shelly-App geschaltet wird. Vor- und Nachteile sind im in #1 verlinkten Thread beschrieben.
Für die autom. Aktualisierung des Schaltstatus benötigen wir 1 Timer ...
Aktualisierung alle 60 Sekunden (Zeit variabel)
... der das Programm zur Aktualisierung triggert:
Alternativ kann auch im WENN auch auf "Timerevent" des Timers ausgelöst werden.
Fehlt nur noch das Skript für die 1. DANN-Zeile:
!Skript zur Statusaktualisierung Shelly 3EM mit Originalfirmware (by SparkyMaster V1.0)
!***** Schaltstatus auslesen ****
!In der folgenden Zeile die IP des Shelly 3EM anpassen
var url = "http://192.168.178.32/relay/0/status";
!In den folgenden 4 Zeilen die CUxD-Exec-Geräteadresse anpassen (hier: 2801002:6)
dom.GetObject("CUxD.CUX2801002:6.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:6.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:6.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:6.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 +2), 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 Shelly 3EM anpassen
var zustand = dom.GetObject("CUxD.CUX4000005:2.STATE").State();
!WriteLine(zustand);
if ((daten == "true,") && (zustand != true) )
{dom.GetObject("CUxD.CUX4000005:2.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX4000005:2.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
!Ende Skript
Alles anzeigen
Gemäß den Hinweisen im Skript sind anzupassen:
IP des Shelly 3EM
CUxD-Exec-Kanal
CUxD-Kanal des Shelly 3EM
Nun wird der Schaltzustand des Shelly 3EM auch in Homematic aktualisiert, wenn über die App oder Shelly-Szenen geschaltet wird.
____________________________________________________________
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).
© 2020 SparkyMaster
Hallo Homematic-Freunde,
endlich ist es soweit, die Einbindung des Shelly 3EM in die Homematic. Der Shelly 3EM hat ja lange auf sich warten lassen.
Um den Shelly 3EM in Homematic einzubinden, braucht es wie immer keine Fremdfirmware, die man flashen muß.
Nachfolgend meine Lösung mit der Originalfirmware:
techn. Voraussetzungen:
kompatibel mit den Homematic-Systemen CCU2, CCU3, Charly, sowie allen Ablegern wie RaspberryMatic und piVCCU.
installiertes Addon CUxD in aktueller Version
(Das Wissen um den Umgang CUxD, wie z.B. Geräte anlegen, setze ich an dieser Stelle voraus, sonst "explodiert" diese Anleitung. Danke für's Verständnis.)
Folgende Funktionen habe ich auf der Homematic-Seite umgesetzt:
Ich möchte Euch an dieser Stelle empfehlen, vor der Umsetzung mal einen Blick in diese Threads zu werfen:
Aktuell erfolgen die Statusabfragen meiner Shellys mit beiden Möglichkeiten parallel, es läuft problemlos!
An entsprechender Stelle in der Anleitung muss jeder für sich entscheiden, welchen Weg der Schalt-Statusüberwachung er nutzen möchte.
Die Ansicht der Anbindung:
Bild 1
Hinweis!
An dieser Stelle möchte ich auf Grund der Menge an Messdaten darauf hinweisen, dass es auch möglich ist die einzelnen elektrischen Größen in separaten CUxD-Geräte-Kanäle zu "sortieren". Ein/Aus ist dort ohne Funktion!
Es muss nur darauf geachtet werden, dass die Kanäle des "CUxD (40) 16-Kanal Universalsteuerung als Schalter" in den Systemvariablen und den Skripten entsprechend zugeordnet werden!!!
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. (Im CUxD-Exec werden keine Eintragungen gemacht!)
Anlegen einer CUxD (40) 16-Kanal Universalsteuerung als Schalter
(Ich nutze einen freien Kanal der angelegten Fernbedienung des Shelly EM!)
Mit jedem Kanal des CUxD-Gerätes kann dann 1 Shelly 3EM abgebildet werden.
Die Einstellungen der Kanäle:
Der Shelly 3EM besitzt drei Messkanäle an denen je ein Messwandler angeschlossen werden kann.
Achtung!: Es ist aber nur ein Relais/Schaltausgang für externe Steuerungen integriert.
Bei der Erstellung von Szenen oder Actions ist die richtige Kanalauswahl (Kanal 0) zu beachten!
SWITCH|CMD_EXEC: Häkchen setzen !
Einstellung für SWITCH|CMD_SHORT:
Einstellungen für SWITCH|CMD_LONG:
IP-Adresse des Shelly 3EM jeweils anpassen !
Damit ist der Shelly 3EM schon einsatzbereit und das Relais kann ein- und ausgeschalten werden.
____________________________________________________________
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).
© 2020 SparkyMaster
Wäre es möglich ein Schema zu erstellen? PIR->Koppelrelais->Shelly1
Natürlich ist das möglich!
Im Netzwerk des Routers schauen welcher DHCP-Bereich eingestellt ist. Wenn feste IP, dann außerhalb dieses Bereiches festlegen.
Gateway i.d.R. IP des Routers.