SystemExec durch CuxD ersetzen -> vorher / nachher

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

Moderator: Co-Administratoren

MickyMUC
Beiträge: 44
Registriert: 19.06.2011, 10:35

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von MickyMUC » 22.05.2017, 11:32

Hallo,

leider ist die empfohlene Lösung mit CUxD sogar noch schlechter als die Verwendung des system.exec()-Befehls.
Jedenfalls hängt sich die CCU2 damit öfter auf.

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

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von dtp » 22.05.2017, 12:12

Nur mal so. Bei mir wird pro Tag im Schnitt ca. 40 bis 50 Mal das CUxD-Gerät für den system.Exec-Befehl aufgerufen (insb. im Rahmen meines zentralen Push-Nachrichten-Programms). In den letzten drei Jahren führte das zu keinem einzigen Problem, geschweige denn Absturz der CCU2.

Bis dann,

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.

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von alchy » 22.05.2017, 14:19

MickyMUC hat geschrieben: oh, entschuldige, ich glaube, das war eine Antwort auf einen falschen Eintrag.
Ich habe das schon richtig verstanden, und auch die Antwort bleibt dieselbe. :roll:
alchy hat geschrieben:Das ist eine Aussage, welche du ein bisschen mehr mit Fakten untermauern solltest.
Wie benutzt du den cuxd.exec und wie stellt sich dein "Aufhängen" der CCU dar? Hängt die CCU am Netzwerkkabel oder am Kabel für die Stromversorgung? :roll:
Wie lautet z.B. das >> Fehlerprotokoll << zum Zeitpunkt des Aufrufs? usw.

Alchy
Auch eine weitere Wiederholung derselben Aussage am 22.05.2017, 11:32 deinerseits ändert daran überhaupt nichts.
Fehlt nur noch, das du virtuell auf den Boden stampfst.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

MickyMUC
Beiträge: 44
Registriert: 19.06.2011, 10:35

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von MickyMUC » 23.05.2017, 08:48

Hallo, Alchy,

ich werde es die Tage einmal zusammenschreiben; jetzt ist es deaktiviert.

Letztendlich habe ich es gemacht wie beschrieben:
CUxD aktualisiert (war schon vorher drauf) - Das Gerät eingerichtet - Das Skript erstellt.

Vorher hatte ich es so (das Skript in der ersten "Aktivität-Zeile" zählt einen Zähler hoch; ist im letzten Bild auch enthalten):
1.PNG
mit:
4.PNG
Dabei hängte sich die CCU hin und wieder auf.
Damit dieses Aufhängen nicht passiert, ist es nun so:
2.PNG
mit
3.PNG
3.PNG (19.48 KiB) 3974 mal betrachtet
Nun hängt sich die CCU beinahe täglich auf.

Habe ich etwas falsch gemacht?
Die CCU hängt am Strom-Netz und am Inter-Netz ( :wink: )

Unter "Aufhängen" verstehe ich, dass keine Programme ausgeführt werden und kein WebGUI-Zugriff möglich ist. Es hilft nur ein RESET.

Besten Dank!

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

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von dtp » 23.05.2017, 11:59

Ich selbst nutze keine Mails auf der CCU, weil ich sie gegenüber Push-Nachrichten für zu nachteilig empfinde. Daher möge man mir ggf. meine nachfolgenden Fragen verzeihen.

1. Was ist "Mails"? Eine von Dir angelegte Systemvariable? Falls ja, welchen Typs? Ich denke mal, vom Typ Zahl, oder?
2. Was machst Du mit der lokalen Variablen "x"? Wird die irgendwie vom Email-Addon verarbeitet?
3. Die Skriptzeilen

Code: Alles auswählen

var anzahl = dom.GetObject("Mails");
var x = anzahl.State(anzahl.State() + 1);
muten mir etwas seltsam an. Ich hätte das, sofern "Mails" vom Typ Zahl ist, eher folgendermaßen geschrieben, wobei Du dann auf die erste Skriptzeile verzichten kannst:

