Schön daß es dir gefällt. Naja solange der shelly EM auch den "total" wert ausspuckt sollte es ohne weiteres gehen. Bekommst du lediglich den Wert für Spannung und Stromstärke wird es deutlich schwieriger...
Beiträge von gmt94
-
-
Hallo Zusammen,
Dank der tollen Scripte von Marc und 66er, ist es mir gelungen, die aktuelle Leistung und den gesamten Energieverbrauch in meine CCU zu integrieren.
Nun möchte ich sehr gerne Euch allen meine kleinen Scripte zur Verfügung stellen, die zum einen den aktuellen Tagesverbrauch und zum anderen den Verbrauch von Gestern in eine Systemvariable schreiben.
Ich messe mit meinem Shelly den Verbrauch meiner Lüftungsanlage im Haus, aus dem Grund heißen die Variablen bei mir …_Lueftungsanlage_....
Zunächst müssen 3 Systemvariablen angelegt werden:
„Verbrauch_Lueftungsanlage_temp“ (in diese Variable wird jeden Tag um 00:01 der aktuelle Gesamtverbrauchswert des Shellys geschrieben, temp steht für temporär)
„Verbrauch_Lueftungsanlage_heute“ (Diese Variable zeigt den aktuellen Tagesverbrauchswert an)
„Verbrauch_Lueftungsanlage_gestern“ (Diese Variable zeigt den gestriegen Tagesverbrauchswert an)
Als erstes erstellt ihr ein Programm, dass täglich zum Zeitpunkt 00:01 aufgerufen wird.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Das Script dafür sieht wie folgt aus:
Codevar a = dom.GetObject("Shelly_Verbrauch").Value(); dom.GetObject("Verbrauch_Lueftung_temp").State(a);
„Shelly_Verbrauch“ ist die Variable, die vom Shelly übergeben wird und bei mir alle 30s aktualisiert wird. Diese wird um 00:01 in die temporäre Größe "Verbrauch_Lueftung_temp" geschrieben.
Anschließend wird ein neues Programm erstellt, welches den aktuellen Tagesverbrauch ermittelt. Dazu muss die Zeitsteuerung als Bedingung gewählt werden. Das ganze muss ganztägig laufen und als Serienmuster im Zeitintervall aufgerufen werden. Ich habe hier 5 Minuten gewählt, Da könnt ihr euch einen Wert aussuchen. Je nach Gusto, wie oft der Tageswert aktualisiert werden soll.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Das Script dafür sieht wie folgt aus:
Codeinteger a = dom.GetObject("Shelly_Verbrauch").Value(); integer b = dom.GetObject("Verbrauch_Lueftung_temp").Value(); integer c = a-b; dom.GetObject("Verbrauch_Lueftung_heute").State(c.ToString(2));
Hier wird eine Differenz aus dem aktuellen Wert der vom Shelly übergeben wird mit der Temporären Größe gebildet. Anschließend wird der Wert auf 2 Nachkommastellen gerundet und in die Variable "Verbrauch_Lueftung_heute" geschrieben.
Abschließend muss noch ein Programm erstellt werden, dass einmal täglich am Tagesende (23:59 Uhr) den Tagesverbrauchswert in den Verbrauchswert von gestern schreibt.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Das Script dafür sieht wie folgt aus:
Codevar a = dom.GetObject("Verbrauch_Lueftung_heute").Value(); dom.GetObject("Verbrauch_Lueftung_gestern").State(a.ToString(2));
Anlag zum ersten Script wird hier des Tagesverbrauch in den Verbrauch für gestern geschrieben.
Achtung bei Stromausfall oder Netztrennung wird der Gesamtverbrauch im Shelly auf 0 gesetzt. D.h. der Shelly wird in diesem Fall den aktuellen Tageswert falsch berechnen. In dem Fall müsste die Scripte einmal von Hand ausgeführt werden.
Das gleiche gilt auch beim Erstellen dieser Scripte, da ja immer erst zum Tageswechsel die Systemvariablen mit sinnvollen Werten beschrieben werden.
So ich hoffe, dass irgendjemand etwas mit diesen kleinen Scripten anfangen kann.
Euch noch einen schönen 2. Advent.
Grüße Henning
-
Nochmals vielen Dank!
Dann kann ich ja jetzt eine Großbestellung für meine ganzen Verbraucher bestellen und in meine Hausautomation einbinden.
Und bei Fragen und Problemen, weiß ich ja an wen ich mich vertrauensvoll wenden kann!
-
So....
es scheint zu funktionieren. Mensch war das eine Geburt. Ein riesen Dankeschön dafür.
Jetzt habe ich nur noch eine Frage....Warum kann der Verbrauch in der App zum Verbrauch in Homematic abweichen?
Ich habe die Cloud erst später angeschalten. Speichert der Shelly auch ohne Cloud die Daten auf sich selber ab?
Grüße Henning
-
Also "Shelly_Verbrauch" habe ich glaube ich erst nach Programmerstellung erstellt.
Bin mir aber nicht mehr sicher... ist ja immerhin schon knapp 2h her.
-
Das Skript scheint zu laufen.
Noch ein letzter Test zur Sicherheit:
Code
Alles anzeigen!Skript zur Gesamt-Verbrauchsaktualisierung Shelly1PM mit Originalfirmware © by 66er V0.1) !Raumbezeichnung (nur zur Orientierung, ggf anpassen) !****Abfrage des Shelly1PM***** !In der folgenden Zeile IP des Shelly1PM anpassen! var url = "http://192.168.178.49/status"; !In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801001:14) dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'"); dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); string t = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); dom.GetObject("CUxD.CUX2801001:1.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 e = (s.StrValueByIndex (":",1).RTrim ("}]")); WriteLine(e); !*****Umrechnung**** ! WriteLine(e); real e1= e.ToFloat(); ! WriteLine(e1); real e2=e1/60000; WriteLine(e2); } } WriteLine ("Ende Berechnung") !**** Variable setzen**** !Variablennamen anpassen (hier: Shelly1PM_Gesamtleistung) dom.GetObject("Shelly_Verbrauch").State(e2); !Ende Skript
Code{"wifi_sta":{"connected":true,"ssid":"FRITZ!Box 7580_TaH","ip":"192.168.178.49","rssi":-44},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"19:22","serial":203,"has_update":false,"mac":"A4CF12BA472B","relays" :[{"ison":true, "has_timer":false,"overpower":false}],"meters":[{"power":65.07,"is_valid":true,"timestamp":1575660157,"counters":[65.787, 65.050, 65.654],"total":210238}],"inputs":[{"input":0}],"ext_temperature":{},"temperature":42.31,"overtemperature":false,"tmp":{"tC":42.31,"tF":108.16, "is_valid":"true"},"update":{"status":"idle","has_update":false,"new_version":"20191127-095910/v1.5.6@0d769d69","old_version":"20191127-095910/v1.5.6@0d769d69"},"ram_total":50704,"ram_free":37212,"fs_size":233681,"fs_free":172437,"uptime":276535} {"wifi_sta":{"connected":true,"ssid":"FRITZ!Box 7580_TaH","ip":"192.168.178.49","rssi":-45},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"19:22","serial":203,"has_update":false,"mac":"A4CF12BA472B","relays" :[{"ison":true, "has_timer":false,"overpower":false}],"meters":[{"power":65.07,"is_valid":true,"timestamp":1575660157,"counters":[65.787, 65.050, 65.654],"total":210238}],"inputs":[{"input":0}],"ext_temperature":{},"temperature":42.31,"overtemperature":false,"tmp":{"tC":42.31,"tF":108.16, "is_valid":"true"},"update":{"status":"idle","has_update":false,"new_version":"20191127-095910/v1.5.6@0d769d69","old_version":"20191127-095910/v1.5.6@0d769d69"},"ram_total":50704,"ram_free":37212,"fs_size":233681,"fs_free":172437,"uptime":276536} 210238 3.503967 Ende Berechnung
-
Bitte das Ganze wiederholen mit diesem Code:
Code
Alles anzeigen!Skript zur Gesamt-Verbrauchsaktualisierung Shelly1PM mit Originalfirmware © by 66er V0.1) !Raumbezeichnung (nur zur Orientierung, ggf anpassen) !****Abfrage des Shelly1PM***** !In der folgenden Zeile IP des Shelly1PM anpassen! var url = "http://192.168.178.49/status"; !In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801001:14) dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'"); dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); string t = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); dom.GetObject("CUxD.CUX2801001:1.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 e = (s.StrValueByIndex (":",1).RTrim ("}]")); WriteLine(e); !*****Umrechnung**** ! WriteLine(e); real e1= e.ToFloat(); ! WriteLine(e1); real e2=e1/60000; ! WriteLine(e2); } } ! WriteLine ("Ende Berechnung") !**** Variable setzen**** !Variablennamen anpassen (hier: Shelly1PM_Gesamtleistung) dom.GetObject("Shelly_Verbrauch").State(e2); !Ende Skript
Die Ausgabe wieder hier posten.
Code{"wifi_sta":{"connected":true,"ssid":"FRITZ!Box 7580_TaH","ip":"192.168.178.49","rssi":-43},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"19:18","serial":203,"has_update":false,"mac":"A4CF12BA472B","relays" :[{"ison":true, "has_timer":false,"overpower":false}],"meters":[{"power":66.19,"is_valid":true,"timestamp":1575659886,"counters":[65.007, 65.741, 65.224],"total":209976}],"inputs":[{"input":0}],"ext_temperature":{},"temperature":42.38,"overtemperature":false,"tmp":{"tC":42.38,"tF":108.29, "is_valid":"true"},"update":{"status":"idle","has_update":false,"new_version":"20191127-095910/v1.5.6@0d769d69","old_version":"20191127-095910/v1.5.6@0d769d69"},"ram_total":50704,"ram_free":37212,"fs_size":233681,"fs_free":172437,"uptime":276264} {"wifi_sta":{"connected":true,"ssid":"FRITZ!Box 7580_TaH","ip":"192.168.178.49","rssi":-44},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"19:18","serial":203,"has_update":false,"mac":"A4CF12BA472B","relays" :[{"ison":true, "has_timer":false,"overpower":false}],"meters":[{"power":66.19,"is_valid":true,"timestamp":1575659886,"counters":[65.007, 65.741, 65.224],"total":209976}],"inputs":[{"input":0}],"ext_temperature":{},"temperature":42.38,"overtemperature":false,"tmp":{"tC":42.38,"tF":108.29, "is_valid":"true"},"update":{"status":"idle","has_update":false,"new_version":"20191127-095910/v1.5.6@0d769d69","old_version":"20191127-095910/v1.5.6@0d769d69"},"ram_total":50704,"ram_free":37212,"fs_size":233681,"fs_free":172437,"uptime":276264} 209976
-
Stop!
Gerade un Deinem Programm in#22 einen Fehler gesehen:
Im WENN bitte auf "bei Änderung" korrigieren und testen.
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. -
Code
{"wifi_sta":{"connected":true,"ssid":"FRITZ!Box 7580_TaH","ip":"192.168.178.49","rssi":-44},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"18:54","serial":203,"has_update":false,"mac":"A4CF12BA472B","relays" :[{"ison":true, "has_timer":false,"overpower":false}],"meters":[{"power":65.03,"is_valid":true,"timestamp":1575658466,"counters":[65.686, 65.493, 64.962],"total":208405}],"inputs":[{"input":0}],"ext_temperature":{},"temperature":42.02,"overtemperature":false,"tmp":{"tC":42.02,"tF":107.63, "is_valid":"true"},"update":{"status":"idle","has_update":false,"new_version":"20191127-095910/v1.5.6@0d769d69","old_version":"20191127-095910/v1.5.6@0d769d69"},"ram_total":50704,"ram_free":37212,"fs_size":233681,"fs_free":172437,"uptime":274846} {"wifi_sta":{"connected":true,"ssid":"FRITZ!Box 7580_TaH","ip":"192.168.178.49","rssi":-44},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"18:54","serial":203,"has_update":false,"mac":"A4CF12BA472B","relays" :[{"ison":true, "has_timer":false,"overpower":false}],"meters":[{"power":65.03,"is_valid":true,"timestamp":1575658467,"counters":[65.686, 65.493, 64.962],"total":208405}],"inputs":[{"input":0}],"ext_temperature":{},"temperature":42.02,"overtemperature":false,"tmp":{"tC":42.02,"tF":107.63, "is_valid":"true"},"update":{"status":"idle","has_update":false,"new_version":"20191127-095910/v1.5.6@0d769d69","old_version":"20191127-095910/v1.5.6@0d769d69"},"ram_total":50704,"ram_free":36900,"fs_size":233681,"fs_free":172437,"uptime":274846}
-
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Code
Alles anzeigen!Skript zur Gesamt-Verbrauchsaktualisierung Shelly1PM mit Originalfirmware © by 66er V0.1) !Raumbezeichnung (nur zur Orientierung, ggf anpassen) !****Abfrage des Shelly1PM***** !In der folgenden Zeile IP des Shelly1PM anpassen! var url = "http://192.168.178.49/status"; !In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801001:14) dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'"); dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); string t = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); dom.GetObject("CUxD.CUX2801001:1.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 e = (s.StrValueByIndex (":",1).RTrim ("}]")); ! WriteLine(e); !*****Umrechnung**** ! WriteLine(e); real e1= e.ToFloat(); ! WriteLine(e1); real e2=e1/60000; ! WriteLine(e2); } } ! WriteLine ("Ende Berechnung") !**** Variable setzen**** !Variablennamen anpassen (hier: Shelly1PM_Gesamtleistung) dom.GetObject("Shelly_Verbrauch").State(e2); !Ende Skript
-
Anbei die Screenshots....
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Code
Alles anzeigen!Skript zur Gesamt-Verbrauchsaktualisierung Shelly1PM mit Originalfirmware © by 66er V0.1) !Raumbezeichnung (nur zur Orientierung, ggf anpassen) !****Abfrage des Shelly1PM***** !In der folgenden Zeile IP des Shelly1PM anpassen! var url = "http://192.168.178.49/status"; !In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801001:14) dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'"); dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); string t = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); dom.GetObject("CUxD.CUX2801001:1.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 e = (s.StrValueByIndex (":",1).RTrim ("}]")); ! WriteLine(e); !*****Umrechnung**** ! WriteLine(e); real e1= e.ToFloat(); ! WriteLine(e1); real e2=e1/60000; ! WriteLine(e2); } } ! WriteLine ("Ende Berechnung") !**** Variable setzen**** !Variablennamen anpassen (hier: Shelly1PM_Gesamtleistung) dom.GetObject("Shelly_Verbrauch").State(e2); !Ende Skript
-
So habe es ausprobiert. Leider wird die Systemvariable nicht im Takt des Timers aktualisiert.
Besser gesagt, sie wird gar nicht aktualisiert.
Ich habe in der "Wenn" Funktion "Timer Event" und "Timer Get" bereits ausprobiert. Beides leider ohne Funktion.
Welche Screenshots brauchst du?
Danke! Henning
-
Hey 66er,
Vielen Dank. Wenn ich gleich Zuhause bin werde ich es sofort Mal ausprobieren.
Grüße Henning
-
Ist der Shelly mit Benutzer und Passwort geschützt?
Wie meinst du das? Also um mich bei der App anzumelden brauche ich meine E-Mail und das PW. Kann ich den shelly irgendwo nochmals schützen?
-
läuft...... Großes Dankeschön an den superschnellen Support!
-
Hallo zusammen
bitte entschuldigt mich, dass ich euch schon wieder mit solch belanglosen Dingen störe. Ich habe nach der Anleitung von 66er hier im Forum versucht den Schaltzustand des Schalters aktualisieren zu lassen. Sobald ich jedoch per Shelly App abschalte wird der Status nicht aktualisiert. Die Zeit wann der Schalter aktualisiert wird, wird auch nicht mehr in den Schrittweiten des CuxD aktualisiert. Das Programm jedoch läuft im Takt durch und immer weiter. Anbei wie gewünscht mein der Script-Code und die Screenshots.
Ich lasse den Timer alle 10 Sekunden laufen für die Testphase, einfach nur das es schneller geht.
IP-Adresse Shelly: 192.168.178.49
IP-Adresse Rasperry: 192.168.178.24
CuxD Timer CUX2800001:1
CuxD Schalter CUX4000001:1
CuxD Exec CUX2801001:1
Code
Alles anzeigen!Skript zur Statusaktualisierung Shelly1 mit Originalfirmware (c) by 66er V1.1 !Raumbezeichnung var url = "http://192.168.178.49/relay/0/status"; dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'"); dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1); string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State(); dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("0"); !WriteLine(Antwort); 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); var zustand = dom.GetObject("CUxD.CUX4000001:1.STATE").State(); !WriteLine(zustand); if ((daten == "true,") && (zustand != true) ) {dom.GetObject("CUxD.CUX4000001:1.SET_STATE").State(1); !WriteLine("if ON"); } if ((daten == "false") && (zustand != false)) { dom.GetObject("CUxD.CUX4000001:1.SET_STATE").State(0); !WriteLine("if off"); } daten = "0";
Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Der Inhalt kann nicht angezeigt werden, da Sie keine Berechtigung haben, diesen Inhalt zu sehen. Vielen Dank für Eure Unterstützung!
-
Das wäre super. Vielen Dank schonmal dafür.
Es eilt nicht. Auf meiner to Do Liste stehen gerade noch so viele punkte, dass es dort nicht auf einen Tag oder eine Woche ankommt.
Grüße Henning
-
Würde Dir der Wert "Total" weiterhelfen?
Ja der wäre super, den kann man dann ja wie du sagst in eh umrechnen.
-
Also, der shelly hängt zurzeit an meiner Lüftungsanlage und ich würde gerne wissen was das Ding so über den Tag wegzieht.
Für weitere shelly sehe ich dann mein Kühlschrank, Aquarium, Gefrierschrank, Kläranlage, usw.
-
Naja,
es gibt im Antwortstring auf IP/status einen Wert für :
Den kann man natürlich in KWh umrechnen.
Nachteil:
Nach einem Stromausfall ist der wieder "0". D.h. Du müßtest Dich um die Archivierung und ggf. Aufaddierung kümmern.
Hast Du Dir inzwischen mal das CUxD-Wrapper-Device näher angeschaut
Ob das für die Anwendung eventuell passt?
Und wie bekomme ich den Antwort String in meine ccu?
Das ist hier alles noch so Neuland für mich.
Zur Zeit suche ich nur Scripte im netz und Versuche die auf meine Sachverhalte anzupassen. Nur so richtig klar was ich da mache ist mir noch nicht.