In diesem Quicktipp möchte ich euch eine Möglichkeit zeigen, wie ihr ein Programm aus einem Programm heraus aufrüfen bzw. starten könnt. Es existiert in einer HomeMatic Installation nicht die Möglichkeit über die WebUI Unterprogramme oder sogenannte Subroutinen auszuführen. Über ein kleines Skript können wir diese fehlende Möglichkeit jedoch in jedem Programm einbauen. Somit haben wir die Chance, Teilaufgaben sinnvoll aufzuteilen in einzelne kleine Programme. Dies macht die ganze Sache übersichtlicher und es müssen nicht die gleichen Aktionen in mehreren Programmen eingebaut werden. Ich denke die ein oder andere Idee für eine solche Variante fällt jedem Anwender sofort ein. Da es sich um einen kleinen Zweizeiler handelt, sind auch keine grundlegenden Skriptkenntnisse erforderlich.

Programmaufruf in WebUI Programm einbauen

Wie bereits oben erwähnt, müsst ihr lediglich ein kleines Skript im entsprechenden Programm ausführen und in diesem Skript den Programmnamen des aufzurufenden Programmes eintragen.

Aufgrund des wirklich guten Hinweises von Jérôme Pech ( Jérôme , Danke für den Kommentar), habe ich das Skript ein wenig erweitert. Damit sichergestellt wird, das auch wirklich das Programm mit dem gewünschten Namen und nicht das erste gefundene Objekt mit dem gleichen Namen (was nicht zwangsläufig ein Programm sein muss) aufgerufen wird, habe ich „ID_PROGRAMS“ eingebaut. Zusätzlich frage ich über „if (prgObj.Active()“ ab, ob das aufgerufene Unterprogramm auch auf „aktiv“ steht und nicht mit Absicht „inaktiv“ ist. Ist das Unterprogramm auf „inaktiv“ definiert (Haken bei aktiv raus), wird es nicht aufgerufen. Auf die Abfrage ob da Unterprogramm existiert, habe ich bewusst verzichtet. Ein Test hat gezeigt, dass das Skript ausgeführt wird, aber nichts zum Aufrufen findet, wenn das Unterprogramm nicht existiert. Somit ist aus einen Quicktipp eine richtig runde Sache geworden. Die Writeline commands sind eigentlich nur für den Test drin. Könnt ihr rausnehmen, stören aber auch nicht!

Beispiel

In dem folgenden Screenshot seht ihr ein Testprogramm in dem wir über diese Möglichkeit ein weiteres Programm starten:

Das folgende Unterprogramm wurde ausgeführt:

Viel Spass beim Ausprobieren.

2 Kommentare
  1. Avatar
    Jerome sagte:

    Es sollte grundsätzlich berücksichtigt werden, dass Bezeichnungen in der CCU mehrfach vorkommen können.
    So kann bspw. eine Systemvariable genau so heißen wie ein Gerät, ein Kanal wie ein Raum usw.

    dom.GetObject(„NAME_DES_PROGRAMMS“); liefert dabei das erste gefundene Objekt mit dem Namen zurück.
    Das kann u.U. nicht das Programm sein.

    Es ist daher best practice, den Objekttyp bei der Abfrage anzugeben und auch vor dem Execute zu prüfen, ob tatsächlich das Programm vorhanden ist:
    object pgmObj = dom.GetObject(ID_PROGRAMS).Get(„NAME_DES_PROGRAMMS“);
    if (pgmObj) {
    pgmObj.ProgramExecute();
    }

    Man könnte zusätzlich noch prüfen, ob das auszuführende Programm überhaupt aktiviert ist, um „Zwangsausführungen“ trotz bewusstem Deaktivieren (Fehlersuche, Debugging) zu verhindern.

    Antworten
    • Werner
      Werner sagte:

      Hallo Jérôme,

      vielen Dank für deinen wirklich sinnvollen Hinweis. Ich habe das Skript erweitert, getestet und den Artikel aktualisiert.

      Gruss
      Werner

      Antworten

Dein Kommentar

An Diskussion beteiligen?
Hinterlasse uns Deinen Kommentar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.

Ich akzeptiere die Speicherung der Daten.