System.exec durch CuxD ersetzen

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

Moderator: Co-Administratoren

Benutzeravatar
anli
Beiträge: 4326
Registriert: 10.06.2009, 14:01
Wohnort: 20 Min. nördlich von Hannover und bei Bremen
Hat sich bedankt: 1 Mal
Danksagung erhalten: 23 Mal
Kontaktdaten:

Re: Sytem.exc durch CuxD ersetzen

Beitrag von anli » 23.04.2013, 19:28

sambasamba hat geschrieben:Gibt das keine Probleme?
Normal nicht, solange Du nicht gegenteilige Dinge in der irgendwas.sh ausführst (da es sein könnte, dass die Reihenfolge nicht stringent eingehalten wird, da ein später gestarteter Prozess aus irgendwelchem Gründen vor einem früher gestarteten abgearbeitet wird). Ich habe mir jedoch für Dinge, die eventuell kollidieren könnten, verschiedene CMD_EXECs angelegt.

BTW: Du musst mit Anführungszeichen aufpassen, wenn Du das umbaust - die Parameter dürfen nicht in Anführungszeichen, da sie sonst das Anführungszeichen vom Beginn der State-Anweisung wieder schließen. Und ganz am Ende muss natürlich auch noch ein Anführungszeichen (zur Verdeutlichung hier mal mit einem Leerzeichen zwischen einfachem und doppeltem Anführungszeichen am Ende):

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/bin/sh /etc/config/<irgendwas.sh> '<parameter>' ");
Herzliche Grüße, anli

Alle Angaben ohne Gewähr und Haftung meinerseits. Verwendung der von mir zur Verfügung gestellten Downloads auf eigene Gefahr. Ich bitte um Verständnis, dass ich aus zeitlichen Gründen keine unaufgeforderte Hilfestellung per PN/Mail geben kann. Bitte allgemeine Fragen ins Forum stellen, hier können viele fähige User viel schneller helfen.

Homematic-Manager v2: einfaches Tool zum Erstellen von Direktverknüpfungen und Bearbeiten von Gerätenamen, -parametern etc. für Homematic und HomematicIP (Alternative diesbzgl. zur WebUI)

Einsteiger-Hilfeerweiterter Skript-Parser

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

Re: Sytem.exc durch CuxD ersetzen

Beitrag von uwe111 » 23.04.2013, 20:09

Hallo Volkmar,

ich habe das einmal für Dich getestet und es lief wie erwartet. Das kannst Du gerne auch machen. Dazu habe ich folgendes Shell-Script angelegt.
/usr/local/addons/exectest.sh:

Code: Alles auswählen

#!/bin/sh
echo `date` "1 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "2 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "3 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "4 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "5 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "6 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "7 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "8 $*" >>/tmp/execlog.txt
sleep 2
echo `date` "9 $*" >>/tmp/execlog.txt
Und auf der CCU unter "Script testen" dann die folgenden Befehle:

Code: Alles auswählen

dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test1'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test2'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test3'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test4'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test5'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test6'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test7'");
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/addons/exectest.sh 'test8'");
WriteLine("Fertig!");
Nach dem Start mittels "Ausführen" siehst Du alle 8 Prozesse auf der CUxD-Statusseite:

Code: Alles auswählen

  gestartete Child-Prozesse:
  15778 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test8'
  15773 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test7'
  15765 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test6'
  15761 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test5'
  15759 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test4'
  15754 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test3'
  15751 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test2'
  15750 cuxd (6s): CUX2801001:1 System.CMD_EXEC /usr/local/addons/exectest.sh 'test1'
Und das Logfile hat den folgenden Inhalt.
/tmp/execlog.txt:

Code: Alles auswählen

