Shelly1 mit Original-Firmware + CUxD inkl. Status
Moderator: Co-Administratoren
-
- Beiträge: 3083
- Registriert: 23.08.2015, 11:06
- System: CCU
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 111 Mal
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo,
natürlich kannst Du auch die Zeitsteuerung verwenden. Wichtig ist ja nur, dass das Programm getriggert wird.
Wenn Programme mit CUxD-Timer beim WENN Timerevent nicht triggern, so kann man auch das Timerget benutzen. So war es bei mir im anderen Thema.
(Ich habe bislang auch noch nicht verstanden, warum Timerevent mal geht und mal nicht. )
Habe den Hinweis auf die Alternative im 1.Post ergänzt.
LG
Stefan
natürlich kannst Du auch die Zeitsteuerung verwenden. Wichtig ist ja nur, dass das Programm getriggert wird.
Wenn Programme mit CUxD-Timer beim WENN Timerevent nicht triggern, so kann man auch das Timerget benutzen. So war es bei mir im anderen Thema.
(Ich habe bislang auch noch nicht verstanden, warum Timerevent mal geht und mal nicht. )
Habe den Hinweis auf die Alternative im 1.Post ergänzt.
LG
Stefan
-
- Beiträge: 19
- Registriert: 03.05.2019, 09:14
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo, ich weis nicht wo der Fehler ist aber in meiner CCu3 wird der Status vom Shelly 1 nicht geändert.
-
- Beiträge: 14164
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 585 Mal
- Danksagung erhalten: 1500 Mal
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Das erste "if" im Script ist falsch. Die Klammern (die runden und die geschweiften) müssen genau so gesetzt werden wie im zweiten "if" und beim "true" ist ein Komma zu viel. Wobei das Komma wohl der eigentliche Fehler ist. Das andere dürfte funktionell identisch sein. Diese Tippfehler sind auch im Script auf der ersten Seite.
Code: Alles auswählen
if ((daten == "true") && (zustand != true)) {
dom.GetObject("CUxD.CUX4000005:1.SET_STATE").State(1);
!WriteLine("if ON");
}
Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
-
- Beiträge: 3083
- Registriert: 23.08.2015, 11:06
- System: CCU
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 111 Mal
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo zusammen,
ich habe das Skript mit dem auf meinem Charly verglichen und es läuft dort genau so fehlerfrei.
Das Komma darf nicht entfernt werden, weil es Teil des ausgelesenen Strings (5 Zeichen) ist!
@naumannsascha:
Triggere bitte im Programm mal nicht auf "Timerevent" sondern:
LG
Stefan
ich habe das Skript mit dem auf meinem Charly verglichen und es läuft dort genau so fehlerfrei.
Das Komma darf nicht entfernt werden, weil es Teil des ausgelesenen Strings (5 Zeichen) ist!
@naumannsascha:
Triggere bitte im Programm mal nicht auf "Timerevent" sondern:
Code: Alles auswählen
WENN Timer Im Wertebereich <1 BEI ÄNDERUNG AUSLÖSEN:
Stefan
-
- Beiträge: 14164
- Registriert: 08.05.2013, 23:33
- System: Alternative CCU (auf Basis OCCU)
- Wohnort: Nordwürttemberg
- Hat sich bedankt: 585 Mal
- Danksagung erhalten: 1500 Mal
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
OIC. Fünf Buchstaben wegen "false".
Gruß Xel66
-------------------------------------------------------------------------------------------
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
524 Kanäle in 146 Geräten und 267 CUxD-Kanäle in 34 CUxD-Geräten:
343 Programme, 334 Systemvariablen und 183 Direktverknüpfungen,
RaspberryMatic Version: 3.65.11.20221005 + Testsystem: CCU2 2.61.7
-------------------------------------------------------------------------------------------
Einsteigerthread, Programmlogik-Thread, WebUI-Handbuch
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo, leider bekomme ich nicht die Änderungen des Schaltzustandes angezeigt.
Die Aktualisierung läuft durch....
Wenn ich über die Shelly App den Schaltzustand ändere, erkennt die Homematic es nicht.
Wo liegt mein Fehler?
!Skript zur Statusaktualisierung Shelly1 mit Originalfirmware (by 66er V1.0)
!Raumbezeichnung
var url = "http://192.168.178.36/relay/0/status";
dom.GetObject("CUxD.CUX2800001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2800001:2.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject("CUxD.CUX2800001:2.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.CUX2801001:2.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true)) {
dom.GetObject("CUxD.CUX2801001:2.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX2801001:2.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
Die Aktualisierung läuft durch....
Wenn ich über die Shelly App den Schaltzustand ändere, erkennt die Homematic es nicht.
Wo liegt mein Fehler?
!Skript zur Statusaktualisierung Shelly1 mit Originalfirmware (by 66er V1.0)
!Raumbezeichnung
var url = "http://192.168.178.36/relay/0/status";
dom.GetObject("CUxD.CUX2800001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2800001:2.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject("CUxD.CUX2800001:2.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.CUX2801001:2.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true)) {
dom.GetObject("CUxD.CUX2801001:2.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX2801001:2.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
-
- Beiträge: 3083
- Registriert: 23.08.2015, 11:06
- System: CCU
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 111 Mal
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo,loewe.242 hat geschrieben: ↑05.05.2019, 00:08...
Wo liegt mein Fehler?
!Skript zur Statusaktualisierung Shelly1 mit Originalfirmware (by 66er V1.0)
!Raumbezeichnung
var url = "http://192.168.178.36/relay/0/status";
dom.GetObject("CUxD.CUX2800001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2800001:2.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject("CUxD.CUX2800001:2.CMD_SETS").State("0");
!WriteLine(Antwort);
...
Fehler ist rot markiert.
(Mach eine 2 draus)
Ich übernehme keine Haftung für von mir gegebene Antworten, Tipps und veröffentlichte Projekte! Jeder ist für sich selbst verantwortlich! Arbeiten an 230V sind von einer Elektrofachkraft auszuführen!
Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps
Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly
Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos
>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker
Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen
Homematic in Betrieb seit 15.08.2015, > 60 HM-Komp. | 3x USV APC ES400 | Visualisierung auf ioBroker | Audio: Home24-Apps
Raspberrymatic auf DS923+ in VMM (Produktivsystem1)
Rollläden, SSD, Wetter, Logging, Licht, RM, Sonos, Shelly
Raspberrymatic auf DS923+ in VMM (Produktivsystem2 )
Erweiterung GMA, Heizung, Licht, Shelly, SSD, Sonos
>100 Shelly-Geräte an Homematic | CCU2 endgültig in Rente | 3 Raspis als Rückfallebene für Raspimatic und ioBroker
Shelly an Homematic | Infrarot-Heizungssteuerung | Fensteröffnungszeit überwachen
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo, vielen Dank für deine schnelle Antwort! Leider war das aber nicht die Ursache, es war auch nicht das falsche Cuxd 2801001:2. Gerät
Wenn ich die erste Befehlszeile im Browser eingebe {"ison":true, "has_timer":false} und schalte den Shelly1 direkt im Browser über die IP {"ison":false, "has_timer":false}
ändert sich der Status "ison" von false auf true.
Leider bleibt die Homematic auf "Ein" bzw "Aus"
!Skript zur Statusaktualisierung Shelly1 mit Originalfirmware (by 66er V1.0)
!Raumbezeichnung
var url = "http://192.168.178.89/relay/0/status";
dom.GetObject("CUxD.CUX2800001:4.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2800001:4.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2800001:4.CMD_RETS").State();
dom.GetObject("CUxD.CUX2800001:4.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.CUX2801001:1.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true)) {
dom.GetObject("CUxD.CUX2801001:1.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX2801001:1.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
Vielen Dank
Alex
Wenn ich die erste Befehlszeile im Browser eingebe {"ison":true, "has_timer":false} und schalte den Shelly1 direkt im Browser über die IP {"ison":false, "has_timer":false}
ändert sich der Status "ison" von false auf true.
Leider bleibt die Homematic auf "Ein" bzw "Aus"
!Skript zur Statusaktualisierung Shelly1 mit Originalfirmware (by 66er V1.0)
!Raumbezeichnung
var url = "http://192.168.178.89/relay/0/status";
dom.GetObject("CUxD.CUX2800001:4.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2800001:4.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2800001:4.CMD_RETS").State();
dom.GetObject("CUxD.CUX2800001:4.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.CUX2801001:1.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true)) {
dom.GetObject("CUxD.CUX2801001:1.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX2801001:1.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
Vielen Dank
Alex
-
- Beiträge: 3083
- Registriert: 23.08.2015, 11:06
- System: CCU
- Hat sich bedankt: 116 Mal
- Danksagung erhalten: 111 Mal
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Hallo,
ich beziehe mich auf die erste Version Deiner Fassungen des Skriptes!
Du kannst nicht auf einem anderen Kanal die Antwort abfragen, als auf dem Sendekanal.
Und jetzt habe ich nochmals drüber geschaut und Deinen Fehler Nr.2 gefunden.:
LG
Stefan
ich beziehe mich auf die erste Version Deiner Fassungen des Skriptes!
Meine rote Markierung war Dein Fehler Nr.1.
Du kannst nicht auf einem anderen Kanal die Antwort abfragen, als auf dem Sendekanal.
Und jetzt habe ich nochmals drüber geschaut und Deinen Fehler Nr.2 gefunden.:
Falsches Gerät!loewe.242 hat geschrieben: ↑05.05.2019, 20:05
...
var zustand = dom.GetObject("CUxD.CUX2801001:1.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true)) {
dom.GetObject("CUxD.CUX2801001:1.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX2801001:1.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0";
Vielen Dank
Alex
LG
Stefan
Re: Shelly1 mit Original-Firmware + CUxD inkl. Status
Erstmal danke für die Idee und die Umsetzung. Ich bin in manchen Teilen leider noch blutiger Anfänger, daher entschuldigt die blöde Frage.
Ich habe folgendes Problem. Der An/Aus Status wird durch das Programm korrekt übertragen, dafür musste ich als Trigger jedoch als Zeitmodul ändern. Mein Problem ist jedoch, dass der Button "Short" bzw. der Exec Befehl gelöscht/überschrieben wird sobald das Programm aktiv ist. Ich habe irgendwo einen massiven Denkfehler Ich vermute im Teil oben müsste eigentlich nicht die "Seriennummer" des Schalters sondern des Timers, ggf. liegt es hierran. Was muss ich eintragen wenn ich keinen CUxD-Timer benutze?
Flur
var url = "http://192.168.2.62/relay/0/status";
dom.GetObject("CUxD.CUX2801002:4.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:4.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:4.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:4.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.CUX2801002:4.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true) ) --> wenn das Komma hinter True stet steht, dann funktioniert das Skript aktuell gar nicht
{dom.GetObject("CUxD.CUX2801002:4.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false))
{dom.GetObject("CUxD.CUX2801002:4.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0“;
als Short habe ich im Schalter folgendes hinterlegt:
wget -q -O - 'http://192.168.2.62/relay/0?turn~3doff‘
wget -q -O - 'http://192.168.2.62/relay/0?turn~3don‘
Ich habe folgendes Problem. Der An/Aus Status wird durch das Programm korrekt übertragen, dafür musste ich als Trigger jedoch als Zeitmodul ändern. Mein Problem ist jedoch, dass der Button "Short" bzw. der Exec Befehl gelöscht/überschrieben wird sobald das Programm aktiv ist. Ich habe irgendwo einen massiven Denkfehler Ich vermute im Teil oben müsste eigentlich nicht die "Seriennummer" des Schalters sondern des Timers, ggf. liegt es hierran. Was muss ich eintragen wenn ich keinen CUxD-Timer benutze?
Flur
var url = "http://192.168.2.62/relay/0/status";
dom.GetObject("CUxD.CUX2801002:4.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801002:4.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801002:4.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801002:4.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.CUX2801002:4.STATE").State();
!WriteLine(zustand);
if ((daten == "true") && (zustand != true) ) --> wenn das Komma hinter True stet steht, dann funktioniert das Skript aktuell gar nicht
{dom.GetObject("CUxD.CUX2801002:4.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false))
{dom.GetObject("CUxD.CUX2801002:4.SET_STATE").State(0);
!WriteLine("if off");
}
daten = "0“;
als Short habe ich im Schalter folgendes hinterlegt:
wget -q -O - 'http://192.168.2.62/relay/0?turn~3doff‘
wget -q -O - 'http://192.168.2.62/relay/0?turn~3don‘