Die Option habe ich auch schon gefunden, nur bislang leider noch keine Zeit gefunden es zu testen.
Danke dir aber schon mal für den Hinweis, wenn 2 so denken, muss ja was dran sein.
Die Option habe ich auch schon gefunden, nur bislang leider noch keine Zeit gefunden es zu testen.
Danke dir aber schon mal für den Hinweis, wenn 2 so denken, muss ja was dran sein.
Blöde Frage aber geht das auch wenn man den Shelly nicht in die CCU eingebunden hat?
ZB per MQTT?
Vielleicht hilft dir das:
Tut mir leid da kann ich dir nicht helfen aber wenn du per MQTT Scripte verwenden kannst und http Befehle absetzen kannst sollte das gehen.
So, nach ein bisschen hin und her probieren mit den Datentypen der Variablen klappt es jetzt.
! Übertragen des aktiven Timers (in min und sec) vom Shelly 1/1PM in eine Variable
! Erstellt durch Wiesel1988
!basiert auf :
!Skript zur Leistungsaktualisierung Shelly PlugS mit Originalfirmware (by 66er V1.0)
var url = "http://192.168.178.54/relay/0?";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string Ausgabe = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("0");
!_________Auswertung des Augabestrings____________
string timer_remaining = Ausgabe.StrValueByIndex(",", 4); !Antwortstring auf Timerzeit reduzieren
string Timer_sec = timer_remaining.Substr(19,5); !Die Zeit in Sekunden auslesen
var umwandeln = 0.0 + Timer_sec; !Aus String Gleitkommezahl machen
var Timer_min = umwandeln/ 60; !Aus Sekunden Minuten machen
string umrechnung = Timer_min.ToString(2); !Aus Gleitkommezahl String wandeln
var Punkt = umrechnung.Find(".")+1; !Stelle des Punktes finden
var sec100 = umrechnung.Substr(Punkt,1); !Ausgabe der Zehntel Minuten
var min = umrechnung.Substr(0,Punkt-1); !Ausgabe der vollen Minuten
var sec_um = sec100.ToInteger() * 6; !Umrechnung der Zehntel Sekunden in normale
var sec = sec_um.ToString(); !Sekunden wieder in String wandeln
String Timer = min#" min "#sec#" s "; !String für CCU vorbereiten
!WriteLine(Timer);
!__________Übertragen in eine Variable_____________
dom.GetObject("Timer_Poolpumpe").State(Timer); !Übergabe in CCU Variable
Alles anzeigen
Viel Spaß beim nutzen,wenn es jemand braucht, ich werd mir die Variable auf die Mediola Oberfläche legen um einen Überblick zu haben, wioe lange die Pumpe noch läuft, falls meine Frau diese angemacht hat.
Hallo zusammen,
über eure Anleitung den Shelly in die CCU einzufügen bin ich bei euch gelandet und ihr habt mir bei einigen Dingen auch schon geholfen, deshalb hoffe ich ihr könnt mir hier auch helfen.
Ich habe mir über das Wochenende einen Kopf gemacht, wie ich innerhalb der CCU erfahren kann, wie lang der Timer des Shelly noch läuft. Über eine Dokumentation der http Request bin ich auf den Befehl relay/0?
Mit dem Befehl bekommt man unter anderem die verbleibende Timerdauer in Sekunden angezeigt.
Daher habe ich mir folgendes Script geschrieben:
var url = "http://192.168.178.54/relay/0?";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string Ausgabe = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("0");
!_________Auswertung des Augabestrings____________
string timer_remaining = Ausgabe.StrValueByIndex(",", 4); !Antwortstring auf Timerzeit reduzieren
string Timer_sec = timer_remaining.Substr(19,5); !Die Zeit in Sekunden auslesen
var umwandeln = 0.0 + Timer_sec; !Aus String Gleitkommezahl machen
var Timer_min = umwandeln/ 60; !Aus Sekunden Minuten machen
string umrechnung = Timer_min.ToString(); !Aus Gleitkommezahl String wandeln
integer Punkt = umrechnung.Find(".")+1; !Stelle des Punktes finden
integer sec100 = umrechnung.Substr(Punkt,1); !Ausgabe der Zehntel Minuten
integer min = umrechnung.Substr(0,Punkt-1); !Ausgabe der vollen Minuten
WriteLine(min); !Überprüfung Minuten
WriteLine(sec100);
!__________Übertragen in eine Variable_____________
dom.GetObject("Timer_Poolpumpe").State(Timer_min); !Wert in variable Schreiben
Alles anzeigen
Soweit funktioniert auch alles, nur was er absolut nicht macht ist eine Multiplikation der Variable sec100 mit 6 um wieder auf die genauen Sekunden zu kommen. Ich meine das eine Integer ganz normal multipliziert werden sollte aber es passiert leider nichts.
Ja ich weiß, dass ich durch dieses vorgehen ein Delta von 6 Sekunden habe aber bei einer Aktualisierung von 30s ist das vernachlässigbar.
Es geht bestimmt auch kürzer mit dem Script aber als "Neuling" bin ich schon glücklich, dass ich soweit gekommen bin.
Genau die Tabelle habe ich gestern Abend gesucht, weil beim stöbern bin ich schon mal drüber gestolpert.
Habe eben mal den Code angepasst:
var url1 = "http://192.168.178.54/settings/relay/0?turn~3don~26timer~3d";
var Zeit = dom.GetObject("Laufzeit_Poolpumpe").Value();
var Zeit1 = Zeit * 60;
var url = url1 # Zeit1;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_RUNS").State(1);
Da passiert nur leider nichts.
Habe jetzt noch nen anderes Problem, dass ich den Shelly nach einmaligen setzen des Timers nicht mehr in den Dauerlauf bekomme.
Gibt es einen Befehl, der den Timer wieder deaktiviert?
Moin,
habe ich gestern Abend schon versucht aber hat leider nicht hingehauen.
Die Gleichheitszeichen ist klar in was die geändert werden müssen, nur die das & Zeichen habe ich nichts gefunden.
Jo, habe mir aber eben die Syntax von dem Befehl angeschaut, der ist anders als der im Lexikon abgesehen von der HM synatx mit ~3d usw...
Mal zusammenfassend, was ich jetzt noch rausgefunden habe:
Die Änderung der Relais Nummerierung hat leider nichts gebracht.
Was allerdings geht, ist die Zeit direkt über den http Befehl zu senden. Allerdings wird dann nur der Timer gesetzt und nicht eingeschaltet, den Einschaltbefehl muss man hinterher senden, ganz wie bei Homematic.
Ich schaffe es aber trotzdem nicht den Befehl per cuxd an den Shelly zu senden.
Aktualisierung:
nennt mich do...oder so aber es läuft jetzt.
Man muss nach dem Auto off Befehl noch einen Einschaltbefehl hinter jagen, ich hatte es so verstanden, dass das automatisch mit dem Befehl passiert.
Habt tausend Dank, dass ihr mir bei meinen Gedankengängen geholfen habt. 66er und neo-v
Hier mal die funktionierende Konfiguration:
var url1 = "http://192.168.178.54/settings/relay/0?auto_off~3d";
var Zeit = dom.GetObject("Laufzeit_Poolpumpe").Value();
var Zeit1 = Zeit * 60;
var url = url1 # Zeit1;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_RUNS").State(1);
Und das dazugehörige Programm:
66er kann es sein, dass das relay nicht relay1 ist sondern 0?
Huhu, die URL hatte ich schon mit dem Befehl getestet, da wird die richtige URL zusammen gesetzt.
Denke eher das ich da ein Problem bei der Übergabe an Cuxd habe.
Den unteren Teil vorhin natürlich vorhin mit ! auskommentiert.
Hallo zusammen,
ich habe mir mal erlaubt, das obige Skript etwas abzuändern, um die Zeit über ein Variable einzufügen:
var url1 = "http://192.168.178.54/settings/relay/1?auto_off~3d";
var Zeit = dom.GetObject("Laufzeit_Poolpumpe").Value();
var Zeit1 = Zeit * 60;
var url = url1 # Zeit1;
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:1.CMD_RUNS").State(1);
Die URL wird richtig beschrieben und auch das Programm wird bei einem Tastendruck der virtuellen Fernbedienung ausgeführt, nur kommt am Shelly nichts an.
Hier mal ein Auszug aus dem Systemprotokoll
Mir sagt das leider nichts, bin was CuXd und Skripte angeht noch Grünschnabel.
Der Shelly 1PM lässt sich aber soweit steuern und auch die Leistung wird an eine Variable übertragen.
Danke euch schon mal.