Tue Apr 23 19:57:16 CEST 2013 1 test2
Tue Apr 23 19:57:16 CEST 2013 1 test3
Tue Apr 23 19:57:16 CEST 2013 1 test1
Tue Apr 23 19:57:16 CEST 2013 1 test4
Tue Apr 23 19:57:16 CEST 2013 1 test6
Tue Apr 23 19:57:16 CEST 2013 1 test5
Tue Apr 23 19:57:16 CEST 2013 1 test7
Tue Apr 23 19:57:16 CEST 2013 1 test8
Tue Apr 23 19:57:18 CEST 2013 2 test2
Tue Apr 23 19:57:18 CEST 2013 2 test3
Tue Apr 23 19:57:18 CEST 2013 2 test4
Tue Apr 23 19:57:18 CEST 2013 2 test1
Tue Apr 23 19:57:18 CEST 2013 2 test6
Tue Apr 23 19:57:18 CEST 2013 2 test5
Tue Apr 23 19:57:18 CEST 2013 2 test7
Tue Apr 23 19:57:18 CEST 2013 2 test8
Tue Apr 23 19:57:20 CEST 2013 3 test2
Tue Apr 23 19:57:20 CEST 2013 3 test4
Tue Apr 23 19:57:20 CEST 2013 3 test3
Tue Apr 23 19:57:20 CEST 2013 3 test1
Tue Apr 23 19:57:20 CEST 2013 3 test6
Tue Apr 23 19:57:21 CEST 2013 3 test7
Tue Apr 23 19:57:21 CEST 2013 3 test5
Tue Apr 23 19:57:21 CEST 2013 3 test8
Tue Apr 23 19:57:22 CEST 2013 4 test2
Tue Apr 23 19:57:22 CEST 2013 4 test1
Tue Apr 23 19:57:23 CEST 2013 4 test3
Tue Apr 23 19:57:23 CEST 2013 4 test4
Tue Apr 23 19:57:23 CEST 2013 4 test7
Tue Apr 23 19:57:23 CEST 2013 4 test6
Tue Apr 23 19:57:23 CEST 2013 4 test8
Tue Apr 23 19:57:23 CEST 2013 4 test5
Tue Apr 23 19:57:24 CEST 2013 5 test2
Tue Apr 23 19:57:25 CEST 2013 5 test1
Tue Apr 23 19:57:25 CEST 2013 5 test4
Tue Apr 23 19:57:25 CEST 2013 5 test3
Tue Apr 23 19:57:25 CEST 2013 5 test6
Tue Apr 23 19:57:25 CEST 2013 5 test7
Tue Apr 23 19:57:25 CEST 2013 5 test8
Tue Apr 23 19:57:25 CEST 2013 5 test5
Tue Apr 23 19:57:26 CEST 2013 6 test2
Tue Apr 23 19:57:27 CEST 2013 6 test1
Tue Apr 23 19:57:27 CEST 2013 6 test3
Tue Apr 23 19:57:27 CEST 2013 6 test4
Tue Apr 23 19:57:27 CEST 2013 6 test6
Tue Apr 23 19:57:27 CEST 2013 6 test8
Tue Apr 23 19:57:27 CEST 2013 6 test5
Tue Apr 23 19:57:27 CEST 2013 6 test7
Tue Apr 23 19:57:28 CEST 2013 7 test2
Tue Apr 23 19:57:29 CEST 2013 7 test1
Tue Apr 23 19:57:29 CEST 2013 7 test3
Tue Apr 23 19:57:29 CEST 2013 7 test4
Tue Apr 23 19:57:29 CEST 2013 7 test6
Tue Apr 23 19:57:29 CEST 2013 7 test5
Tue Apr 23 19:57:29 CEST 2013 7 test7
Tue Apr 23 19:57:29 CEST 2013 7 test8
Tue Apr 23 19:57:30 CEST 2013 8 test2
Tue Apr 23 19:57:31 CEST 2013 8 test1
Tue Apr 23 19:57:31 CEST 2013 8 test3
Tue Apr 23 19:57:31 CEST 2013 8 test4
Tue Apr 23 19:57:31 CEST 2013 8 test6
Tue Apr 23 19:57:31 CEST 2013 8 test7
Tue Apr 23 19:57:31 CEST 2013 8 test5
Tue Apr 23 19:57:31 CEST 2013 8 test8
Tue Apr 23 19:57:33 CEST 2013 9 test2
Tue Apr 23 19:57:33 CEST 2013 9 test3
Tue Apr 23 19:57:33 CEST 2013 9 test1
Tue Apr 23 19:57:33 CEST 2013 9 test4
Tue Apr 23 19:57:33 CEST 2013 9 test6
Tue Apr 23 19:57:33 CEST 2013 9 test7
Tue Apr 23 19:57:33 CEST 2013 9 test8
Tue Apr 23 19:57:33 CEST 2013 9 test5
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

