Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • GitHub
  • Docu
  • Hilfe
Skins
  • Light
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dark
  • Cyborg
  • Darkly
  • Quartz
  • Slate
  • Solar
  • Superhero
  • Vapor

  • Default (No Skin)
  • No Skin
Collapse
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. [gelöst] Skript Funktion wiederverwendbar machen

NEWS

  • Jahresrückblick 2025 – unser neuer Blogbeitrag ist online! ✨
    BluefoxB
    Bluefox
    17
    1
    2.1k

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    13
    1
    935

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.2k

[gelöst] Skript Funktion wiederverwendbar machen

Scheduled Pinned Locked Moved Skripten / Logik
14 Posts 5 Posters 1.1k Views 3 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • htreckslerH htrecksler

    @init5 Du kannst das Ganze sicher in ein Script packen und das macht wahrscheinlich auch Sinn, aber innerhalb des Scriptes benötigst du in jedem Fall pro Fenster einen Timer.
    Der Timer ist zu sehen wie eine Stoppuhr. Wird ein Fenster geöffnet, wird die Stoppuhr gedrückt. Wenn dann das 2. Fenster geöffnet wird brauchst du eine weitere Stoppuhr(Timer)

    GarganoG Offline
    GarganoG Offline
    Gargano
    wrote on last edited by
    #5

    @htrecksler So ein Script findest Du von Pittini
    hier

    htreckslerH 1 Reply Last reply
    1
    • GarganoG Gargano

      @htrecksler So ein Script findest Du von Pittini
      hier

      htreckslerH Offline
      htreckslerH Offline
      htrecksler
      Forum Testing
      wrote on last edited by
      #6

      @gargano ich such das gar nicht, aber @init5

      Gruss Hermann

      ioBroker auf Proxmox (Debian) auf IntelNuc als Produktivsystem

      1 Reply Last reply
      1
      • I init5

        @paul53 Ich habe selbst keinen wirklichen Plan, wie das funktionieren kann, aber es erscheint mit nicht richtig, für jedes Fenster ein eigenes Skript zu bauen, wenn doch die Logik dahinter immer die gleiche ist.

        paul53P Offline
        paul53P Offline
        paul53
        wrote on last edited by
        #7

        @init5 sagte: nicht richtig, für jedes Fenster ein eigenes Skript zu bauen,

        Das ist nicht nötig, denn man kann alle Trigger in ein Skript packen. Beispiel für zwei Fenster:

        Bild_2021-02-27_095325.png

        @init5 sagte in Skript Funktion wiederverwendbar machen:

        Ich müsste irgendwie auf den Name des Übergeordneten Datenpunkts kommen.

        Dafür benötigt man eine Javascript-Funktion. Inhalt der Funktion sendParentName(id):

        id = id.substring(0, id.lastIndexOf('.'));
        if(existsObject(id)) sendTo("telegram", "send", {text: getObject(id).common.name + ' schließen'});
        

        Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
        Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

        I 2 Replies Last reply
        1
        • paul53P paul53

          @init5 sagte: nicht richtig, für jedes Fenster ein eigenes Skript zu bauen,

          Das ist nicht nötig, denn man kann alle Trigger in ein Skript packen. Beispiel für zwei Fenster:

          Bild_2021-02-27_095325.png

          @init5 sagte in Skript Funktion wiederverwendbar machen:

          Ich müsste irgendwie auf den Name des Übergeordneten Datenpunkts kommen.

          Dafür benötigt man eine Javascript-Funktion. Inhalt der Funktion sendParentName(id):

          id = id.substring(0, id.lastIndexOf('.'));
          if(existsObject(id)) sendTo("telegram", "send", {text: getObject(id).common.name + ' schließen'});
          
          I Offline
          I Offline
          init5
          wrote on last edited by
          #8

          Super, vielen Dank für die Lösungsansätze! Ich werde mich in der kommenden Nacht mal daran versuchen.

          1 Reply Last reply
          0
          • paul53P paul53

            @init5 sagte: nicht richtig, für jedes Fenster ein eigenes Skript zu bauen,

            Das ist nicht nötig, denn man kann alle Trigger in ein Skript packen. Beispiel für zwei Fenster:

            Bild_2021-02-27_095325.png

            @init5 sagte in Skript Funktion wiederverwendbar machen:

            Ich müsste irgendwie auf den Name des Übergeordneten Datenpunkts kommen.

            Dafür benötigt man eine Javascript-Funktion. Inhalt der Funktion sendParentName(id):

            id = id.substring(0, id.lastIndexOf('.'));
            if(existsObject(id)) sendTo("telegram", "send", {text: getObject(id).common.name + ' schließen'});
            
            I Offline
            I Offline
            init5
            wrote on last edited by init5
            #9

            @paul53 Hallo, ich habe die Funktion getestet und sie funktioniert super! Nun würde ich den wiederverwendbaren Teil aber gern noch vergrößern. Und zwar wäre es toll, wenn die ganze Schleife um die Benachrichtigung in eine Funktion ausgelagert werden könnte. Wenn ich die Aussagen von dir und @htrecksler richtig verstehe, dann scheitert es daran, dass die Schleife ja immer den selben Namen hat. D.h. bei mehreren Fenstern wird das verhalten der Schleifen gestört. Kann man denn den Namen der Schleifen dynamisch zuordnen? Sinnvoll wäre auch hier zum Beispiel der Name der übergeordneten ID. Oder müssen diese immer zu Beginn des Skripts definiert werden?

            paul53P 1 Reply Last reply
            0
            • I init5

              @paul53 Hallo, ich habe die Funktion getestet und sie funktioniert super! Nun würde ich den wiederverwendbaren Teil aber gern noch vergrößern. Und zwar wäre es toll, wenn die ganze Schleife um die Benachrichtigung in eine Funktion ausgelagert werden könnte. Wenn ich die Aussagen von dir und @htrecksler richtig verstehe, dann scheitert es daran, dass die Schleife ja immer den selben Namen hat. D.h. bei mehreren Fenstern wird das verhalten der Schleifen gestört. Kann man denn den Namen der Schleifen dynamisch zuordnen? Sinnvoll wäre auch hier zum Beispiel der Name der übergeordneten ID. Oder müssen diese immer zu Beginn des Skripts definiert werden?

              paul53P Offline
              paul53P Offline
              paul53
              wrote on last edited by
              #10

              @init5 sagte: wenn die ganze Schleife um die Benachrichtigung in eine Funktion ausgelagert werden könnte.

              Das ist eine Funktion.

              @init5 sagte in Skript Funktion wiederverwendbar machen:

              D.h. bei mehreren Fenstern wird das verhalten der Schleifen gestört.

              Wenn jedes Fenster den eigenen Timer erhält, wird nichts gestört.

              @init5 sagte in Skript Funktion wiederverwendbar machen:

              Kann man denn den Namen der Schleifen dynamisch zuordnen? Sinnvoll wäre auch hier zum Beispiel der Name der übergeordneten ID. Oder müssen diese immer zu Beginn des Skripts definiert werden?

              Ich verstehe nur Bahnhof.

              Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
              Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

              I 1 Reply Last reply
              1
              • paul53P paul53

                @init5 sagte: wenn die ganze Schleife um die Benachrichtigung in eine Funktion ausgelagert werden könnte.

                Das ist eine Funktion.

                @init5 sagte in Skript Funktion wiederverwendbar machen:

                D.h. bei mehreren Fenstern wird das verhalten der Schleifen gestört.

                Wenn jedes Fenster den eigenen Timer erhält, wird nichts gestört.

                @init5 sagte in Skript Funktion wiederverwendbar machen:

                Kann man denn den Namen der Schleifen dynamisch zuordnen? Sinnvoll wäre auch hier zum Beispiel der Name der übergeordneten ID. Oder müssen diese immer zu Beginn des Skripts definiert werden?

                Ich verstehe nur Bahnhof.

                I Offline
                I Offline
                init5
                wrote on last edited by
                #11

                @paul53 Sorry, ich habe mich falsch ausgedrückt. Statt Schleife meinte ich den Timeout. In deinem Beispiel hast du einen Trigger inkl. Timeout pro Fensterkontakt. Das funktioniert wie gesagt auch super.
                Nun war die Idee, ob man das theoretisch noch weiter verkleinern könnte, und zwar mit nur einem Trigger auf mehrere Objekt IDs. Dann die Objekt ID des Kontakts, der den Trigger ausgelöst hat an eine ausgelagerte Funktion übergeben.
                Diese Funktion ermittelt dann, wie in deinem Beispiel den Name der Parent-ID, benennt den Timeout danach und führt ihn aus (mitsamt der Benachrichtigung)

                Wäre sowas möglich, oder können Variablen (in dem Fall der Timeout) keine dynamischen Namen bekommen, die erst zur Laufzeit des Skripts generiert werden?

                paul53P 1 Reply Last reply
                0
                • I init5

                  @paul53 Sorry, ich habe mich falsch ausgedrückt. Statt Schleife meinte ich den Timeout. In deinem Beispiel hast du einen Trigger inkl. Timeout pro Fensterkontakt. Das funktioniert wie gesagt auch super.
                  Nun war die Idee, ob man das theoretisch noch weiter verkleinern könnte, und zwar mit nur einem Trigger auf mehrere Objekt IDs. Dann die Objekt ID des Kontakts, der den Trigger ausgelöst hat an eine ausgelagerte Funktion übergeben.
                  Diese Funktion ermittelt dann, wie in deinem Beispiel den Name der Parent-ID, benennt den Timeout danach und führt ihn aus (mitsamt der Benachrichtigung)

                  Wäre sowas möglich, oder können Variablen (in dem Fall der Timeout) keine dynamischen Namen bekommen, die erst zur Laufzeit des Skripts generiert werden?

                  paul53P Offline
                  paul53P Offline
                  paul53
                  wrote on last edited by paul53
                  #12

                  @init5 sagte: können Variablen (in dem Fall der Timeout) keine dynamischen Namen bekommen, die erst zur Laufzeit des Skripts generiert werden?

                  Nein, das können sie nicht. Man könnte zwar mit einem "Array of timer" arbeiten, aber das würde das Blockly sehr kompliziert machen.

                  Bitte verzichtet auf Chat-Nachrichten, denn die Handhabung ist grauenhaft !
                  Produktiv: RPi 2 mit S.USV, HM-MOD-RPI und SLC-USB-Stick mit root fs

                  I 1 Reply Last reply
                  1
                  • paul53P paul53

                    @init5 sagte: können Variablen (in dem Fall der Timeout) keine dynamischen Namen bekommen, die erst zur Laufzeit des Skripts generiert werden?

                    Nein, das können sie nicht. Man könnte zwar mit einem "Array of timer" arbeiten, aber das würde das Blockly sehr kompliziert machen.

                    I Offline
                    I Offline
                    init5
                    wrote on last edited by init5
                    #13

                    Ich habe es hinbekommen. Für den Fall, dass es mal irgendwann nochmal jemanden interessiert, hier noch das Ergebnis.
                    Man kann den Namen der timeouts nicht dynamisch benennen, aber das muss man nicht gar nicht. Entweder war ich bisher blind, oder die Pause-Funktion ist neu dazu gekommen. Ich habe es jetzt so gelöst:

                    1. Ein Trigger auf mehrere Fensterkontakte
                    2. Innerhalb des Triggers eine Abfrage, ob das Fenster gerade geöffnet wurde
                    3. Falls ja, Start der ausgelagerten Funktion "Benachrichtigung" mit Übergabe des aktuellen Triggers ("Fenster")
                      3.1 Pause für 10 Minuten
                      3.2 Prüfung ob Fenster noch immer offen ist
                      3.3 Falls ja, ermitteln des "friendly name" der übergeordneten Object ID und Benachrichtigung

                    @paul53 dein Script habe ich minimal geändert und die Benachrichtigung entfernt, sodass jetzt es jetzt ausschließlich für die Namensfindung dient.

                    id = id.substring(0, id.lastIndexOf('.'));
                    x = getObject(id).common.name;
                    return x;
                    

                    3811cdeb-1462-46fb-aa58-099ff0f6eab7-image.png

                    Danke nochmals für eure Hilfe und Ideen!

                    PackElendP 1 Reply Last reply
                    0
                    • I init5

                      Ich habe es hinbekommen. Für den Fall, dass es mal irgendwann nochmal jemanden interessiert, hier noch das Ergebnis.
                      Man kann den Namen der timeouts nicht dynamisch benennen, aber das muss man nicht gar nicht. Entweder war ich bisher blind, oder die Pause-Funktion ist neu dazu gekommen. Ich habe es jetzt so gelöst:

                      1. Ein Trigger auf mehrere Fensterkontakte
                      2. Innerhalb des Triggers eine Abfrage, ob das Fenster gerade geöffnet wurde
                      3. Falls ja, Start der ausgelagerten Funktion "Benachrichtigung" mit Übergabe des aktuellen Triggers ("Fenster")
                        3.1 Pause für 10 Minuten
                        3.2 Prüfung ob Fenster noch immer offen ist
                        3.3 Falls ja, ermitteln des "friendly name" der übergeordneten Object ID und Benachrichtigung

                      @paul53 dein Script habe ich minimal geändert und die Benachrichtigung entfernt, sodass jetzt es jetzt ausschließlich für die Namensfindung dient.

                      id = id.substring(0, id.lastIndexOf('.'));
                      x = getObject(id).common.name;
                      return x;
                      

                      3811cdeb-1462-46fb-aa58-099ff0f6eab7-image.png

                      Danke nochmals für eure Hilfe und Ideen!

                      PackElendP Offline
                      PackElendP Offline
                      PackElend
                      wrote on last edited by
                      #14

                      @init5 ich stehe vor einer ähnlichen Herausforderung.
                      Ich habe 9 Jalousien zum ansteuern, das Skript ist immer das gleiche.

                      Wenn ich es richtig verstehe, können Skripte nicht instanziert werden, sprich wenn der Timer läuft aber das Skript von einem anderen Trigger (bei dir Fenster auf), startet der Timer von neuem?

                      1 Reply Last reply
                      0
                      Reply
                      • Reply as topic
                      Log in to reply
                      • Oldest to Newest
                      • Newest to Oldest
                      • Most Votes


                      Support us

                      ioBroker
                      Community Adapters
                      Donate

                      724

                      Online

                      32.6k

                      Users

                      82.2k

                      Topics

                      1.3m

                      Posts
                      Community
                      Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                      ioBroker Community 2014-2025
                      logo
                      • Login

                      • Don't have an account? Register

                      • Login or register to search.
                      • First post
                        Last post
                      0
                      • Home
                      • Recent
                      • Tags
                      • Unread 0
                      • Categories
                      • Unreplied
                      • Popular
                      • GitHub
                      • Docu
                      • Hilfe