System-exec-Skript durch CUxD-exec ersetzen [gelöst]

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

Moderator: Co-Administratoren

Antworten
66er
Beiträge: 2429
Registriert: 23.08.2015, 11:06

System-exec-Skript durch CUxD-exec ersetzen [gelöst]

Beitrag von 66er » 19.01.2019, 17:41

Hallo,

ich versuche gerade die Umsetzung einer Geräte-Steuerung mit Zustandrückmeldung von system-exec auf CUxD umzusetzen.

Für das Schalten habe ich das auch hinbekommen. :D

Am Status scheitere ich leider. :oops:

Aktuell aktualisiere ich den Status alle 5 Minuten über system-exec-Aufruf:

Code: Alles auswählen

string stdout;
string stderr;
string state;
string url="'http://192.168.1.124/relay/0/status'";
system.Exec("wget -t 1 -T 3 -q -O - " # url, &stdout, &stderr);
state = stdout.Substr(8, 4); !4 Zeichen ab 8. Stelle
if (state == "true") {
  dom.GetObject("CUxD.CUX4000005:1.SET_STATE").State(1);
} else {
  dom.GetObject("CUxD.CUX4000005:1.SET_STATE").State(0);
}
Da ich mehr Geräte verbauen will und um den Aktualisierungsintervall verkürzen zu können*, müßte doch auch dieser Code auf CuxD-exec umzubauen sein.

Kann mir da bitte jemand helfen :?:

Danke vorab.

LG und schönes WE
Stefan

* Ich denke, es gilt immer noch, dass CUxD-exec dem System-Exec vorzuziehen ist :!: :?:

Edit: Staus gelöst
Zuletzt geändert von 66er am 20.01.2019, 14:15, insgesamt 1-mal geändert.

66er
Beiträge: 2429
Registriert: 23.08.2015, 11:06

Re: System-exec-Skript durch CUxD-exec ersetzen

Beitrag von 66er » 20.01.2019, 11:47

So, ein kleines Stück weiter bin ich:

:mrgreen: Dank der ständig defekten Forensuche :mrgreen:

der Code

Code: Alles auswählen

var url = "http://192.168.1.124/relay/0/status";
dom.GetObject("CUxD.CUX2801001:2.CMD_SETS").State("wget -q -O - '"#url#"'");
dom.GetObject("CUxD.CUX2801001:2.CMD_QUERY_RET").State(1);
string Antwort = dom.GetObject("CUxD.CUX2801001:2.CMD_RETS").State();
dom.GetObject("CUxD.CUX2801001: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 +1), 100);
integer word_position = daten.Find(word);
daten = daten.Substr(0, (word_position -3));
Antwort = "true";
WriteLine(daten);

var zustand = dom.GetObject("CUxD.CUX4000005:1.STATE").State();
WriteLine(zustand);

if ((daten == "true") && (zustand != true) )
{dom.GetObject("CUxD.CUX4000005:1.SET_STATE").State(1);
!WriteLine("if ON");
}
if ((daten == "false") && (zustand != false)) {
dom.GetObject("CUxD.CUX4000005:1.SET_STATE").State(0);
WriteLine("if off");
}
daten = "0";
liefert folgendes Ergebnis:
CUxD-Code fehlerhaft 1.JPG
  • Ausgabe Zeile 1 entspricht der Geräte-Rückmeldung und aktualisiert sich je nach Schaltzustand korrekt.
  • Ausgabe Zeile 2 ist leider fehlerhaft. HIer sollte je nach Abfrageantwort nur true oder false stehen.(Status
    aktualisiert korrekt
    )
  • Ausgabe Zeile 3 hier steht leider immer "true", was natürlich falsch ist.
CUX4000005:1 ist der Kanal, dessen Zustand (Ein/Aus) ich mit SET_STATE aktalisieren möchte.

Vielleicht kann jetzt bitte jemand weiterhelfen :?:

LG
Stefan


Antworten

Zurück zu „CUxD“