[Gelöst] CUxD 2.9 und CMD_RETS/CMD_RETL

Anbindung von FS20-Komponenten, ELV-Wetterstationen, EnOcean und DMX an HomeMatic

Moderator: Co-Administratoren

Benutzeravatar
Baxxy
Beiträge: 10788
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2207 Mal

[Gelöst] CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von Baxxy » 22.05.2022, 14:33

Hallo Uwe,
sag mal hat sich in der 2.9 ein Fehler eingeschlichen oder ist es ein "Feature"?

Beim (28) System - Funktion: Exec sind "CMD_RETS" & CMD_RETL" nicht mehr als Trigger im WENN von WebUI-Programmen verfügbar.
cuxd2_9_exec_wenn_prg.jpg
Ich nutze die x86 - Version auf RaspberryMatic 3.63.9.20220521.
Mit der Testversion 2.8.4 war das noch OK.
Zuletzt geändert von Baxxy am 23.05.2022, 15:01, insgesamt 1-mal geändert.

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von uwe111 » 22.05.2022, 17:41

Baxxy hat geschrieben:
22.05.2022, 14:33
sag mal hat sich in der 2.9 ein Fehler eingeschlichen oder ist es ein "Feature"?
Ich habe etwas aufgeräumt und das ist eigentlich so beabsichtigt.
Baxxy hat geschrieben:
22.05.2022, 14:33
Beim (28) System - Funktion: Exec sind "CMD_RETS" & CMD_RETL" nicht mehr als Trigger im WENN von WebUI-Programmen verfügbar.
Wenn Dir ein Beispiel einfällt, bei dem man diese Datenpunkte sinnvoll als Trigger nutzt, dann kann ich das auch gerne wieder korrigieren.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Benutzeravatar
Baxxy
Beiträge: 10788
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2207 Mal

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von Baxxy » 22.05.2022, 17:51

Ah ok, hatte ich nichts von gelesen. :wink:
Die mit diesen Triggern angelegten Programme sehen jetzt etwas merkwürdig aus, funktionieren aber noch.

Ich bin dazu übergegangen die "bösen Datenabrufe aus dem Internet" jeweils in 2 Programme aufzusplitten.
(vereinfachtes Beispiel)
A - Datenabruf starten:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:8.CMD_SETS").State("/usr/local/addons/host_data_test.sh");
dom.GetObject("CUxD.CUX2801001:8.CMD_QUERY_RET").State(1);
dom.GetObject("CUxD.CUX2801001:8.CMD_RUNS").State(1);
B - Angekommene Daten auswerten:

Code: Alles auswählen

string ova_host_data = dom.GetObject("CUxD.CUX2801001:8.CMD_RETS").State();
WriteLine(ova_host_data);
Das mache ich auch beim CCU-Historian, der braucht aber teilweise 5-6s bis die Daten eintrudeln.
Und um die ReGa nicht zu blockieren feuere ich den Datenabruf ab, und warte nicht auf Antwort, sondern verarbeite sie erst wenn sie da ist.

Etwa so wie es @Black mal >> hier << beschrieben hat.

Welche Alternativen gibt es denn?

Grüße, Baxxy

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von uwe111 » 22.05.2022, 22:28

Baxxy hat geschrieben:
22.05.2022, 17:51
Ah ok, hatte ich nichts von gelesen.
Da steht's:
CUxD Changelog hat geschrieben: CMD_RETS und CMD_RETL als interne Datenpunkte definiert
Baxxy hat geschrieben:
22.05.2022, 17:51
Ich bin dazu übergegangen die "bösen Datenabrufe aus dem Internet" jeweils in 2 Programme aufzusplitten.
So ist es auch richtig, und die beiden DPs werde ich in Programmverknüpfungen wieder sichtbar machen! Das hatte ich irgendwie total übersehen. :shock:
In Deinem Beispiel wird die Befehlszeile allerdings 2x ausgeführt. Einmal bei A: und einmal bei B:

So sollte es optimal funktionieren:
A:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:8.CMD_SETS").State("/usr/local/addons/host_data_test.sh >/tmp/host_data_test.txt");
dom.GetObject("CUxD.CUX2801001:8.CMD_RUNS").State(1);
B: wenn CMD_RETS gleich 0 dann:

Code: Alles auswählen

string OUT;
system.Exec("cat /tmp/host_data_test.txt", &OUT);
WriteLine(OUT);
Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von uwe111 » 23.05.2022, 13:34

Hallo Baxxy,

kannst Du bitte prüfen, ob die Datenpunkte mit der neuen Testversion bei Dir wieder sichtbar sind?
http://cuxd.de/download/

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Benutzeravatar
Baxxy
Beiträge: 10788
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2207 Mal

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von Baxxy » 23.05.2022, 14:31