Code: Alles auswählen

dom.GetObject("Mails").State(dom.GetObject("Mails").Value() + 1);
Für Deine Probleme zeichnet sicherlich nicht CUxD verantwortlich. Fraglich ist auch, was Du in der Email-Vorlage 01 definiert hast.

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.

lips1
Beiträge: 103
Registriert: 13.10.2012, 20:29
Hat sich bedankt: 3 Mal

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von lips1 » 26.05.2020, 15:40

Hallo,
ich bin auf diese Anleitung gestoßen, weswegen ich sie wieder ausgrabe.

Ich habe auf einen Raspi3 piVCCU3 laufen und möchte die Temperatur vom Raspi in eine Variable spechern.
Dazu nutze ich folgenden Code.

Code: Alles auswählen

!- Temperatur von Raspberry3 unter piVCCU auslesen und in Systemvariable schreiben

string stdout;
string stderr;

!- Temperatur auslesen
!- system.Exec("cat /sys/class/thermal/thermal_zone0/temp", &stdout, &stderr);
dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("cat /sys/class/thermal/thermal_zone0/temp", &stdout, &stderr);

!- Umrechnung in °C
var temp = stdout.ToFloat() / 1000;

!- Formatierung mit 1 Nachkommastelle
temp = temp.ToString(1);

!- Systemvariable schreiben
dom.GetObject("Temperatur_PiVCCU").State(temp);
Laut Anleitung soll der system.Exec aufruf ersetzt werden, was ich gemacht habe. Allerding bekomme ich so eine Fehlermeldung.

Code: Alles auswählen

May 26 15:29:54 ccu3-webui local0.err ReGaHss: ERROR: ScriptRuntimeError: !- Temperatur von Raspberry3 unter piVCCU auslesen und in Systemvariable schreiben^M ^M string stdout;^M string stderr;^M ^M !- Temperatur auslesen^M !- system.Exec("cat /sys/class/thermal/thermal_zone0/temp", &stdout, &stderr);^M dom.GetObject("CUxD.CUX2801001:1.CMD_EXEC").State("cat /sys/class/thermal/thermal_zone0/temp", &stdout, &stderr);^M ^M !- Umrechnung in °C^M var temp = stdout.ToFloat() / 1000;^M ^M !- Formatierung mit 1 Nachkommastelle^M temp = temp.ToString(1);^M ^M !- Systemvariable schreiben^M dom.GetObject("Temperatur_PiVCCU").State(temp);^M  [ExecError():iseESPexec.cpp:12798]
Was muss ich noch anpassen?
Danke.
Lips
Zuletzt geändert von alchy am 26.05.2020, 22:04, insgesamt 1-mal geändert.
Grund: Code in Codetags posten
Rasp 3 mit piVCCU3, HM-Wired/Funk, 103 Geräte

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

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von Baxxy » 26.05.2020, 15:54

lips1 hat geschrieben:
26.05.2020, 15:40
ich bin auf diese Anleitung gestoßen, weswegen ich sie wieder ausgrabe.
Ich verweise mal auf eine "neue Anleitung".
Die sollte auf Anhieb funktionieren. :wink:

Grüße
Baxxy

lips1
Beiträge: 103
Registriert: 13.10.2012, 20:29
Hat sich bedankt: 3 Mal

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von lips1 » 26.05.2020, 21:49

Danke
Rasp 3 mit piVCCU3, HM-Wired/Funk, 103 Geräte

alchy
Beiträge: 10752
Registriert: 24.02.2011, 01:34
System: CCU
Hat sich bedankt: 65 Mal
Danksagung erhalten: 672 Mal

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von alchy » 26.05.2020, 22:22

lips1 hat geschrieben:
26.05.2020, 15:40
Laut Anleitung soll der system.Exec aufruf ersetzt werden, was ich gemacht habe. Allerding bekomme ich so eine Fehlermeldung.
Dein Script ist nur fehlerhaft bezüglich der CUxD Umschreibung.

So sollte es gehen:

