system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Einrichtung, Nutzung und Hilfe zu RaspberryMatic (OCCU auf Raspberry Pi)

Moderatoren: jmaus, Co-Administratoren

Benutzeravatar
jmaus
Beiträge: 5938
Registriert: 17.02.2015, 14:45
System: Alternative CCU (RaspberryMatic etc.)
Wohnort: Dresden
Hat sich bedankt: 14 Mal
Danksagung erhalten: 325 Mal
Kontaktdaten:

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von jmaus » 03.03.2020, 20:54

Wookbert hat geschrieben:
03.03.2020, 20:03
Der TE „Wookbert“ und Script-Autor „Dr. Woo“ sind ein und die selbe Person, meine Wenigkeit. Ich bin relativ unerfahren in Sachen Programmierung, deswegen muss ich mir die Sachen zusammenklauben, und mich per Trial & Error rantasten. Der Telegram-Pusher-Teil basiert Christian Lütgens’ Telegram-Framework-Homematic-Anleitung und funktioniert einwandfrei.
Nun, wenn du neu in der Homematic/ReGa-Skript Programmierung bist, dann sei die folgender Ratschlag an die Hand gegeben:

Die Skriptsprache die die WebUI der CCU bzw ReGHss bietet ist eine Krücke die man soweit es geht vermeiden sollte zu verwenden! Es gibt dort so viele lose Enden und Inkonsistenzen in der Skriptsprache, das man generell gut damit beraten ist so wenig wie möglich eigene Skriptprogramme in der WebUI einzusetzen!
Mein Ziel der vielen Programmteile ist/war, daß ich die langen Skripte nicht mehrfach in jedem Programm für jedes Fenster wiederhole, sondern globale Programmteile habe, die ich im Änderungsfall nur an einer Stelle anfassen und ändern muss, statt bei 12 Fenstern, wobei sich vermutlich Fehler einschleichen würden.
Den Wunsch Redundanzen im Quellcode verschiedener Programm zu vermeiden kann ich natürlich nachvollziehen, aber genau das ist einer der vielen Gründe wieso man unterm Strich davon abraten muss eigene (vor allem exzessive) Skripte mit der Homematic Skriptsprache umzusetzen weil man sich da zwangsläufig irgendwann in die Füße schiesst (wie jetzt auch bei dir geschehen).

Und ich muss wirklich dringend davon abraten in eigenen Skripts die nicht ohne Grund undokumentierte "ProgramExecute()" Funktion zu verwenden um Programme sich gegenseitig aufrufen zu lassen. Genau das und deine wohl sehr starke Nutzung der Homematic Skriptsprache wird der Grund sein wieso die WebUI Programmausführubg irgendwann bei dir zum Stillstand kommt.

Gerade für komplexe Logiken sollte man besser auf andere mehr stabile Logikengines wie ioBroker oder RedMatic setzeb und die Finger gänzlich von Homematic Skriptprogrammierung lassen!
RaspberryMatic 3.51.6.20200621 @ ESXi mit ~180 HomeMatic Geräten + ioBroker – GitHubGitHub Sponsors / PayPalTwitter

Wookbert
Beiträge: 195
Registriert: 10.05.2013, 18:40
Hat sich bedankt: 1 Mal

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von Wookbert » 04.03.2020, 00:34

Danke Jens, auch wenn Du mir nicht nur einen, sondern quasi alle Zähne ziehst.

Da beisst man sich durch, ist froh wenn man mit seinem nur begrenzt für das Coding geschaffene Gehirn die Sache mit der vom Hersteller mitgelieferten Skriptsprache zum Laufen kriegt, nur um dann zu erfahren, daß diese Bordmittel — sagen wir es direkt, wie es ist — buggy sind. Ich meine, wie Himmels Willen soll man das als Laie wissen!? (Wir erinnern uns an Nummer 5? So müsste man sich die schlappen 543.363 Beiträge dieses Forums (sic! Stand heute) reinziehen können).

Was heisst das nun also? Ich nutze die RaspberryMatic nur noch für die Geräte-Kommunikation/-Einrichtung und sehr einfache Programme? Für komplexere Logik ioBroker oder RedMatic? Oder überlässt man gleich besser die gesamte Logik einem dieser externen Tools?

Und auf welches Pferd setze ich jetzt besser: ioBroker oder RedMatic? Ich kann es mir — auch zeitlich — nicht erlauben, beides zu erlernen.