sambasamba
Beiträge: 1602
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 21 Mal
Danksagung erhalten: 4 Mal

Re: Sytem.exc durch CuxD ersetzen

Beitrag von sambasamba » 23.04.2013, 20:18

Anli,
nee, ich will nix Gegenteiliges machen, aber beispielsweise 8 Raumthermostaten von AUTO auf CEN umschalten, so:

Code: Alles auswählen

var addr=dom.GetObject("Keller.Raumthermostat").Address();
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("tclsh /usr/local/setparam.tcl "+addr+":2 MODE_TEMPERATUR_REGULATOR int 2");
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");
Habs getestet und geht, aber lieber nochmal gefragt.

Und stimmt, im Beispiel oben hab ich die "" falsch gesetzt.. habs korrigiert.
Hier: http://homematic-forum.de/forum/viewtop ... 31&t=12780 sollten die " " aber richtig stehen (zumindest funktioniert alles...)

Uwe: Wenn der große Meister keine Einwände hat muß es ja gut sein :) ... danke!

Zu sagen ist noch daß ich vorhin auf der 2. CCU auch den CuxD installiert hatte. Diese CCU hatte noch einen Neustart benötigt, nachdem das system.exec Gerät angelegt und aus dem Posteingang raus war. Ohne den Neustart hatte der CuxD-Aufruf nicht funktioniert. Was solls.

Volkmar

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

Re: Sytem.exc durch CuxD ersetzen

Beitrag von uwe111 » 23.04.2013, 20:39

sambasamba hat geschrieben:Zu sagen ist noch daß ich vorhin auf der 2. CCU auch den CuxD installiert hatte. Diese CCU hatte noch einen Neustart benötigt, nachdem das system.exec Gerät angelegt und aus dem Posteingang raus war. Ohne den Neustart hatte der CuxD-Aufruf nicht funktioniert. Was solls.
Ja, das ist leider so. Erst nach dem zweiten Neustart kann man von der CCU vernünftig auf das CUxD-Interface zugreifen. Vorher kennt die CCU das Interface nicht.

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

sambasamba
Beiträge: 1602
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 21 Mal
Danksagung erhalten: 4 Mal

Re: Sytem.exc durch CuxD ersetzen

Beitrag von sambasamba » 23.04.2013, 20:51

dann bitte den Hinweis in deinem tollen Handbuch ändern.
Da steht zwar '2. Neustart', aber ich hab den nach CuxD-Installation gemacht.

Wie man jetzt sieht, muß danach aber erst noch das system.exec gerät #28 im webui eingerichtet werden (aus dem Posteingang raus), und DANN erst der Neustart.

V

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

Re: Sytem.exc durch CuxD ersetzen

Beitrag von uwe111 » 23.04.2013, 21:40

Hmm... ok, das wusste ich jetzt noch nicht. Ich werde mal testen, ob man vor dem Neustart ein Gerät angelegt haben muss.
Schließlich mache ich ja nicht dauernd eine Neuinstallation. Wenn das so ist, dann schreibe ich es so rein.

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: Sytem.exc durch CuxD ersetzen

Beitrag von uwe111 » 24.04.2013, 11:06

sambasamba hat geschrieben: nee, ich will nix Gegenteiliges machen, aber beispielsweise 8 Raumthermostaten von AUTO auf CEN umschalten, so:
Wenn es tatsächlich nur Raumthermostate sind ist das ok, weil ja erst übertragen wird, wenn diese sich bei der CCU melden.. also nicht gleichzeitig.

Aber wenn es um andere Geräte geht (beispielsweise Rolladen-Aktoren) könnte das aus funktechnischer Sicht Verbindungsprobleme verursachen, da dann alle Geräte praktisch gleichzeitig angesprochen werden.
Um das auszuschließen würde ich nur ein Script aufrufen und dann in diesem Script nacheinander mit einem Abstand von wenigen Sekunden die Befehle einzeln aufrufen.

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

sambasamba
Beiträge: 1602
Registriert: 16.08.2009, 23:18
Wohnort: Landau/Südpfalz
Hat sich bedankt: 21 Mal
Danksagung erhalten: 4 Mal

Re: Sytem.exc durch CuxD ersetzen

Beitrag von sambasamba » 24.04.2013, 11:30

