Seite 1 von 9

SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 20.04.2013, 20:55
von JPS
Sambasamba war über meinen Betrag hier http://homematic-forum.de/forum/viewtop ... 945#p76945 gestolpert und hat per PN angeregt, diese Vorgehensweise (streiche / setze bzw. vorher /nachher) bei den T&T aufzunehmen, gerne doch...

Schritt 1: CUxD (am besten im abgesicherten Modus) installieren, wie im Handbuch ab Seite 7 beschrieben. Den 2. Neustart nicht vergessen.

Schritt 2: Im CUxD unter "Geräte" ein neues "Gerät" vom Typ "(28) System" mit der Funktion "Exec" erzeugen, wie im Handbuch ab Seite 14 beschrieben (Name leer lassen und Icon übernehmen). Auf "Gerät auf CCU erzeugen !" klicken, dann erhältst du ein neues Gerät in der CCU: "CUxD.CUX2801001:1":
Cux Exec.jpg
Cux Exec.jpg (13.14 KiB) 57105 mal betrachtet
Das Gerät taucht 'ganz normal' im Posteingang auf und muss nicht weiter konfiguriert werden:
Cux CCU.gif
Cux CCU.gif (14.7 KiB) 57105 mal betrachtet
update sambasamba 8.6.13: siehe 4 posts weiter unten wg. der erforderlichen Neustarts!


Schritt 3: System.Exec wie folgt ersetzen (siehe auch CuxD-Handbuch (vor 0.573) ab Seite 82 bzw. im derzeit aktuellen Handbuch der Version 0.573 ab Seite 97):

Beispiel "Mail über AddOn":

streiche:

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("/etc/config/addons/email/email 01 ", &stdout, &stderr);
setze:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/etc/config/addons/email/email 01");
Beispiel "Mail über meine-homatic.de":

streiche:

Code: Alles auswählen

string stdout;
string stderr;
system.Exec ("/bin/sh /etc/config/addons/mh/email.sh "# sendbetreff # " " # sendmail # " " # mailto, &stdout, &stderr);
setze:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/bin/sh /etc/config/addons/mh/email.sh "# sendbetreff # " " # sendmail # " " # mailto);
Beispiel "Pushnachricht über Pushover":

streiche:

Code: Alles auswählen

string stdout;
string stderr;
tring nachricht = "Hallo Welt";
system.Exec ("curl -s -d token=EIGENER_TOKEN -d user=EIGENER_USER -d message='"#nachricht#"' -d sound=bike http://api.pushover.net/1/messages.json", &stdout, &stderr);
setze:

Code: Alles auswählen

string nachricht = "Hallo Welt";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("curl -s -d token=EIGENER_TOKEN -d user=EIGENER_USER -d message='"#nachricht#"' -d sound=bike http://api.pushover.net/1/messages.json");
Beispiel "Heizungsthermostatscript":

streiche:

Code: Alles auswählen

            if (debug) {
                string stdout;
                string stderr;
                system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " neu gesetzt!\n", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug alte_Solltemperatur: " # soll_ist # " neue_Solltemperatur: " # soll_neu # "\n", &stdout, &stderr);
                system.Exec("logger -t script -p user.debug Letzte_Aenderung: " # rt_timestamp # " Zeitdifferenz:_" # diff # "sek.", &stdout, &stderr);
            }
        }  
    }
} else {
    string stdout;
    string stderr;
    system.Exec("logger -t script -p user.debug Raumthermostat " # raum # " antwortet nicht!", &stdout, &stderr);
}
setze:

Code: Alles auswählen

            if (debug) {
                dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug Raumthermostat " # raum # " neu gesetzt!\n");
                dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug alte_Solltemperatur: " # soll_ist # " neue_Solltemperatur: " # soll_neu # "\n");
                dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug Letzte_Aenderung: " # rt_timestamp # " Zeitdifferenz:_" # diff # "sek.");
            }
        }  
    }
} else {
    dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("logger -t script -p user.debug Raumthermostat " # raum # " antwortet nicht!"); 
}
---
< edit Sambasamba>:

Beispiel: Aufruf des wake-on LAN scripts
streiche:

Code: Alles auswählen

string stderr;
string stdout;
string wake;
wake = "/usr/local/addons/WOL/ether-wake -b 00:19:99:90:07:68";
system.Exec (wake, &stdout, &stderr);
setze:

Code: Alles auswählen

string wake;
wake = "/usr/local/addons/WOL/ether-wake -b 00:19:99:90:07:68";
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State(wake);

Beispiel: "Betriebsart Wandthermostat umschalten" (viewtopic.php?f=31&t=5621)

streiche:

Code: Alles auswählen

var stdout;
var stderr;
var addr=dom.GetObject("Buero.Raumthermostat").Address();
system.Exec("tclsh /usr/local/setparam.tcl "+addr+":2 MODE_TEMPERATUR_REGULATOR int 2",&stdout,&stderr);
setze:

Code: Alles auswählen

var addr=dom.GetObject("Buero.Raumthermostat").Address();
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/setparam.tcl "+addr+":2 MODE_TEMPERATUR_REGULATOR int 2");
Beispiel: Briefkastenklappe von art-audio
Die Lösung war etwas tricky wegen der unterschiedlichen Gänsebeinchen (und ist nicht auf meinem Mist gewachsen).

streiche:

Code: Alles auswählen

string stdout;
string stderr;
system.Exec("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=HIER STAND MEIN API &application=Briefkastenklappe:&priority=1\&description=Post%20ist%20da!'", &stdout, &stderr);
setze:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("wget -q -O /dev/null 'http://prowl.weks.net/publicapi/add?apikey=HIER STAND MEIN API&application=Briefkastenklappe:&priority=1&description=Post%20ist%20da!'");
Das Prinzip ist immer das gleiche: den 1. (alten) Parameter an den Aufruf des CuxD übergeben, stdout, stderr weglassen.


</edit sambasamba>

Der Thread darf gerne um weitere vorher/nachher-Beispiele ergänzt werden :wink:

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 29.04.2013, 23:18
von uwe111
joni-blue hat geschrieben:kann ich von diesem aufruf jetzt auch mehrere auf einmal in ein script packen?
Ja,natürlich. Guckst Du hier: http://homematic-forum.de/forum/viewtop ... =56#p97052
Da habe ich zum Beispiel 8 verschiedene Aufrufe hintereinander gestartet. Diese laufen dann parallel.

Viele Grüße,

Uwe.

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 30.05.2013, 18:34
von Goglo
JPS hat geschrieben: update sambasamba 1.5.13: anscheinend muß man JETZT erst den 2. Neustart machen. Uwe guckt danach...
Da ich's eben ausprobiert habe: Ja, nachdem man das System.Exec-Gerät erzeugt hat, braucht's einen reboot.

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 30.05.2013, 20:10
von uwe111
So geht's... ich schreibe das auch in die Doku.

Wenn man den CUxD zum ersten Mal installiert, dann geht das so:
  1. CUxD installieren (automatischer reboot)
  2. CUxD Gerät(e) anlegen
  3. CCU reboot (manuell)
  4. jetzt sollte der CUxD richtig funktionieren. :)