Wenn ich das richtig sehe, ist RedMatic wesentlich jünger und verfügt noch nicht über so viele Möglichkeiten/„Plug Ins“ wie ioBroker, aber, rein optisch spricht mich RedMatic wesentlich mehr an.

Nachtrag: Habe ich mir hier mit den „noch nicht so vielen Möglichkeiten“ gerade verhauen? —> Node-RED Library

Benutzeravatar
Black
Beiträge: 2972
Registriert: 12.09.2015, 22:31
System: Alternative CCU (RaspberryMatic etc.)
Wohnort: Wegberg
Hat sich bedankt: 44 Mal
Danksagung erhalten: 208 Mal
Kontaktdaten:

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von Black » 04.03.2020, 06:46

Ich drücke mich mal so aus... wenn man weiss was man tut, kann die scriptsprache der ccu ein gutes hilfsmittel bei.der hausautomatisierung sein.man sollte alles aber bewusst einsetzen.

Wenn eine ccu einer Visualisierung erst die Daten aufbereiten muss weil die Visualisierung dort Lücken hat... ist die visu die falsche. Eine ccu muss auch keine spritpreise holen oder eine kalenderverwaltung machen. (Meine meinung)

Der Stil mit dem programexecute ist halt nicht grade gelungen gewesen. Gegenseitiges aufrufen ist dann Call Ping Pong.

Was mit der scriptsprache so alles geht zeigt u.a. der SDV, der recht intensiven Gebrauch von einem ganzen Haufen normalerweise undokumentierte Methoden macht. (Selektive programmbackups, gerätebackups, geräteparaneter tauschen etc sowie konsistenztests als ein paar wenige aufgezeigte punkte)

Black

Als übergeordnetes System über den gewerken bietet sich natürlich dann iobroker an (datenbankanbindung, Verknüpfung verschiedenster Hersteller etc)
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.51.6.20200420 mit Groundplane Antennenmod
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
Howto - AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 3.11.04 Scripteditor und Objektinspektor

technical contribution against annoying advertising

Gerti
Beiträge: 1533
Registriert: 28.01.2016, 18:06
Hat sich bedankt: 6 Mal
Danksagung erhalten: 41 Mal

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von Gerti » 04.03.2020, 07:06

Hi!

Das man Skripte vermeiden sollte, kann ich so nicht stehen lassen.
Ich habe derzeit knapp 200 Programme auf der Zentrale laufen, von denen fast alle ein oder mehrere Skripte beinhalten.
Die Skriptsprache hat die ein oder andere Eigenheit, ist ansonsten aber ein tolles und verlässliches Werkzeug.
Einige Dinge ließen sich nur durch Skripte lösen, andere waren durch ein Skript viel einfacher zu lösen.
Ich habe 98% meiner Skripte selbst geschrieben und alle Skripte laufen seit über drei Jahren völlig fehlerfrei.

Den Ansporn, möglichst viele Funktionen in möglichst wenig Programme zu packen, hatte ich Anfangs auch.
Heute schreibe ich lieber ein zusätzliches Programm, weil es am Ende die Programmierung einfacher macht, es übersichtlicher bleibt und man Fehler vermeiden kann.

Gruß
Gerti

MichaelN
Beiträge: 424
Registriert: 27.04.2020, 10:34
System: CCU
Hat sich bedankt: 39 Mal
Danksagung erhalten: 31 Mal

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von MichaelN » 19.06.2020, 08:59

jmaus hat geschrieben:
03.03.2020, 20:54

Die Skriptsprache die die WebUI der CCU bzw ReGHss bietet ist eine Krücke die man soweit es geht vermeiden sollte zu verwenden! Es gibt dort so viele lose Enden und Inkonsistenzen in der Skriptsprache, das man generell gut damit beraten ist so wenig wie möglich eigene Skriptprogramme in der WebUI einzusetzen!

Gerade für komplexe Logiken sollte man besser [...] die Finger gänzlich von Homematic Skriptprogrammierung lassen!
Hallo Jens,
ich bin auf diesen "alten" Thread gestoßen und etwas erschüttert. Die Skript-Möglichkeit war für mich ein wichtiges Argument mich für HM zu entscheiden. Und jetzt stehe ich da und frage mich ???