Hallo Uwe,
die Testversion funktioniert, CMD_RETS/CMD_RETL sind wieder im WENN von WebUI-Programmen verfügbar und triggern ordnungsgemäß.
uwe111 hat geschrieben:
22.05.2022, 22:28
So sollte es optimal funktionieren:
Da hatte ich...

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:8.CMD_RETS").State();
... tatsächlich falsch "interpretiert".
Ich dachte bisher dort wird nur die Rückgabe von CMD_xxx hinterlegt und ich hole mir den Rückgabewert einfach aus dem Datenpunkt.
Doppelt ausführen wollte ich mein Shell-Script / curl / wget natürlich nicht.
Nachdem ich nun aber nochmal die CUxD-Doku ausgiebig studiert, und dein Beispiel umgesetzt habe läuft das hier sehr gut.
Darauf muss man erstmal kommen das über temporäre Dateien umzusetzen.

Dann gleich noch ne Frage:
Wenn ich nun curl / wget direkt übergebe, macht es da Sinn diesen einen Timeout zu verpassen.
Oder reicht es wenn ich "KEY|EXEC_TIMEOUT" auf den Minimalwert von 1Min stelle?

Auf jeden Fall schon mal Danke für das zurückbringen von CMD_RETS/CMD_RETL als Programmtrigger und das optimale Beispiel.

Grüße, Baxxy

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von uwe111 » 23.05.2022, 14:46

Hallo Baxxy,
Baxxy hat geschrieben:
23.05.2022, 14:31
Wenn ich nun curl / wget direkt übergebe, macht es da Sinn diesen einen Timeout zu verpassen.
Oder reicht es wenn ich "KEY|EXEC_TIMEOUT" auf den Minimalwert von 1Min stelle?
EXEC_TIMEOUT sollte reichen, ausser Du möchtest den Timeout unter einer Minute setzen.

Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Benutzeravatar
Baxxy
Beiträge: 10788
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2207 Mal

Re: CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von Baxxy » 23.05.2022, 15:01

Sehr gut.
Dann können wir das Thema als gelöst betrachten. :)


Halt, da war noch was...
uwe111 hat geschrieben:
22.05.2022, 22:28
wenn CMD_RETS gleich 0 dann:
= 0.00 geht nicht, weder bei Änderung noch bei Aktualisierung.
< 0.00 oder <= 0.00 funktioniert, aber nur bei Änderung sowie "bei Aktualisierung" nicht "bei Änderung"

Passt aber, steht ja auch so im Handbuch (<= 0.00 bei Aktualisierung).

Grüße, Baxxy
Zuletzt geändert von Baxxy am 23.05.2022, 23:26, insgesamt 1-mal geändert.

Benutzeravatar
uwe111
Beiträge: 4820
Registriert: 26.02.2011, 22:22
Hat sich bedankt: 3 Mal
Danksagung erhalten: 245 Mal
Kontaktdaten:

Re: [Gelöst] CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von uwe111 » 23.05.2022, 15:07

Baxxy hat geschrieben:
23.05.2022, 15:01
uwe111 hat geschrieben:
22.05.2022, 22:28
wenn CMD_RETS gleich 0 dann:
= 0 geht nicht, weder bei Änderung noch bei Aktualisierung.
< 0 oder <= 0 funktioniert bei Änderung sowie bei Aktualisierung.
Könnte das eventuell an der Triggerung und dem Vergleich der Programmverknüpfung liegen, weil der Datenpunkt vom Typ STRING ist?
CMD_RETS hat nach erfolgreicher Ausführung den Wert 0.

Du kannst unter B: gerne mal folgendes testen:

Code: Alles auswählen

var ret = dom.GetObject("CUxD.CUX2801001:8.CMD_RETS").Value();
WriteLine(ret);
Viele Grüße

Uwe
Alle sagten: Das geht nicht. Dann kam einer, der wußte das nicht und hat's einfach gemacht.
SPENDEN :wink: Download: CUxD 2.11, SSH KeyDir

Benutzeravatar
Baxxy
Beiträge: 10788
Registriert: 18.12.2018, 15:45
System: Alternative CCU (auf Basis OCCU)
Hat sich bedankt: 604 Mal
Danksagung erhalten: 2207 Mal

Re: [Gelöst] CUxD 2.9 und CMD_RETS/CMD_RETL

Beitrag von Baxxy » 23.05.2022, 15:32

Möglich. Stringvergleiche sind ja so eine Sache.
Im Programm wählt man ja auch float aus, also...

Code: Alles auswählen

= 0.00
Das passt dann nicht zum zurückgegebenen String "0".
Kann man schön mit einem kleinen Scriptchen testen:

Code: Alles auswählen

string a = "0";
if (a == 0.00) { Write("OK") }
else { Write("nOK") }

==> nOK

Code: Alles auswählen

string a = "0";
if (a <= 0.00) { Write("OK") }
else { Write("nOK") }

==> OK

Antworten

Zurück zu „CUxD“