Code: Alles auswählen

!- Temperatur von Raspberry3 unter piVCCU auslesen und in Systemvariable schreiben
string cmd = "cat /sys/class/thermal/thermal_zone0/temp";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string stdout = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
!- Umrechnung in °C
var temp = stdout.ToFloat() / 1000;
!- Formatierung mit 1 Nachkommastelle
temp = temp.ToString(1);
!- Systemvariable schreiben
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Temperatur_PiVCCU").State(temp);
Natürlich funktioniert das mit CUxD auch mit dem Befehl aus der "neuen Anleitung" :roll:

Code: Alles auswählen

string cmd = "cat /sys/class/thermal/thermal_zone0/temp | sed 's/.\{3\}$/.&/'";
dom.GetObject("CUxD.CUX2801001:1.CMD_SETS").State(cmd);
dom.GetObject("CUxD.CUX2801001:1.CMD_QUERY_RET").State(1);
string temp = dom.GetObject("CUxD.CUX2801001:1.CMD_RETS").State();
dom.GetObject(ID_SYSTEM_VARIABLES).Get("Temperatur_PiVCCU").State(temp);
Ob nun immer noch CUxD.exec statt system.exec verwenden werden muss, ist eine Glaubensfrage.
Früher definitiv ja, aber heutzutage ist system.exec schon viel stabiler.
Die Funktion ist aber in beiden Varianten gegeben.

Alchy

Blacklist................... almost full
Ignoranz ist die Summe aller Maßnahmen die man ergreift, um bestehende Tatsachen nicht sehen zu müssen.

© Sandra Pulsfort (*1974)

Lies bitte die Logik von WebUI Programmen und die Tipps und Tricks für Anfänger.

Wichtig auch CUxD ersetzt System.exec. Die HM Script Doku (Downloadart Skripte) hilft auch weiter.
Zum Testen von Scripten den >> HomeMatic Script Executor << von Anli benutzen.

Benutzeravatar
Black
Beiträge: 5463
Registriert: 12.09.2015, 22:31
System: Alternative CCU (auf Basis OCCU)
Wohnort: Wegberg
Hat sich bedankt: 418 Mal
Danksagung erhalten: 1069 Mal
Kontaktdaten:

Re: SystemExec durch CuxD ersetzen -> vorher / nachher

Beitrag von Black » 26.05.2020, 22:34

ob Cuxd oder system.exec ist eigentlich gleichwertig. Instabilitäten sind mir nicht mehr bekannt. früher war das schon anders.

cuxd exec setze ich nur noch bei 2 dingen ein.

1. um einen prozess wirklich sauber in den hintergrund zu bringen (genutzt in meinem tcl time Scheduler script) mit system exec wars mit seinerzeit nicht stabil gelungen

2. Um ein callback einer funktion auszuwerten (beispielsweite beim abfragen von geräten, webseiten via wget. hierbei wird durch programm ie anfrage abgeschickt, die rega wird dadurch nicht bis zur antwort oder dem timeout blockiert. bei eintreffen der antwort wird ein trigger ausgelöst, so das ein zweites programm die auswertung machen kann

Black
Wenn das Fernsehprogramm immer mehr durch nervende Werbung unterbrochen wird und der Radiomoderator nur noch Müll erzählt, ist es besser, die Zeit für sinnvolle Dinge zu nutzen -
mal aufs Klo zu gehen, ein Bier zu holen oder einfach mal den roten AUS-Knopf zu drücken. Klick - und weg

Script Time Scheduler V1.3
AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 5.03.01 Das umfassende Entwicklungs und Diagnosetool für Homematik
Selektive Backups - Nützliche Dinge, die die WebUI nicht kann

Intel NUC6 Celeron 16GB mit 512GB SSD unter Proxxmox mit insgesamt 5 VM: 2 x bloatwarebefreiter Raspberrymatik, 2 x IOBroker als Middleware und einer MariaDB zur Archivierung. Verbrauch: 6W

technical contribution against annoying advertising

Antworten

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