Gilt dein Rat nur für Megaprogramme, wie eine komplexe Rolladensteuerung in Skriptsprache oder auch schon für viele kleine 5-zeiler, die eine Berechnung durchführen, einen Vergleich ausführen... Immerhin hast Du die Skriptsprache ja noch um einige Befehle für solche Geshcichten erweitert.

Gerti
Beiträge: 1533
Registriert: 28.01.2016, 18:06
Hat sich bedankt: 6 Mal
Danksagung erhalten: 41 Mal

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von Gerti » 19.06.2020, 09:09

Hi!

Lass Dich nicht verunsichern.
Wie ich in meinem Beitrag davor schon geschrieben habe, laufen die Skripte absolut stabil.
Man muss manchmal etwas "umständlich" programmieren, ansonsten ist die Skriptsprache nicht so schlecht, wie sie immer gemacht wird.

Gruß,
Gerti

Wookbert
Beiträge: 195
Registriert: 10.05.2013, 18:40
Hat sich bedankt: 1 Mal

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von Wookbert » 19.06.2020, 09:26

Wenn es darum ginge das HM Skripting erst erlernen zu müssen, dann würde ich mich, mit der Erkenntnis, die ich jetzt habe, erst gar nicht mit den HM Skripts, sondern direkt mit REDmatic beschäftigen. Das scheint mir die wesentlich stabilere Lösung, vor allem auch für komplexe „Skripts“ bei denen HM Skript — intransparent für den Nutzer — in die Knie geht.

Einziger Nachteil bei REDmatic ist, dass es hier nicht so viele Beispiele wie bei HM Skripts gibt.

Benutzeravatar
Black
Beiträge: 2972
Registriert: 12.09.2015, 22:31
System: Alternative CCU (RaspberryMatic etc.)
Wohnort: Wegberg
Hat sich bedankt: 44 Mal
Danksagung erhalten: 208 Mal
Kontaktdaten:

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von Black » 19.06.2020, 10:12

Mit hmscript kann man schon eine Menge machen. Und wenn man so die Stolperfallen kennt laufen so Systeme, wie gerti auch schon anmerkte , auch extrem stabil.

Eine der Stolperfallen ist Programm ping pong ala execute. Und hängende abfragen über wget mit System exec.
Ich predige ja immer.. wenn eine seite abfragen wo man die Antwort benötigt... cuxd nehmen und in 2 Programmen als callback schreiben
Dann hängt auch nix


Black
Die Wahrheit ist ein Chor aus Wind
Meine Seite, ok noch bisschen im Aufbau

RaspberryMatic 3.51.6.20200420 mit Groundplane Antennenmod
jede Menge Sensoren und Aktoren, Logamatic 2107 Gateway zum Buderus Kessel
ioBroker unter ProxMox auf NUC als Hauptsteuersystem und Visualisierung
Script Time Scheduler V1.3
Howto - AstroSteuerung über Zeitmodul flexibel mit Offset / spätestens, frühestens
SDV 3.11.04 Scripteditor und Objektinspektor

technical contribution against annoying advertising

Benutzeravatar
jmaus
Beiträge: 5938
Registriert: 17.02.2015, 14:45
System: Alternative CCU (RaspberryMatic etc.)
Wohnort: Dresden
Hat sich bedankt: 14 Mal
Danksagung erhalten: 325 Mal
Kontaktdaten:

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von jmaus » 19.06.2020, 10:40

MichaelN hat geschrieben:
19.06.2020, 08:59
jmaus hat geschrieben:
03.03.2020, 20:54

Die Skriptsprache die die WebUI der CCU bzw ReGHss bietet ist eine Krücke die man soweit es geht vermeiden sollte zu verwenden! Es gibt dort so viele lose Enden und Inkonsistenzen in der Skriptsprache, das man generell gut damit beraten ist so wenig wie möglich eigene Skriptprogramme in der WebUI einzusetzen!

Gerade für komplexe Logiken sollte man besser [...] die Finger gänzlich von Homematic Skriptprogrammierung lassen!
ich bin auf diesen "alten" Thread gestoßen und etwas erschüttert. Die Skript-Möglichkeit war für mich ein wichtiges Argument mich für HM zu entscheiden. Und jetzt stehe ich da und frage mich ???

