Lege bitte mal zur Verifizierung das CuxD-Gerät neu an, aber mit "Control" = Schalter. Dann sollte es passen, wenn ich nicht irre.
Vielen Dank für den Tipp. Jetzt sieht alles so aus, wie es soll.
MFG
Lege bitte mal zur Verifizierung das CuxD-Gerät neu an, aber mit "Control" = Schalter. Dann sollte es passen, wenn ich nicht irre.
Vielen Dank für den Tipp. Jetzt sieht alles so aus, wie es soll.
MFG
! Skript V1.0.2 zur Einbindung Shelly GAS mit Originalfirmware in Homematic (c) 2021 by SparkyMaster
! angepasstes Originalskript by @66er
! entwickelt und getestet auf Shelly-Motion-Firmware "1.9.0"
! Versionsdatum: 23.01.2021
! Jede Funktion optional aktivierbar, automatische Homematic-SV-Erstellung, Onlinestatus-Prüfung integriert
! BITTE BEACHTEN:
! Dieses Skript legt ggf. selbstständig zusätzliche Systemvariablen auf Deiner Homematic-Zentrale an!
! Das vermeidet Inkonsistenzen und eine temporäre Blockade der CCU durch das Skript.
! Ausserdem erspart es Dir das manuelle Anlegen benötigter Systemvariablen.
! Wer das nicht möchte, kann dieses Skript leider nicht nutzen!
! Die Nutzung des Skriptes erfolgt auf eigenes Risiko.
! Aus der Nutzung entsteht kein Rechtsanspruch auf Suppport oder Fehlerbeseitigung durch die Autoren.
! Die Autoren haftet nicht für eventuelle Folgen der Nutzung auf der Homematic-Zentrale des Nutzers.
! Das Skript ist ausführlich getestet und sollte problemlos funktionieren.
!Standort: HWR (kann angepasst werden)
!**** SETUP ******** SETUP ******** SETUP ******** SETUP ***
! ACHTUNG: Beim Anpassen der Adressen keine "" löschen!
! Setup Shelly GAS
var shgip = "192.168.178.81" ; ! IP des Shelly GAS anpassen
var shgname = "ShellyGas" ; ! Name des Shelly GAS anpassen (daraus werden ggf. automatisch weitere Variablennamen erzeugt
var shgrl = "N" ; ! Ist Resrict Login im Shelly aktiv, dann auf "J" setzen
var shgbn = "DeinBenutzername" ; ! Ist Restrict login auf J, dann Benutzername anpassen
var shgpw = "DeinPasswort" ; ! Ist Restrict login auf J, dann Passwort anpassen, keine Sonderzeichen
! Setup der CUxD-GERÄTE
var execshg = "CUxD.CUX2801013:1"; ! Adresse und Kanal des CUxD-Exec-Device angeben
var shgcuxd = "CUxD.CUX4000010:1" ; ! Adresse und Kanal des CUxD-Device für den Shelly GAS anpassen
! Setup Online-Status
var shgonl = "J" ; ! Variable für Onlinezustandsüberwachung prüfen, ggf anlegen, falls nicht gewünscht, auf "N" setzen
var shgonlp = "J" ; ! Onlineprüfung durchführen, falls nicht gewünscht, auf "N" setzen
! Setup Aktualisierungsumfang der Werte des Shelly GAS
var shgppm = "J" ; ! Status für Gaskonzentration auswerten, wenn nicht gewünscht auf "N" setzen
var shgal = "J" ; ! Status für Alarm auswerten, wenn nicht gewünscht auf "N" setzen
!****ENDE SETUP ********ENDE SETUP ********ENDE SETUP ******
!*****Ab hier NICHTS MEHR ÄNDERN ***************************
! Variable für Onlinestatus prüfen,ggf.anlegen
if (shgonl == "J") {
var shgonln = shgname + "_Online-Status" ;
WriteLine(shgonln) ;
string sName= (""#shgonln#""); ! Onlinestatus
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly GAS");
svObj.ValueUnit("");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtBinary);
svObj.ValueSubType(istBool);
svObj.ValueName0("Offline");
svObj.ValueName1("Online");!SCN=SHG010SM
svObj.State (true);
dom.RTUpdate(0);
}
}
! Onlineabfrage und setzen des Status
if ( shgonlp == "J" ) {
string stderr;
string stdout;
integer Status;
system.Exec("ping -c 1 '"#shgip#"'", &stdout, &stderr);
Status = stdout.Find("ms");
WriteLine(Status);
if (((shgonl ) == "J" ) && ((Status) == -1)) {
WriteLine("Shelly GAS ist offline");
dom.GetObject (""#shgonln#"").State(0);
quit; ! Programmabbruch bei Shelly offline
}
if ((shgonl ) == "J" ) {
dom.GetObject (""#shgonln#"").State(1);
WriteLine("Shelly GAS ist online");
}
}
!***********************************************************
! Abfrage
var url = "http://" + shgip + "/status" ;
WriteLine(url);
if (shgrl == "J") {
var url = "http://" + shgbn + ":" + shgpw + "@" +shgip + "/status" ;
WriteLine(url);
}
dom.GetObject(""#execshg#".CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject(""#execshg#".CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject(""#execshg#".CMD_RETS").State();
dom.GetObject(""#execshg#".CMD_SETS").State("0");
WriteLine(Antwort);
!**********************************************************
!********************** Auswertungen
!Gaskonzentration in ppm
if (shgppm == "J") {
string shgppmn = shgname + "_Konzentration";
string sName= (""#shgppmn#"");
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly GAS");
svObj.ValueUnit("ppm");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtFloat);
svObj.ValueSubType(istGeneric);
svObj.ValueMin(0);
svObj.ValueMax(65000);
svObj.State (0); ! SCN=SHG010SM
dom.RTUpdate(0);
}
string t = Antwort;
string s;
foreach (s,t.Split (",")) {
if (s.LTrim ("{").StartsWith ('"concentration"')) {
string e = (s.StrValueByIndex (":",2).RTrim (","));
WriteLine(e);
}
}
!ppm-Angabe in der Systemvariablen setzen
dom.GetObject(""#shgppmn#"").State(e);
WriteLine("Konzentration in ppm geschrieben.");
}
! Alarm
if (shgal == "J") {
string shgaln = shgname + "_Alarm";
WriteLine(shgaln);
string sName= (""#shgaln#""); ! Alarm
if (!dom.GetObject (ID_SYSTEM_VARIABLES).Get (sName)) {
object svObj = dom.CreateObject(OT_VARDP,sName);
svObj.DPInfo("autom. angelegt durch Skript Shelly GAS");
svObj.ValueUnit("");
dom.GetObject (ID_SYSTEM_VARIABLES).Add(svObj);
svObj.ValueType(ivtInteger);
svObj.ValueSubType(istEnum);
svObj.ValueList("none;mild;heavy;test");
svObj.State (0); !. Zustand der Sysvar nach dem Anlegen
dom.RTUpdate(0); !SCN=SHG100SM
}
! Abfrage Alarm
string lu = Antwort;
string part; string code;string list;integer collect = 1;
foreach (part, lu.Split("{")){
collect = part.Find('"alarm_state"');
if (collect>-1){
code = ((part.StrValueByIndex(",",2)).StrValueByIndex(":",1));
code = code.Substr(1, code.Length()-3);
list = list#code#"/";
}
}
WriteLine(list);
real wert;
if(list == "test/") {
wert = 3;
}
if(list == "heavy/") {
wert = 2;
}
if(list == "mild/") {
wert = 1;
}
if(list == "none/") {
wert = 0;
}
dom.GetObject(""#shgaln#"").State(wert);
}
WriteLine("Skript V1.0.2 beendet");
!Ende Skript
Alles anzeigen
Guten Abend!
Hab mir nun auch einen Shelly Gasmelder zugelegt. Die Einbindung laut Anleitung hat auch soweit ohne Probleme funktioniert. Leider sieht das Gerät allerdings wie auf dem Bild aus.
Wie bekomme ich die markierten Zeilen weg?
Was müsste man abändern, um das Skript, für den Gesamtverbrauch, auf einem Shelly Plug S zum laufen zu bringen?
MFG Leo
Sehr cool, danke!
Wusste doch, dass meine Waschmaschine nicht sooooo sparsam sein kann.
Ich habe jetzt nochmal eine Probemessung gemacht. Einmal mit dem Shelly Plus 1PM und mit einer TP-Link Steckdose.
Messung laut TP-Link: 0,15kWh
Messung laut Shelly Cloud Oberfläche: 0,21kWh
Messung laut Shelly URL: ca. 200.000 Wmin
Messung laut HM Skript: 0,00kWh
Rechnung laut Skript: ca. 0,0033333333
Meinst wirklich das die 60000 passen?
Ein paar Watt hin oder her sind mir schnuppe, aber so extrem?
Dann passt es ja tatsächlich. Mir kommt das so wenig vor...
Grüße!
Ich habe nun das Skript für den Gesamtverbrauch mal eine Woche laufen lassen. Dabei habe diverse Waschladungen mit 30°C und 40°C durchlaufen lassen. Leider scheint aber die Anzeige des Gesamtverbrauches nicht zu stimmen. Die momentane Leistungsanzeige scheint zu stimmen, wenn ich mit dem Wert in der Shelly Cloud vergleiche.
Laut Shelly Cloud habe ich zum Beispiel 1,3kWh verbraucht, laut Skript sind es aber nur 0,03kWh...
An was kann das liegen?
MFG
Versuch bitte mal.
Die Variable erstellen und im Skript anpassen nicht vergessen!
Skript läuft und Zähler rennt.
Danke dafür und Respekt für die schnelle Umsetzung
Da ich allerdings keinen Dimmer2 habe, bräuchte
{"wifi_sta":{"connected":true,"ssid":"FRITZ!Box BASIS","ip":"192.168.178.74","rssi":-60},"cloud":{"enabled":true,"connected":true},"mqtt":{"connected":false},"time":"17:57","unixtime":1661788673,"serial":13778,"has_update":false,"mac":"349454729E3A","cfg_changed_cnt":7,"actions_stats":{"skipped":0},"lights":[{"ison":false,"source":"http","has_timer":false,"timer_started":0,"timer_duration":0,"timer_remaining":0,"mode":"white","brightness":20,"transition":0}],"meters":[{"power":0.00,"overpower":0.00,"is_valid":true, "timestamp":1661795873,"counters":[0.000, 0.000, 0.000],"total":2535}],"inputs":[{"input":0,"event":"","event_cnt":37},{"input":0,"event":"","event_cnt":0}],"tmp":{"tC":43.52,"tF":110.34, "is_valid":true},"calibrated":true,"calib_progress":100,"calib_status":0,"calib_running":0,"wire_mode":0,"forced_neutral":false,"overtemperature":false,"loaderror":0,"overpower":false,"debug":0,"update":{"status":"idle","has_update":false,"new_version":"20211109-131033/v1.11.7-g682a0db","old_version":"20211109-131033/v1.11.7-g682a0db","beta_version":"20220407-091350/v1.11.8-rc2-33-g1f2d62e55-dimmer2-zxross-timer-improved"},"ram_total":48864,"ram_free":34932,"fs_size":233681,"fs_free":117468,"uptime":603476}
Grüße!
Habe das Skript eben mit in mein Programm genommen und was soll ich sagen, es funktioniert einfach problemlos!
Vielen Dank auf jeden Fall für die super Hilfe.
PS: Steinigt mich nicht aber, wäre es möglich dieses Skript für den Dimmer2 anzupassen?
Top, bin gespannt. Dann war das jetzt genug Aufregung.
Einen schönen Abend noch!
Sorry meinserseits.
kein Ding...
Wie stehen die Chancen, dass es in nächster Zeit so ein Skript geben wird?
Also gibt es ein solches Skript NOCH gar nicht?
Klarer Fall von "aneinander vorbei geredet"
Gesamtverbrauch in kWh...
Das Skript hast du doch selbst gepostet, nur eben für den 1pm
Die Messung der Momentanleistung funktioniert ja mit dem Plus Skript
Kannst Du Dich bitte mal konzentrieren und entscheiden?
Wieso bist Du jetzt wieder im Shelly1PM Skript unterwegs!?
Es soll doch um den Plus1PM gehen!
Ich bin sowas von konzentriert... Das Plus1PM Skript ist doch nur für die aktuelle Leistung und Statusaktualisierung!
Ich brauche das Gesamtverbrauchskript für den Plus!
Jetzt noch im Skript anpassen und dieses dann unter "Skript testen" ausführen bitte.
Ergebnis posten.
Im Skript wird doch nirgends danach gefragt oder bin ich blind?
!Skript zur Gesamt-Verbrauchsaktualisierung Shelly1PM mit Originalfirmware ©2019 by 66er V1.2.1)
!Raumbezeichnung (nur zur Orientierung, ggf anpassen)
!****Abfrage des Shelly1PM*****
!In der folgenden Zeile IP des Shelly1PM anpassen!
var url = "http://192.168.178.77/rpc/Shelly.GetStatus";
!In den folgenden Zeilen die CUxD-Exec-Kanal anpassen (hier: 2801001:1)
dom.GetObject("CUxD.CUX2801010:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801010:1.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801010:1.CMD_RETS").State();
string t = dom.GetObject("CUxD.CUX2801010:1.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801010: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: Waschmaschine_Verbrauch)
dom.GetObject("Waschmaschine_Verbrauch").State(e2);
!Ende Skript
Alles anzeigen
Benenne bitte mal Deinen Gerätenamen im CUxD und im Setup um, z.B. Waschmaschine_1.
Ich vermute, das Problem ist das :1 im Namen.
Das Gerät heißt nur "Waschmaschine"
PS:
Den Hinweis, dass Restrict-Login aktuell nicht aktiviert werden darf, hast Du beachtet?
Sollte nicht eingeschaltet sein, ich kann den Shelly ja normal (ohne Benutzernamen und Passwort) per Befehl ansteuern