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. Trigger variablen Problem

NEWS

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill lĂ€uft aus ?
    apollon77A
    apollon77
    48
    3
    8.4k

  • MonatsrĂŒckblick – September 2025
    BluefoxB
    Bluefox
    13
    1
    2.0k

  • Neues Video "KI im Smart Home" - ioBroker plus n8n
    BluefoxB
    Bluefox
    15
    1
    2.6k

Trigger variablen Problem

Geplant Angeheftet Gesperrt Verschoben Skripten / Logik
8 BeitrÀge 2 Kommentatoren 518 Aufrufe 1 Watching
  • Ä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.
  • NewpicselN Offline
    NewpicselN Offline
    Newpicsel
    schrieb am zuletzt editiert von
    #1

    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 🙏

    paul53P 1 Antwort Letzte Antwort
    0
    • NewpicselN Newpicsel

      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 🙏

      paul53P Offline
      paul53P Offline
      paul53
      schrieb am zuletzt editiert von paul53
      #2

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

      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

      NewpicselN 1 Antwort Letzte Antwort
      0
      • paul53P paul53

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

        NewpicselN Offline
        NewpicselN Offline
        Newpicsel
        schrieb am zuletzt editiert von
        #3

        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?

        paul53P 1 Antwort Letzte Antwort
        0
        • NewpicselN Newpicsel

          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?

          paul53P Offline
          paul53P Offline
          paul53
          schrieb am zuletzt editiert von
          #4

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

          Ist es aus dem verlinkten Beispiel nicht ersichtlich?

          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

          NewpicselN 2 Antworten Letzte Antwort
          0
          • paul53P paul53

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

            Ist es aus dem verlinkten Beispiel nicht ersichtlich?

            NewpicselN Offline
            NewpicselN Offline
            Newpicsel
            schrieb am zuletzt editiert von
            #5

            @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 Antwort Letzte Antwort
            0
            • paul53P paul53

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

              Ist es aus dem verlinkten Beispiel nicht ersichtlich?

              NewpicselN Offline
              NewpicselN Offline
              Newpicsel
              schrieb am zuletzt editiert von
              #6

              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?

              paul53P 1 Antwort Letzte Antwort
              0
              • NewpicselN Newpicsel

                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?

                paul53P Offline
                paul53P Offline
                paul53
                schrieb am zuletzt editiert von
                #7

                @newpicsel sagte: Kann man das in Blockly umbauen

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

                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

                1 Antwort Letzte Antwort
                0
                • NewpicselN Offline
                  NewpicselN Offline
                  Newpicsel
                  schrieb am zuletzt editiert von Newpicsel
                  #8

                  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 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

                  861

                  Online

                  32.4k

                  Benutzer

                  81.4k

                  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