Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Skripten / Logik
    4. Blockly
    5. JS automatisch beim Start des Dockers ausgeführt? Warum?

    NEWS

    • Wir empfehlen: Node.js 22.x

    • Neuer Blog: Fotos und Eindrücke aus Solingen

    • ioBroker goes Matter ... Matter Adapter in Stable

    JS automatisch beim Start des Dockers ausgeführt? Warum?

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

      Hallo zusammen,

      ich bin relativ neu beim ioBroker und hab jetzt mal folgendes gemacht:

      • ioBroker als Docker Container auf dem Server deployed (Network = host wegen Wake on LAN)
      • ein paar Adapter eingebunden, u.A. Alexa, ioBroker IOT, KODI Steuerung oder Samsung-tizen
        (https://github.com/dahuby/iobroker.samsung_tizen)
      • zwei Java Skripte, die jeweils den Fernseher und und den KODI-PC mit Wake on LAN aufwecken können
      • ein paar Blockly Skripte, die dann als Alexa Szenen mit Routinen aufgerufen werden können.

      Soweit funktioniert das alles wunderbar. Bis ein Problem:

      Jedesmal wenn ich den Docker Container neu starte, werden scheinbar diese beiden Java Scripte irgendwie automatisch ausgeführt. Sowohl der Fernseher als auch KODI schalten sich an. Habt ihr eine Idee warum das so ist? Oder wie ich mich der Sache nähern kann?

      Danke für eure Tips!

      UncleSam 1 Reply Last reply Reply Quote 0
      • UncleSam
        UncleSam Developer @pipsen last edited by

        @pipsen Wenn ioBroker startet, werden alle Skripte ausgeführt. Wenn du in Skripten nun einfach etwas machst ohne auf einen Trigger zu hören (z.B. State Änderung), dann wird das logischerweise beim Start von ioBroker ausgeführt.

        Ohne deine Skripte zu sehen ist es aber sehr schwierig, abzuschätzen, was genau das Problem ist. Könntest du zumindest eines der beiden hier posten (bitte in Code Tags </>).

        P 1 Reply Last reply Reply Quote 0
        • P
          pipsen @UncleSam last edited by pipsen

          Also die "Hauptskripte", die ich als Alexa Szene zur Verfügung stelle, sind Blockly. Da ich aber in Blockly kein Wake on LAN machen kann, hab ich mir zwei "Hilfs-Java-Skripte" gebaut, die einfach nur zwei-Zweiler sind:

          var wol = require('wake_on_lan');
          wol.wake('20:DE:20:DE:20:DE');
          

          Diese Skripte führe ich dann im Blockly Skript an der richtigen Stelle aus.

          Die beiden gelben JS werden scheinbar automatisch gestartet, die Blocklys alle nicht.
          scripts.png

          Wie kann ich jetzt für diese beiden JavaSkripte den Autostart abschalten, so dass sie nur innerhalb der Blockly Skripte "on demand" ausgeführt werden. wenn durch die Alexa Szene der Trigger kommt?

          Danke!

          btw.... falls ein Admin das sieht: Das Topic gehört aus Blockly raus und in JS rein.. kann das jemand verschieben? Sorry und Danke!

          UncleSam Asgothian 2 Replies Last reply Reply Quote 0
          • UncleSam
            UncleSam Developer @pipsen last edited by

            @pipsen Ich würde grundsätzlich nicht mit Skript Ein/Ausschalten arbeiten. Das macht (wie du jetzt siehst) nur Probleme.

            Erstelle einen Datenpunkt, den du dann im Skript "abfragst" (mit subscribe()). Das ist dann dein Trigger.

            Die Blocklys werden übrigens auch alle automatisch gestartet (sieh das grüne Icon hinter dem Skript-Name), aber jedes Blockly reagiert wohl nur auf einen Trigger und führt nicht einfach etwas aus.

            1 Reply Last reply Reply Quote 0
            • Asgothian
              Asgothian Developer @pipsen last edited by

              @pipsen sagte in JS automatisch beim Start des Dockers ausgeführt? Warum?:

              Also die "Hauptskripte", die ich als Alexa Szene zur Verfügung stelle, sind Blockly. Da ich aber in Blockly kein Wake on LAN machen kann, hab ich mir zwei "Hilfs-Java-Skripte" gebaut, die einfach nur zwei-Zweiler sind:

              Es gibt in Blockly einen Baustein "JS Funktion aufrufen". In diesen kannst du den 2-Zeiler als JS Code einfügen, dann sollte es gehen.

              A.

              P 1 Reply Last reply Reply Quote 0
              • P
                pipsen @Asgothian last edited by

                Danke für die Tipps. Zum Thema Datenpunkte kann ich nix sagen, damit kenn ich mich leider noch nicht aus.
                Aber was mir auf jeden Fall geholfen hat: Ich hab einfach alle Skripte von Play auf Pause umgeschaltet. Die Alexa Trigger gehen damit immer noch, und der Autostart Effekt beim Docker restart sind weg 🙂

                @Asgothian: Deinen Tipp setz ich zusätzlich noch um, das Java Script direkt in Blockly mit einzubauen, ohne es extra auszulagern. Ist dann auch aufgeräumter und integrierter.

                AlCalzone 1 Reply Last reply Reply Quote 0
                • AlCalzone
                  AlCalzone Developer @pipsen last edited by

                  @pipsen sagte in JS automatisch beim Start des Dockers ausgeführt? Warum?:

                  Zum Thema Datenpunkte kann ich nix sagen, damit kenn ich mich leider noch nicht aus.

                  Schau dir das auf jeden Fall mal an. Skripte sollten (wie meine Vorredner schon gesagt haben) immer "laufen" und auf Datenpunkte triggern. Viele Skripte, die hier im Umlauf sind, legen ihre Trigger-Datenpunkte auch gleich mit an, das kannst du dir abschauen.

                  Sie ständig zu starten und zu stoppen sorgt immer wieder für seltsame Probleme und hat das von dir beschriebene Problem, dass sie beim Systemstart auch ausgeführt werden.

                  P 1 Reply Last reply Reply Quote 1
                  • P
                    pipsen @AlCalzone last edited by pipsen

                    @alcalzone said in JS automatisch beim Start des Dockers ausgeführt? Warum?:

                    @pipsen sagte in JS automatisch beim Start des Dockers ausgeführt? Warum?:

                    Zum Thema Datenpunkte kann ich nix sagen, damit kenn ich mich leider noch nicht aus.

                    Schau dir das auf jeden Fall mal an. Skripte sollten (wie meine Vorredner schon gesagt haben) immer "laufen" und auf Datenpunkte triggern. Viele Skripte, die hier im Umlauf sind, legen ihre Trigger-Datenpunkte auch gleich mit an, das kannst du dir abschauen.

                    Sie ständig zu starten und zu stoppen sorgt immer wieder für seltsame Probleme und hat das von dir beschriebene Problem, dass sie beim Systemstart auch ausgeführt werden.

                    Okay hab ich verstanden. Ich hab jetzt einen boolschen Datenpunkt erstellt und in den Skripten gesagt: Sobald sich der Wert ändert: Löse aus - soweit, sogut.

                    Jetzt hätte ich noch ein paar weitere Fragen:

                    1. Wenn ich zwei Skriptabläufe schreibe, die quasi gegenläufig sind z.B.:
                    • fahre alles im Wohnzimmer geregelt hoch
                    • fahre alles im Wohnzimmer geregelt runter
                      => Ist es dann besser, zwei Datenpunkte zu erstellen und die zwei quasi bei jedem "toggeln" zu triggern, oder ist es eleganter, nur einen Datenpunkt dafür zu erstellen und dann zu sagen: bei true => Skript1, bei false => Skript2
                    1. Was ist jetzt der eleganteste Weg, das mit einem Alexa Sprachbefehl zu verkoppeln? Als welchen Typ lege ich das in IOT an?
                      Switch? Activity Trigger? Szene Trigger? Oder "Kein Typ"? Ein Switch könnte das mit dem true / false ganz gut abbilden oder?

                    2. Ich hab einerseits Skripte, die eine an- und eine aus-Prozedur haben. Da bieten sich Schalter an. Gibts auch eine Möglichkeit, eine Prozedur direkt aufzurufen? Quasi wie ein "Button", der keinen Zustand hat? z.B. "Alexa, spiel mein Lieblingslied"... und dann spielt er das ab. Welche Art Datenpunkt nimmt man da? Bool/Schalter/Zahl/etc.. macht keinen Sinn, aber Button frisst IOT nicht 😞

                    3. Ich hab ein Problem mit dem einbinden von JavaScript ins Blockly. Das ist jetzt so ein losgelöster Block, der sich nicht "andocken" lässt. Was mach ich da falsch? Ich hätte das gern unter die Stehlampe an eingefügt.

                    java.png

                    Danke für eure Hilfe!

                    Asgothian 1 Reply Last reply Reply Quote 0
                    • Asgothian
                      Asgothian Developer @pipsen last edited by

                      @pipsen Du hast mit dem Block die Funktion erzeugt.. es gibt auch noch diesen Block, aber erst nachdem du die Funktion definiert hast

                      Das hängst du an die Stehlampe an

                      Screen Shot 2021-01-25 at 23.20.13 .png

                      P 1 Reply Last reply Reply Quote 0
                      • P
                        pipsen @Asgothian last edited by

                        @asgothian
                        Super danke... zufällig hab ich das vor ein paar Minuten selbst entdeckt. Nachdem ich den Namen vergeben hab, hab ich nicht mehr rechts ins Menü geschaut.

                        Mittlerweile kann ich mir selbst zu den vier Fragen schon einige Antworten geben (falls jemand noch ähnliche Probleme hat):

                        1. Ja, bei zwei gegenläufigen Skripten macht ein Schalter mit zwei Zuständen Sinn (true/false), der dann mit Sprachsteuern an/aus jeweils ein anderes Skript triggert. => Passt

                        2. Ich hab jetzt immer den Datenpunkt Typ "Logikwert" genommen und dann als Rolle "Switch" gewählt (wichtig, sonst nimmt IOT den Datenpunkt nicht!). Als Alexa Typ hab ich jetzt immer Schalter gewählt, so kann man auch mal in der Alexa App schnell hin und her schalten, wenn man will.

                        3. Dafür hab ich leider keine wirklich gute Lösung, nur einen Workaround. Wenn ich einen Ablauf habe, der nur einen "true" trigger hat, aber false keinen Sinn macht, hab ichs das so gelöst:

                        • Skript startet, wenn Wert auf true gesetzt wird
                        • Letzer Schritt im Skript: Setze den Wert wieder auf false
                          => Somit kann man das Skript immer wieder anstoßen.
                        • In Alexa dann für den Schalter eine Routine erstellen "Alexa, leg los!" und damit Schalter = an setzen
                          => Find ich nicht so elegant, aber funktioniert. Schalter manuell ausschalten bewirkt dann einfach nix
                        1. Wurde schon beantwortet. Skript reinziehen, Namen vergeben und dann im zweiten Schritt aus dem Menü den neuen Namen finden und reinziehen

                        Hat noch jemand Anmerkungen / Ideen / Verbesserungsvorschläge? 🙂

                        Danke für eure Hilfe!

                        dslraser 1 Reply Last reply Reply Quote 0
                        • dslraser
                          dslraser Forum Testing Most Active @pipsen last edited by dslraser

                          @pipsen sagte in JS automatisch beim Start des Dockers ausgeführt? Warum?:

                          Dafür hab ich leider keine wirklich gute Lösung, nur einen Workaround. Wenn ich einen Ablauf habe, der nur einen "true" trigger hat, aber false keinen Sinn macht, hab ichs das so gelöst:

                          Du könntest einen Button dafür nehmen/erstellen und dann für den Trigger wurde aktualisiert, dann brauchst Du nicht wieder auf false zurück stellen.
                          Das geht dann genau so mit der Routine in der Alexa App. Im iot ist es dann trotzdem ein SmartGerät als Switch.

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

                          Support us

                          ioBroker
                          Community Adapters
                          Donate

                          564
                          Online

                          32.0k
                          Users

                          80.4k
                          Topics

                          1.3m
                          Posts

                          5
                          11
                          482
                          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