Skip to content
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • 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

  • Standard: (Kein Skin)
  • Kein Skin
Einklappen
ioBroker Logo

Community Forum

donate donate
  1. ioBroker Community Home
  2. Deutsch
  3. Skripten / Logik
  4. Mehrere Trigger fuer eine bestimmte Zeit abfangen (z.B. Sturmklingeln) (Blockly)

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.3k

Mehrere Trigger fuer eine bestimmte Zeit abfangen (z.B. Sturmklingeln) (Blockly)

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
14 Beiträge 4 Kommentatoren 2.6k Aufrufe
  • Älteste zuerst
  • Neuste zuerst
  • Meiste Stimmen
Antworten
  • In einem neuen Thema antworten
Anmelden zum Antworten
Dieses Thema wurde gelöscht. Nur Nutzer mit entsprechenden Rechten können es sehen.
  • N Offline
    N Offline
    nibblerrick
    schrieb am zuletzt editiert von
    #1

    Hi,

    ich habe in Blockly einen Trigger auf einen Schalter (Klingel) woraufhin Sachen ausgefuehrt werden. Jetzt wuerde ich gerne wenn dieser Schalter betaetigt wird weitere Betaetigungen abfangen fuer eine Bestimmte Zeit (z.B. 20 Sekunden).

    Wahrscheinlich ist das ganz einfach, ich konnte aber im Forum nichts finden.

    Ich meine, wenn ich einen Trigger habe und dann z.B. ein Timeout irgendwo einbaue wuerde ja jedes mal ein neues Timeout gestartet.

    Ich schaetze, ich habe einfach ein Brett vor dem Kopf.

    Waere klassen, wenn jemand mir einmal das Prinzip (am liebsten in Blockly) erlaeutern koennte…

    1 Antwort Letzte Antwort
    0
    • eumatsE Offline
      eumatsE Offline
      eumats
      schrieb am zuletzt editiert von
      #2

      Ich habe das bei meiner Klingel so gelöst…

      /*
       debouncing, executes the function if there was no new event in $wait milliseconds
       @param func
       @param wait
       @param immediate (boolean)
       @returns {Function}
      */
      function debounce(func, wait, immediate) {
      	var timeout;
      	return function() {
      		var context = this, args = arguments;
      		var later = function() {
      			timeout = null;
      			if (!immediate) func.apply(context, args);
      		};
      		var callNow = immediate && !timeout;
      		clearTimeout(timeout);
      		timeout = setTimeout(later, wait);
      		if (callNow) func.apply(context, args);
      	};
      }
      
      

      Aufruf mit:

      on({id: 'rpi2.0.gpio.xy.state', val: false}, debounce(function (obj) {
         <hier wird/etwas/gemacht="">
      },1000, true));</hier>
      

      1000=Verzögerung in ms

      true=Reagiere gleich beim 1. Event (bei false würde erst nach Ablauf des Timer reagiert)

      1 Antwort Letzte Antwort
      0
      • R Offline
        R Offline
        RappiRN
        Most Active
        schrieb am zuletzt editiert von
        #3

        Schreib doch mal bitte "Blockly" mit in den Thread-Namen rein, dann fühlen sich die Blockly-Experten auch direkt angesprochen! :D

        Und zeige mal bitte, was du schon im Blockly zusammengeklickt hast, als Screenshot und als Export.

        Enrico

        1 Antwort Letzte Antwort
        0
        • N Offline
          N Offline
          nibblerrick
          schrieb am zuletzt editiert von
          #4

          @eumats:

          Ich habe das bei meiner Klingel so gelöst…

          ...

          1000=Verzögerung in ms

          true=Reagiere gleich beim 1. Event (bei false würde erst nach Ablauf des Timer reagiert) `

          Danke, ich steige da noch nicht ganz durch, ich versuche das morgen nochmal zu verstehen.

          Enrico: OK, geaendert, vielleicht hat es ja auch noch einer in Blockly, ist fuer den Einstieg einfacher zu verstehen.

          1 Antwort Letzte Antwort
          0
          • R Offline
            R Offline
            RappiRN
            Most Active
            schrieb am zuletzt editiert von
            #5

            Was noch fehlt, ist der Screenshot von deinem Blockly!

            Enrico

            1 Antwort Letzte Antwort
            0
            • N Offline
              N Offline
              nibblerrick
              schrieb am zuletzt editiert von
              #6

              Ja, nein, ich habe da keinen Screenshot. Mir fehlt ja irgendwo der richtige Ansatz.

              Ich kann zwar jetzt n Trigger mit nem leeren Timeout zusammenklicken, aber das scheint mir ja nicht sinnvoll, weil dann ja immer ein neuer Timeout getriggert wird, was ja irgendwie zu nix fuehrt, glaube ich.

              Mir fehlt da so der Grundansatz was wirklich gebraucht wird und und wo hinkommt…

              Ich meine im JS-Beispiel da oben wird ja eine Funktion genutzt. Habe ich bisher noch nichts mit gemacht, hoert sich auf der anderen Seite nicht unlogisch an.

              Ich schlafe da mal drueber, vielleicht bekomme ich mit dem Ansatz morgen doch was zusammengeklickt.

              Falls einer trotzdem noch gute Tipps hat in der Zwischenzeit nehme ich die auch gerne an :-)

              1 Antwort Letzte Antwort
              0
              • R Offline
                R Offline
                RappiRN
                Most Active
                schrieb am zuletzt editiert von
                #7

                @nibblerrick:

                ich habe in Blockly einen Trigger auf einen Schalter (Klingel) woraufhin Sachen ausgefuehrt werden. `

                Du hast doch aber geschrieben, dass du schon ein Blockly hast, wo die Klingel schon was auslöst. Und da würde ich dir gern den Zusatz zur Verhinderung des Sturmklingelns einarbeiten!

                Enrico

                1 Antwort Letzte Antwort
                0
                • N Offline
                  N Offline
                  nibblerrick
                  schrieb am zuletzt editiert von
                  #8

                  Achso, ja klar, das ist kein Problem!

                  Machen wir mal gerade zwei Sachen an dieser Stelle, ich hatte heute noch so eine Idee das mit einer Hilfsvariable im Script zu machen.

                  Ich habe das noch nicht probiert, aber theoretisch muesste das doch so funktionieren, da die Variable ja innerhalb des Scriptes besteht und wenn der Trigger erneut ausloest durchlaeuft er nur die Bedingung mit was drin, wenn die Zeit noch nicht abgelaufen ist. D.h. alle zwei Sekunden darf jemand ein Klingeln ausloesen.

                  Wenn das grundsaetzlich richtig ist bin ich a) froh und b) frage ich mich, ob es noch elegantere Wege gibt oder einfach bessere das zu schreiben.

                  So, dass ist das eine…
                  3803_firefox_2017-11-23_16-41-37.png

                  1 Antwort Letzte Antwort
                  0
                  • N Offline
                    N Offline
                    nibblerrick
                    schrieb am zuletzt editiert von
                    #9

                    …das andere, wenn du das aktuelle moechtest, dann geht das natuerlich, das sieht so aus:

                    ! <xml 1999/xmlns="<URL url=" http:/www.w3.org/xhtml"="">http://www.w3.org/1999/xhtml">
                    ! <block type="on_ext" id="9vjVtq}Y4ZYV.#jTK2S" x="763" y="-612"><mutation items="1"></mutation>
                    ! <field name="CONDITION">any</field>
                    ! <value name="OID0"><shadow type="field_oid" id="kJ@M^!Cu%Wpje~=5g?Xn"><field name="oid">hm-rpc.0.LEQ0176404.3.INSTALL_TEST</field></shadow></value>
                    ! <statement name="STATEMENT"><block type="control" id="8Zu3F(pQ}?hc0f[^VMq2"><mutation delay_input="false"></mutation>
                    ! <field name="OID">hm-rpc.0.LEQ1433763.2.STATE</field>
                    ! <field name="WITH_DELAY">FALSE</field>
                    ! <value name="VALUE"><block type="logic_boolean" id="-,]oX|543Vnn#q8-%AQ^"><field name="BOOL">TRUE</field></block></value>
                    ! <next><block type="pushover" id="RCVrT5LAYCAas9P@a64"><field name="SOUND">incoming</field>
                    ! <field name="PRIORITY">0</field>
                    ! <value name="MESSAGE"><shadow type="text" id="}W^80lZ
                    }-I/4aHL%I}="><field name="TEXT">Klingel Nico</field></shadow></value>
                    ! <value name="TITLE"><block type="text" id="RZLbJrnBxzwf8QN,1}~O"><field name="TEXT">Ein Tuerereignis ist eingetreten</field></block></value>
                    ! <next><block type="telegram" id="OGm4bts2;CZDBe.Pk9R?"><value name="MESSAGE"><shadow type="text" id="mSLJ%kPe~2Np{W5`Xk5b"><field name="TEXT">Klingel Nico</field></shadow></value>
                    ! <next><block type="sayit" id=":tX1E8)H~N(stQ2
                    vuMD"><field name="INSTANCE">.2</field>
                    ! <field name="LANGUAGE">en-GB_AP_Male</field>
                    ! <value name="VOLUME"><block type="math_number" id="Vv(4u]5|saH=-Uac?B)("><field name="NUM">75</field></block></value>
                    ! <value name="MESSAGE"><shadow type="text" id="8^}DvffG~)/}x4G~lvt("><field name="TEXT">Doorbell Nico</field></shadow></value>
                    ! <next><block type="control" id="%=wyoyrNVN;u/ogR5-Na"><mutation delay_input="false"></mutation>
                    ! <field name="OID">hm-rpc.0.LEQ1433763.1.SUBMIT</field>
                    ! <field name="WITH_DELAY">FALSE</field>
                    ! <value name="VALUE"><block type="text" id="_yR:QOZR2NrsHHqMutl2"><field name="TEXT">1,1,108000,34,2,34,2,34,2,34,2,34,2</field></block></value></block></next></block></next></block></next></block></next></block></statement></block></xml>
                    3803_firefox_2017-11-23_16-47-58.png

                    1 Antwort Letzte Antwort
                    0
                    • R Offline
                      R Offline
                      RappiRN
                      Most Active
                      schrieb am zuletzt editiert von
                      #10

                      @nibblerrick:

                      Ich habe das noch nicht probiert, aber theoretisch muesste das doch so funktionieren, da die Variable ja innerhalb des Scriptes besteht und wenn der Trigger erneut ausloest durchlaeuft er nur die Bedingung mit was drin, wenn die Zeit noch nicht abgelaufen ist. D.h. alle zwei Sekunden darf jemand ein Klingeln ausloesen. `

                      Das mit der Variable sollte so stimmen. Es fehlt aber noch die eigentliche Aktion unter "Klingelaktion ausführen".

                      Wenn ich die ganzen Profis hier richtig verstanden habe, wäre es auch noch gut, wenn du den Timeout noch beendest, also in den Timeout noch den Baustein "stop Timeout"!

                      Was dein zweites Blockly angeht, verstehe ich nicht so recht auf was du da triggerst. Was ist das für ein HM-Gerät, wo man "Install_Test" triggert?

                      Enrico

                      1 Antwort Letzte Antwort
                      0
                      • rantanplanR Offline
                        rantanplanR Offline
                        rantanplan
                        schrieb am zuletzt editiert von
                        #11

                        @RappiRN:

                        Wenn ich die ganzen Profis hier richtig verstanden habe, wäre es auch noch gut, wenn du den Timeout noch beendest, also in den Timeout noch den Baustein "stop Timeout"! `
                        Einen Timeout sollte man beenden bevor man ihn erneut aufruft. Da hast Du vollkommen Recht.

                        In dem Beispiel kann der Timeout aber nicht mehrmals aufgerufen werden.

                        Aber eine sinnvolle Aktion sehe ich da auch nicht.

                        Grüße

                        Rantanplan

                        CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                        1 Antwort Letzte Antwort
                        0
                        • N Offline
                          N Offline
                          nibblerrick
                          schrieb am zuletzt editiert von
                          #12

                          Ich sehe, ich stifte Verwirrung…

                          Da ich keine CCU habe triggert der Homematictaster immer nur INSTALL_TEST statt PRESS_SHORT. Daher nehme ich das als Trigger. Funktioniert auch soweit, kein Problem.

                          Das eine ist das aktuelle Klingelscript wo RappiRN gerne die Funktion reinbauen wollte, daher habe ich das gepostet. Das ist auch das, was aktuell bei mir laeuft.

                          Das andere wo nur der Kommentar "Klingelaktion ausfuehren" drinsteht ist die Idee, die ich habe, um mehrere Trigger in kurzer Zeit anzufangen. Das hinterher an die Kommentarstelle "Klingelaktion ausfuehren" der ganze Kram der ausgefuehrt werden soll rein muss, also das, was in meinem aktuellen Script ausgefuehrt wird, ist klar. Das ist nur gerade ein Platzhalter um die Sache mit den Triggern abfangen an sich zu diskutieren, ich wollte da nicht meinen fetten Block jetzt schon reinhauen der so unuebersichtlich ist.

                          Wenn das mit dem Timeout und dem if richtig ist muss ich das ja nur hinterher in das aktuelle Script einfuegen.

                          Und den Timeout, wenn ich das jetzt richtig durchdenke, will ich ja gerade NICHT beenden, zumindest nicht, bevor er abgelaufen ist, sonst kann ich ja wieder durchgehend klingeln.

                          Wenn der Timeout abgelaufen ist, also innerhalb des if, nach dem timeout, muss ich den doch nicht extra beenden, weil er dann ja sowieso abgelaufen ist, oder muss man abgelaufene Timeouts auch noch extra beenden?

                          Kann man das jetzt verstehen, was ich bezwecke?

                          1 Antwort Letzte Antwort
                          0
                          • rantanplanR Offline
                            rantanplanR Offline
                            rantanplan
                            schrieb am zuletzt editiert von
                            #13

                            @nibblerrick:

                            Und den Timeout, wenn ich das jetzt richtig durchdenke, will ich ja gerade NICHT beenden, zumindest nicht, bevor er abgelaufen ist, sonst kann ich ja wieder durchgehend klingeln.

                            Wenn der Timeout abgelaufen ist, also innerhalb des if, nach dem timeout, muss ich den doch nicht extra beenden, weil er dann ja sowieso abgelaufen ist, oder muss man abgelaufene Timeouts auch noch extra beenden? `
                            Hatte ich doch geschrieben. In Deiner Konstellation muss der Timer nicht beendet werden.

                            Dein Timer kann ja nur wieder gestartet werden wenn er beendet ist.

                            Grüße

                            Rantanplan

                            CCU3 / MS Server 2019(VM) / Scripten mit Blockly

                            1 Antwort Letzte Antwort
                            0
                            • N Offline
                              N Offline
                              nibblerrick
                              schrieb am zuletzt editiert von
                              #14

                              Danke, ich wollte auch nur sicher sein. Nur nicht, dass es Grundsaetzlich anders sein soll, ich gewoehne mir das an, und hinterher wundere ich mich, warum die Haelfte nicht funktioniert oder sowas. Administration ist mir nicht fremd, aber Programmieren ist einfach doch sehr neu fuer mich, da will ich nicht gleich bei den grundsaetzlichen Sachen mir Fehler angewoehnen…

                              1 Antwort Letzte Antwort
                              0
                              Antworten
                              • In einem neuen Thema antworten
                              Anmelden zum Antworten
                              • Älteste zuerst
                              • Neuste zuerst
                              • Meiste Stimmen


                              Support us

                              ioBroker
                              Community Adapters
                              Donate

                              315

                              Online

                              32.6k

                              Benutzer

                              82.3k

                              Themen

                              1.3m

                              Beiträge
                              Community
                              Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                              ioBroker Community 2014-2025
                              logo
                              • Anmelden

                              • Du hast noch kein Konto? Registrieren

                              • Anmelden oder registrieren, um zu suchen
                              • Erster Beitrag
                                Letzter Beitrag
                              0
                              • Home
                              • Aktuell
                              • Tags
                              • Ungelesen 0
                              • Kategorien
                              • Unreplied
                              • Beliebt
                              • GitHub
                              • Docu
                              • Hilfe