Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. JavaScript
    5. Trigger bestimmtes Script

    NEWS

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    Trigger bestimmtes Script

    This topic has been deleted. Only users with topic management privileges can see it.
    • T
      TobStar last edited by

      Hallo zusammen,

      ich versuche ein wenig mehr Übersicht in meine Scripte zu bekommen und stelle mir aktuell die Frage ob es möglich ist aus einem Script ein anderes aufzurufen.

      In meinem konkretem Beispiel verwende ich sehr oft die Anwesenheitsprüfung, diese findet sich in zig Scripts. Nun wäre es aber schön, wenn man ein Script hätte das den Status der Anwesenheit prüft und dann im bestimmten Fall Funktion x, y in einem anderem Script ausführt.

      Wäre so etwas möglich? Ich möchte aber eben nicht alles nach Global schieben 🙂

      A paul53 Albert K 3 Replies Last reply Reply Quote 0
      • A
        Ahnungsbefreit @TobStar last edited by

        @TobStar ich habe das über states in userdata.0 gelöst. Dort schreibt ein Script etwas rein (z.B. mehrere Parameter, durch Punkt getrennt) und das andere Script reagiert auf Änderungen dieses States und liest die Parameter aus. Das geht in JS und auch in Blockly einwandfrei...

        T 1 Reply Last reply Reply Quote 0
        • paul53
          paul53 @TobStar last edited by

          @TobStar sagte:

          Anwesenheitsprüfung, diese findet sich in zig Scripts.

          Ist die Prüfung so aufwändig ?

          T 1 Reply Last reply Reply Quote 0
          • T
            TobStar @Ahnungsbefreit last edited by

            @Ahnungsbefreit dann hast Du aber wieder in jedem der Scripte die Prüfung auf Änderung drin. Ich wollte gerne ein Trigger Script, das dann ein anderes Script startet, ohne zusätzliche Datenpunkte quasi 😉

            paul53 1 Reply Last reply Reply Quote 0
            • T
              TobStar @paul53 last edited by

              @paul53 Nein das nicht, aber es bläht die Scripte halt auf und wenn man mal etwas verändert muss man das ggf. an zig Stellen tun.

              amg_666 1 Reply Last reply Reply Quote 0
              • paul53
                paul53 @TobStar last edited by

                @TobStar sagte:

                ohne zusätzliche Datenpunkte quasi

                Man kann Werte von Skript zu Skript nur über Datenpunkte übergeben.

                1 Reply Last reply Reply Quote 1
                • Albert K
                  Albert K @TobStar last edited by

                  @TobStar

                  Du musst ja nur die Anwesenheits Prüfung in ein eigenes Skript mit einem Status Datenpunkt, der ja dann permanent aktualisiert wird, auslagern. (so wie das @Ahnungsbefreit wohl auch meint)

                  Ab da können ja alle anderen Skripte auf diesen Status Datenpunkt zugreifen. Entweder als Trigger oder auch in Abfragen. Ich habe zig Skripte die Anhand vom Anwesenheits Status schalten und walten.

                  Eine Möglichkeit wie Du das ungefähr haben willst ist vielleicht dass ein Skript ein anderes aktiviert/deaktiviert. Ich verwende das auch, aber nur spärlich, zB schaltet bei mir ein Skript mit einem Zeitplan mein Heizungs Skript im Sommer aus und im Winter ein (wenn ich das Heizungs Skript 6 Monate nicht brauche, muss das ja auch nicht laufen und ständig Thermometer, Stellmotore etc überwachen). Das ist irgendwie so wie die Holzhammer Methode, Trigger sind schon wesentlich eleganter. Vielleicht musst Du auch nur Deine Denkweise etwas anpassen 😊

                  T 1 Reply Last reply Reply Quote 0
                  • T
                    TobStar @Albert K last edited by

                    @Albert-K aktuell läuft das ja auch alles über Datenpunkte. Nur wäre es manchmal ganz nützlich wenn man direkt ein anderes Script ansprechen könnte ohne ständig Datenpunkte aus / einzulesen. Bei mir ging es gerade um die Videoüberwachung die bei Abwesenheit eingeschalten wird. Hab das ganze nun nach Globals ausgelagert und spreche dann die einzelnen Funktionen darüber an.

                    Elegant wäre es halt wenn man nun aus dem einen Script eine Funktion in einem anderem Script aufrufen könnte, samt Parameter. Z.b. /scripts/Video.js -aktivieren o.ä.

                    Albert K paul53 2 Replies Last reply Reply Quote 0
                    • amg_666
                      amg_666 @TobStar last edited by

                      @TobStar So ganz verstehe ich das Problem nicht. Skripte starten nur über einen Trigger (Variablenwert, Uhrzeit etc).
                      Wenn du aus einem Skript ein anderes starten willst, dann geht das so nicht. Das andere Skript wartet ja auf einen Trigger und den müsste das aufrufende Skript erst setzen.
                      Du kommst also imho nicht darum herum, einen Triggerwert abzufragen in jedem Skript, das bei einem bestimmten Ereignis laufen soll. Und wenn es um Anwesenheit geht, dann hast du doch eintweder einen Datenpunkt (z.B. im radar2-Adapter) oder du hast eine Variable definiert "Anwesenheit". Und die fragst du im Trigger ab. Wirklich aufwändig ist das nicht...

                      A T 2 Replies Last reply Reply Quote 1
                      • A
                        Ahnungsbefreit @amg_666 last edited by

                        @amg_666 So sehe ich das auch.

                        1 Reply Last reply Reply Quote 0
                        • T
                          TobStar @amg_666 last edited by TobStar

                          @amg_666 es ist ja auch kein Problem, die Frage war nur ob es hier eine weitere Möglichkeit gibt um das auf diese Art zu lösen. Scheinbar nicht.

                          Es ist ja auch eine Frage der Performance-Steuerung. Wenn ich z.B. diverse Scripte habe die eine Aktion um eine bestimmte Uhrzeit ausführen sollen, dann würde man z.B. Per Cron (* * * * *) jedes einzelne Script jede Minute starten um zu prüfen ob Zeit X gleich der gewünschten ist. Praktischer wäre ein einzelnes Script das jede Minute läuft und dann zu entsprechenden Uhrzeit eines dieser Scripte mit entsprechendem Parameter aufruft.

                          Klar könnte man das auch umsetzen indem man zusätzlich zum Datenpunkt STARTEUMUHRZEIT einen weiteren Trigger-Datenpunkt erzeugt der dann im jeweiligem Script etwas ausführt, aber dann wird es auch irgendwann sehr unübersichtlich.

                          Es geht also nicht darum ob es schwierig ist oder wo das Problem ist, es geht einzig darum ob es besser gelöst werden kann. Ich komme aus der Webentwicklung und weiß daher das es an sich möglich ist, die Frage war nur ob sich dies auch in ioBroker umsetzen lässt.

                          Edit: Ja die Global Scripte gäben das her.

                          paul53 Albert K 2 Replies Last reply Reply Quote 0
                          • Albert K
                            Albert K @TobStar last edited by Albert K

                            @TobStar

                            Du musst ja nur EINEN Datenpunkt abfragen, jemand zu Hause dann mach dies, niemand zu Hause dann mach das.

                            Ich habs auch bei der Video Überwachung. Sobald der Status auf "alle abwesend" springt, werden die Kameras und Bewegungsmelder scharf geschaltet.

                            @amg_666
                            das ist nicht ganz richtig. Ein Skript muss nicht unbedingt einen Trigger haben. Ein Skript läuft automatisch ab wenn es aktiviert wird (der rote Pfeil rechts neben dem Namen) und das kann man per Blockly in einem anderen Skript ein/ausschalten. In gewissen Fällen macht das Sinn, aber nicht generell.

                            1 Reply Last reply Reply Quote 0
                            • paul53
                              paul53 @TobStar last edited by

                              @TobStar sagte:

                              Ja die Global Scripte gäben das her.

                              Sie werden aber in jedes normale (nicht globale) Script kopiert.

                              T 1 Reply Last reply Reply Quote 0
                              • T
                                TobStar @paul53 last edited by

                                @paul53 Richtig, deshalb will ich es darüber auch nicht tun 😉

                                1 Reply Last reply Reply Quote 0
                                • Albert K
                                  Albert K @TobStar last edited by

                                  @TobStar said in Trigger bestimmtes Script:

                                  Es ist ja auch eine Frage der Performance-Steuerung. Wenn ich z.B. diverse Scripte habe die eine Aktion um eine bestimmte Uhrzeit ausführen sollen, dann würde man z.B. Per Cron (* * * * *) jedes einzelne Script jede Minute starten um zu prüfen ob Zeit X gleich der gewünschten ist. Praktischer wäre ein einzelnes Script das jede Minute läuft und dann zu entsprechenden Uhrzeit eines dieser Scripte mit entsprechendem Parameter aufruft.

                                  Und genau das ist hier nicht der Fall. Das Skript wird gestartet und wartet darauf dass der Trigger ausgelöst wird/wahr wird (z.B. die Uhrzeit die Du im Trigger festgelegt hast), und wenn das erfolgt laufen die Aktionen im Skript ab.

                                  1 Reply Last reply Reply Quote 0
                                  • paul53
                                    paul53 @TobStar last edited by paul53

                                    @TobStar sagte:

                                    aus dem einen Script eine Funktion in einem anderem Script aufrufen könnte, samt Parameter.

                                    Du kannst eigene Module erstellen und diese mittels require('meinModul') in das Skript einbinden. Es funktioniert zwar ähnlich den globalen Funktionen mit dem Unterschied, dass man Module nur dort einbindet, wo sie gebraucht werden.

                                    T 1 Reply Last reply Reply Quote 0
                                    • T
                                      TobStar @paul53 last edited by

                                      @paul53 danke dir, das zielt doch schon in die Richtung die ich anstrebe.

                                      1 Reply Last reply Reply Quote 0
                                      • First post
                                        Last post

                                      Support us

                                      ioBroker
                                      Community Adapters
                                      Donate

                                      755
                                      Online

                                      31.8k
                                      Users

                                      80.0k
                                      Topics

                                      1.3m
                                      Posts

                                      5
                                      17
                                      781
                                      Loading More Posts
                                      • Oldest to Newest
                                      • Newest to Oldest
                                      • Most Votes
                                      Reply
                                      • Reply as topic
                                      Log in to reply
                                      Community
                                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                      The ioBroker Community 2014-2023
                                      logo