Shelly1 mit Original-Firmware + CUxD inkl. Status

Problemlösungen und Hinweise von allgemeinem Interesse zur Haussteuerung mit HomeMatic

Moderator: Co-Administratoren

66er
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

Beitrag von 66er » 04.03.2019, 19:05

Hallo,

natürlich kannst Du auch die Zeitsteuerung verwenden. :wink: 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. :roll: )

Habe den Hinweis auf die Alternative im 1.Post ergänzt. :D

LG
Stefan

naumannsascha
Beiträge: 19
Registriert: 03.05.2019, 09:14

Re: Shelly1 mit Original-Firmware + CUxD inkl. Status

Beitrag von naumannsascha » 03.05.2019, 09:24

Hallo, ich weis nicht wo der Fehler ist aber in meiner CCu3 wird der Status vom Shelly 1 nicht geändert.
Dateianhänge
004.jpg
003.jpg
002.jpg
0001.jpg

Xel66
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

Beitrag von Xel66 » 03.05.2019, 12:25

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

66er
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

Beitrag von 66er » 03.05.2019, 13:45

Hallo zusammen,

ich habe das Skript mit dem auf meinem Charly verglichen und es läuft dort genau so fehlerfrei. :roll:

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:
LG
Stefan

Xel66
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

Beitrag von Xel66 » 03.05.2019, 14:18

66er hat geschrieben:
03.05.2019, 13:45
...weil es Teil des ausgelesenen Strings (5 Zeichen) ist!
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

loewe.242
Beiträge: 23
Registriert: 01.08.2018, 10:59

Re: Shelly1 mit Original-Firmware + CUxD inkl. Status

Beitrag von loewe.242 » 05.05.2019, 00:08

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";

66er
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

Beitrag von 66er » 05.05.2019, 07:37

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);
...
Hallo,

Fehler ist rot markiert. :wink:

(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

loewe.242
Beiträge: 23
Registriert: 01.08.2018, 10:59

Re: Shelly1 mit Original-Firmware + CUxD inkl. Status

Beitrag von loewe.242 » 05.05.2019, 20:05

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

66er
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

Beitrag von 66er » 05.05.2019, 20:35

Hallo,

ich beziehe mich auf die erste Version Deiner Fassungen des Skriptes!
loewe.242 hat geschrieben:
05.05.2019, 20:05
... Leider war das aber nicht die Ursache, es war auch nicht das falsche Cuxd 2801001:2. Gerät
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.:
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
Falsches Gerät!

LG
Stefan

robbsen
Beiträge: 5
Registriert: 06.05.2019, 20:58

Re: Shelly1 mit Original-Firmware + CUxD inkl. Status

Beitrag von robbsen » 06.05.2019, 21:09

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 :mrgreen: 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

Bild
Bild

Antworten

Zurück zu „HomeMatic Tipps & Tricks - keine Fragen!“