Gilt dein Rat nur für Megaprogramme, wie eine komplexe Rolladensteuerung in Skriptsprache oder auch schon für viele kleine 5-zeiler, die eine Berechnung durchführen, einen Vergleich ausführen... Immerhin hast Du die Skriptsprache ja noch um einige Befehle für solche Geshcichten erweitert.
Eigentlich dachte ich ich hätte es ausreichend genug detailliert beschrieben. Natürlich gilt meine Aussage nicht komplett pauschal und natürlich ist es vollkommen OK und i.O. wenn man diese für 5-zeiler d.h. für ausreichend einfache skriptprogrammierung nutzt. Deshalb hatte ich ja etwas von "komplexe Logiken" geschrieben. Meiner Meinung nach sollte man - nur weil es die möglichkeit gibt - jetzt eben nicht anfangen komplexe "Megaprogramme" zu schreiben die vielleicht auch noch irgendwelche abhängigkeiten zu externen Geräten/Programmen haben. Man muss einfach wissen welche Fallstricke es so gibt und was die Do and Don't so sind. Denn selbst mit einemn Einzeiler Skript kann man sich bereits in die Füße schiessen, siehe dazu z.B. die folgenden Beiträge:

viewtopic.php?f=65&t=59349&start=70#p588627

Wie dort zu sehen ist, reicht schon ein einfacher system.Exec()+wget Einzeiler um die gesamte Zentrale ins Wanken zu bekommen.

Wenn man allerdings um all die möglichen Einschränkungen und Umstände rund um die HM-Skriptsprache weiss kann man damit natürlich sehr gut arbeiten. Nur eben sollte man irgendwann IMHO aufhören seine Skriptprogramme immer weiter komplexer zu machen. Denn spätesten wenn man sich denkt "Mist, warum gibt es keine Funktionen in der Skriptsprache" oder "Warum kann ich nicht einen Teile eines anderen Skriptes aus einem anderen Programm heraus aufrufen" ist man IMHO an einem Punkt angelangt bei dem man besser Aussschau nach Alternativen (ioBroker, RedMatic, etc.) halten sollte weil diese die weitaus mächtigere Skriptsprache mit sich bringt und weniger solcher direkter Fallstricke hat.
RaspberryMatic 3.51.6.20200621 @ ESXi mit ~180 HomeMatic Geräten + ioBroker – GitHubGitHub Sponsors / PayPalTwitter

dtp
Beiträge: 8438
Registriert: 21.09.2012, 08:09
System: CCU
Wohnort: Stuttgart
Hat sich bedankt: 69 Mal
Danksagung erhalten: 200 Mal

Re: system.Exec: Meiden oder nicht? – Sämtliche Programme sind tot!

Beitrag von dtp » 19.06.2020, 11:59

Wookbert hat geschrieben:
29.02.2020, 21:02
...habe ich den umständlichen Weg über den CUxD überall rausgeschmissen, und kratze mich nun am Kopf was ich tun soll.
Was ist denn an dem Aufruf per CUxD umständlich? Einmal eingerichtet (eine Sache von 2 Minuten) ist es doch immer derselbe Aufruf, den man da verwenden kann.

Code: Alles auswählen

(dom.GetObject(ID_DATAPOINTS).Get("CUxD.CUX2801001:1.CMD_EXEC")).State("/usr/bin/curl ...");
Ich nutze den Exec-Aufruf per CUxD bei mir nun seit 2012 ohne ein einziges Problem. Daher sehe ich überhaupt keine Notwendigkeit, wieder auf system.Exec umzusteigen, so gut das mittlerweile auch funktionieren mag.

Zu der Aussage von Jens zu den HM-Skripten. Also mein längstes Skript hat aktuell knapp über 500 Zeilen (inkl. einiger Leerzeilen). Ich benutze es zur Rollladensteuerung und es läuft soweit einwandfrei. Im Endeffekt besteht das Skript aber aus einer foreach-Schleife mit entsprechenden Aufrufen einzelner Geräte. Der Rest sind Abfragen und "Kosmetik". Hätte aber gar keine Lust, das in Javaskript für den ioBroker oder in einer anderen Sprache umzuschreiben. Wozu auch? Läuft ja.

Man kann mit HM-Skripten schon eine ganze Menge machen, finde ich. Und sie funktionieren auch, wenn man sie sauber schreibt. Aber das ist mit Skripten, Sketches, Routinen und Programmen anderer Sprachen nicht anders.

Im Übrigen haben die Inuit bekanntlich 50 Wörter für Schnee. Wir haben ungleich weniger. Trotzdem kommen wir gut durch den Winter. ;)

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.

Antworten

Zurück zu „RaspberryMatic“