Viele Grüße,

Uwe.

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 11.08.2013, 19:56
von Katte65
Hallo, ich bin echt am verzweifeln!

Ich habe wie üblich im CUxD Webinterface über CUxD Gerätetyp: System die Funktion Exec als Geraet (CUX2801001) erstellt.
Ansonsten habe ich keine weiteren CUxD GEräte eingerichtet, da ich hiermit mein momentanes Problem mit Abstürzen der CCU bei Exec aufrufen lösen wollte.

Code: Alles auswählen

var Color = 1;
var Light = 0;
string url = "http://192.168.1.34/www/artnet_V3.php?index=" # Color # "&light=" # Light; 
string p = "wget -q -O /dev/null '"#url#"'"; 
WriteLine(p);
dom.GetObject("CUX2801001:1.CMD_EXEC").State(p); 
WriteLine("OK");
leider passiert hier gar nichts :(

Code: Alles auswählen

var x = dom.GetObject("CUX2801001:1.CMD_EXEC"); 
WriteLine(x);
gibt mir auch nur "Null" aus.

Über jeden Idee wäre ich sehr dankbar.

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 29.08.2013, 19:48
von Laschat
Hallo.
könnte bitte jemand auch den SystemExec und CuxD-Code für das Feiertagsscript von Petrus einstellen?
Ich habe schon alles probiert, mit und ohne Parameter, doch ich bekomme immer eine Fehlermeldung.
Sind zum Aufruf die beiden Parameter notwendig?

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/Feiertag/Feiertage.tcl Feiertag_heute Feiertag_morgen");

Vielen Dank

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 29.08.2013, 20:34
von JPS
Laschat hat geschrieben:Hallo.
könnte bitte jemand auch den SystemExec und CuxD-Code für das Feiertagsscript von Petrus einstellen?
Ich habe schon alles probiert, mit und ohne Parameter, doch ich bekomme immer eine Fehlermeldung.
Sind zum Aufruf die beiden Parameter notwendig?

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/Feiertag/Feiertage.tcl Feiertag_heute Feiertag_morgen");

Vielen Dank
Ich nutze hier das Feiertagsskript in der Version 1.4.1 (ohne Feiertag morgen). Das ist ein WebUI-Skript, und wird über das Zeitmodul einmal in der Nacht getriggert. Dazu brauchts du weder den SystemExec- noch den CUxD CMD_EXEC-Aufruf. So wie ich das sehe, funktioniert das in der Version 2.2.1r2 genauso.

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 29.08.2013, 21:20
von Laschat
Du hast offensichtlich recht. Warum wird dann auf
http://www.homematic-inside.de/software ... alculation
das Script als feiertage.tcl zum download angeboten?

Vielen Dank für den Hinweis

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 29.08.2013, 23:43
von JPS
Laschat hat geschrieben:Du hast offensichtlich recht. Warum wird dann auf
http://www.homematic-inside.de/software ... alculation
das Script als feiertage.tcl zum download angeboten?

Vielen Dank für den Hinweis
Ich nehme an, der Autor hat es so genannt, damit sein Lieblingseditor gleich seine Lieblingsschablone zur Anzeige lädt. :wink:

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Verfasst: 27.09.2013, 01:30
von rascal
Danke für die tolle Anleitung,
kannst du auch erklären was im TCL stehen muss?
Irgendwie bekomme ich im mail immer nur "NULL" für die Variablen :(