Navigation

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

    NEWS

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

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Trigger variablen Problem

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

      Moin Freunde,

      folgendes Problem, in einem trigger (blockly), an dem per "RegExp" eine Reihe von noch unbekannten Objekt IDs anliegen, nutze ich die Triggervariable "Objekt ID" um mit dieser den Auslöser zu ermitteln sowie teile dieser variable um damit die Objekt ID zu erstellen, die später gesteuert werden soll. (Ich poste dazu später Bilder)
      Außerdem wird im Verlauf die Triggervariable "Wert" genutzt.

      Soweit so gut…
      Jetzt muss ich eine Verzögerung einbauen, die 30 sekunden später den oben genannten "Wert" (der wert des DP, welcher den trigger ausgelöst hat) kontrollieren und darauf hin den DP steuern, dessen Objekt ID ich aus der variable der "trigger Objekt ID" erstellt habe.

      Soweit so gut…
      Problem ist nun, dass während der 30 Sekunden Verzögerung, ein weiterer (neuer/anderer) DP aus dem RegEx den trigger erneut auslösen kann, welcher die variablen des ersten triggerns überschreibt und somit innerhalb der Verzögerung mit "falschen" variablen weiter gearbeitet wird.
      Die variablen müssen für jeden durchlauf des triggers zwingend FIX sein, damit nachher der richtige DP mit dem richtigen Wert gesteuert wird.

      Ist halbwegs verständlich worum es geht und was mein Problem ist? Falls Fragen offen sein sollten, die ich jetzt gerade nicht auf dem Schirm habe oder dessen Relevanz ich unterschätze, fragt gerne, ich behalte nicht mutwillig Informationen ein oder zurück.

      Meine einzige Idee, wie ich dies Problem lösen könnte, ist mehrere (5) falls dann Optionen einzubauen, in der ich eine variable (1-5) auf den Inhalt "NULL" abfrage, falls variable (1) ist gleich "NULL" setze variable (1) auf "Trigger Objekt ID" und füge hier die weitere Verarbeitung komplett mit eigenen variablem ein und seltze variable (1) am Ende wieder auf "Null". Falls variable (1) ist nicht gleich "NULL", sonst falls variable (2) ist gleich "NULL"… und so weiter…

      So stelle ich zumindest sicher, dass in jedem durchlauf mit den richtigen variablen gearbeitet wird.
      Aber ist dies wirklich der einfachste und sinnvollste Weg?
      Ich muss mich so auf eine bestimmte Anzahl an möglichen DPs festlegen und für all diese den kompletten durchlauf mit unterschiedlichen variablen erstellen, ist dies systemfreumdlich? Außerdem ist es für mich kaum abzuschätzen, wieviele unterschiedliche mögliche DPs nacher den trigger auslösen könnten, da diese unbekannt und von den späteren Nutzer des Blocklys abhängig sind.

      Mir fällt aktuell kein anderer ein, bin aber auch kein Profi, vielleicht lässt sich das auch über eine Funktion besser lösen?

      Vielen Dank für eure Hilfe 🙏

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

        @newpicsel
        Parallel zum Array der IDs ein Array der Timervariablen verwenden, so dass zu jedem Datenpunkt ein eigener Timer existieren kann.
        EDIT: Beispiel

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

          Moin @paul53 vielen Dank für deine Hilfe 💪

          Ich stehe aber etwas auf dem Schlauch, wie müsste die Array denn aussehen bzw. wie würde es generell umgesetzt werden müssen?

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

            @newpicsel sagte: wie würde es generell umgesetzt werden müssen?

            Ist es aus dem verlinkten Beispiel nicht ersichtlich?

            Newpicsel 2 Replies Last reply Reply Quote 0
            • Newpicsel
              Newpicsel @paul53 last edited by

              @paul53 said in Trigger variablen Problem:

              Ist es aus dem verlinkten Beispiel nicht ersichtlich?

              Hatte ich erst nach meinem Post gesehen 👍
              Schaue ich mir später an, danke schon mal!

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

                Moin @paul53

                Leider verstehe ich dein Skript nicht wirklich 🙈
                Kann man das in Blockly umbauen oder kannst du mir erklären was dort passiert, damit ich es verstehe?

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

                  @newpicsel sagte: Kann man das in Blockly umbauen

                  In Blockly lassen sich keine Array-Elemente als Timer-Variablen zuweisen.

                  1 Reply Last reply Reply Quote 0
                  • Newpicsel
                    Newpicsel last edited by Newpicsel

                    Moin @paul53

                    Ich hab da mal etwas gebastelt 🙈 aber das ist für mich wie spanisch (ein paar Wörter kennt man, einiges hat man schon mal gehört und der Rest ist eigentlich chinesisch!)

                    Ich hoffe du kannst mir dabei etwas helfen?
                    Ich möchte die Funktion etwas simpler gestalten und mit Blockly weiter machen, deshalb soll in der Funktion lediglich der Timer gesetzt werden, wenn dieser abgelaufen ist, soll der DP (triggerID) mit dessen wert aktualisiert werden.

                    Für den Timer stehen zwei Optionen (.fensterSensor_Delay und .fensterSensor_GlobalDelay) in Sekunden zur Verfügung, wenn "Delay" = 0, soll "GlobalDelay" verwendet werden, falls nicht dann "Delay"

                    var triggerID = 0_userdata.0.Eigene_Objekte.Netatmo.Home.Rooms.Wohnzimmer.extFenster_erkennung.fensterStatusOpen
                    

                    Timer.jpg

                    var idx = ids.indexOf(triggerID);
                    var baseIDex = triggerID.slice(0, (triggerID.lastIndexOf('.')));
                    var baseIDroom = baseIDex.slice(0, (baseIDex.lastIndexOf('.')));
                    var baseIDhome = baseIDroom.slice(0, (baseIDroom.lastIndexOf('.') - 6));
                    if (idx == -1) {
                        idx = ids.push(triggerID) - 1;
                        timers[idx] = null;
                    }
                    if (timers[idx]) clearTimeout(timers[idx]);
                    timers[idx] = setTimeout(function() {
                        setState(triggerID, (getState(triggerID)), true,);
                    }, parseInt(((((getState(([baseIDex,'.fensterSensor_Delay'].join(''))).val == 0 ? getState(([baseIDhome,'.extFensterSensor_GlobalDelay'].join(''))).val : getState(([baseIDex,'.fensterSensor_Delay'].join(''))).val) * 1000)) || '').toString(), 10));
                    
                    1 Reply Last reply Reply Quote 0
                    • First post
                      Last post

                    Support us

                    ioBroker
                    Community Adapters
                    Donate

                    978
                    Online

                    31.7k
                    Users

                    79.8k
                    Topics

                    1.3m
                    Posts

                    2
                    8
                    368
                    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