'nur 1 Skript', wie meinst Du das?
Ich hab jetzt EIN WebUI-Programm, drin EIN Skript, und die 8 CuxD-Aufrufe stehen direkt hintereinander.

Ich könnte in webUI-Skript in der DANN-Bedingung ACHT skripte aufrufen, jeweils etwas verzögert. Das sieht dann aber SEHR wüst aus!

In Skript selbst (nicht webUI-Programm) verzögern, da weiß ich nicht wie das geht (ok, ne Schleife hochzählen...), aber dann wäre die CCU ja auch für 20 Sekunden tot.

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

Re: Sytem.exc durch CuxD ersetzen

Beitrag von uwe111 » 24.04.2013, 13:34

Ich hatte sowas gemeint:
EIN WebUI-Programm
EIN HM-Script
EIN CUxD-Aufruf von EINem Shell-Script

Das HM-Script etwa so:

Code: Alles auswählen

var addr1=dom.GetObject("Keller.Raumthermostat").Address();
var addr2=dom.GetObject("Buero.Raumthermostat").Address();
...
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("/usr/local/set_mode.sh "#addr1#" "#addr2#" "#addr3#" "#addr4#" "#addr5#" "#addr6#" "#addr7#" "#addr8);
Und das Shell-Script (/usr/local/set_mode.sh) so:

Code: Alles auswählen

#!/bin/sh
tclsh /usr/local/setparam.tcl $1:2 MODE_TEMPERATUR_REGULATOR int 2
sleep 2
tclsh /usr/local/setparam.tcl $2:2 MODE_TEMPERATUR_REGULATOR int 2
sleep 2
...
tclsh /usr/local/setparam.tcl $8:2 MODE_TEMPERATUR_REGULATOR int 2
Das WebUI-Programm wäre nicht verzögert. Nur das Shell-Script. Und das läuft sowieso im Hintergrund.

Oh... es gibt auch noch eine andere Möglichkeit...
Mit diesem Script (liegt dem CUxD bei) sollte es sogar direkt aus HM-Script mit Verzögerung funktionieren:

Code: Alles auswählen

/usr/local/addons/cuxd/extra/timer.tcl
Aufruf dann z.B. so (mit 4s Verzögerung):
/usr/local/addons/cuxd/extra/timer.tcl BidCos-RF.IEQ0504341:1.TEMPERATUR_REGULATOR 2 4
(mit 6s Verzögerung):
/usr/local/addons/cuxd/extra/timer.tcl BidCos-RF.IEQ0505273:1.TEMPERATUR_REGULATOR 2 6
...

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

dtp
Beiträge: 10658
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 320 Mal
Danksagung erhalten: 501 Mal

Re: Sytem.exc durch CuxD ersetzen

Beitrag von dtp » 06.06.2013, 11:23

Hallo,

ich hab gestern mal CUxD in der neuesten Version auf meine CCU1 installiert. Lief alles problemlos. Nun frage ich mich allerdings, ob sich der Aufwand lohnt, die bestehenden system.Exec-Befehle durch die entsprechenden CUxD-Kommandofolgen zu ersetzen. Seit ca. einem halben Jahr läuft meine CCU1 nämlich ohne einen einzigen Absturz. Ich verwende aber auch nur einige system.Exec-Befehle zum Erzeugen von E-mails über das E-mail-Addon und Push-Nachrichten per Prowl. Pro Tag werden aber immerhin so ca. 5 bis 10 Push-Nachrichten erzeugt. E-mails werden dagegen nur sehr selten in Abhängigkeit von bestimmten Betriebszuständen (z.B. Batteriestatus) verschickt.

Ist z.B. sichergestellt, dass die CUxD-Kommandofolgen auch nach einem Firmware-Update der CCU weiterhin funktionieren?

Gruß,

Thorsten
CCU3 mit stets aktueller FW und den Addons "CUxD" und "Programmedrucken", ioBroker auf Synology DiskStation DS718+ im Docker-Container;
einige Projekte: zentrales Push-Nachrichten-Programm zPNP, DoorPi-Videotürsprechanlage, An- und Abwesenheitsdetektion per Haustürschloss, zentrales Programm zur Steuerung von Beschattungsgeräten zBSP.

Antworten

Zurück zu „CUxD“