Weiter zum Inhalt
  • Home
  • Aktuell
  • Tags
  • 0 Ungelesen 0
  • Kategorien
  • Unreplied
  • Beliebt
  • GitHub
  • Docu
  • Hilfe
Skins
  • Hell
  • Brite
  • Cerulean
  • Cosmo
  • Flatly
  • Journal
  • Litera
  • Lumen
  • Lux
  • Materia
  • Minty
  • Morph
  • Pulse
  • Sandstone
  • Simplex
  • Sketchy
  • Spacelab
  • United
  • Yeti
  • Zephyr
  • Dunkel
  • 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. Blockly
  5. trigger, triggert zu oft ...

NEWS

  • Monatsrückblick Januar/Februar 2026 ist online!
    BluefoxB
    Bluefox
    18
    1
    704

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

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

trigger, triggert zu oft ...

Geplant Angeheftet Gesperrt Verschoben Blockly
8 Beiträge 3 Kommentatoren 627 Aufrufe 2 Beobachtet
  • Ä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.
  • JB1985J Offline
    JB1985J Offline
    JB1985
    schrieb am zuletzt editiert von
    #1

    Hallo,

    ich habe ein Bosch Zwischenstecker, der leider nur ON und OFF als Wert hat. Aber der "Schalter" in ioBroker nur true/false kennt.

    Da habe ich mir gedacht, schreibst ein Script welches bei True ein ON rein schreibt und bei False ein OFF. Nur leider triggert mein Script sofort bei jeder Änderung. Eigentlich hätte ich gedacht, dass erst dann wieder getriggert wird, wenn das Script zu Ende gearbeitet hat.

    Hier mein blockly:

    b42a2ba9-e2be-43a3-b4c8-7374881767a4-image.png

    Weiß jemand wie man das lösen kann?

    paul53P 1 Antwort Letzte Antwort
    0
    • JB1985J JB1985

      Hallo,

      ich habe ein Bosch Zwischenstecker, der leider nur ON und OFF als Wert hat. Aber der "Schalter" in ioBroker nur true/false kennt.

      Da habe ich mir gedacht, schreibst ein Script welches bei True ein ON rein schreibt und bei False ein OFF. Nur leider triggert mein Script sofort bei jeder Änderung. Eigentlich hätte ich gedacht, dass erst dann wieder getriggert wird, wenn das Script zu Ende gearbeitet hat.

      Hier mein blockly:

      b42a2ba9-e2be-43a3-b4c8-7374881767a4-image.png

      Weiß jemand wie man das lösen kann?

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

      @jb1985 sagte: nur ON und OFF als Wert hat. Aber der "Schalter" in ioBroker nur true/false kennt.

      Typischer Fall für einen Alias.

      Hast Du zwei Datenpunkte mit gleichem Namen oder beschreibst Du den selben Datenpunkt mal mit "ON" und mal mit true?

      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

      JB1985J 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @jb1985 sagte: nur ON und OFF als Wert hat. Aber der "Schalter" in ioBroker nur true/false kennt.

        Typischer Fall für einen Alias.

        Hast Du zwei Datenpunkte mit gleichem Namen oder beschreibst Du den selben Datenpunkt mal mit "ON" und mal mit true?

        JB1985J Offline
        JB1985J Offline
        JB1985
        schrieb am zuletzt editiert von
        #3

        @paul53 das ist der gleiche. Einmal ON damit der Zwischenstecker schaltet und einmal true damit meine Visualisierung weiß, das geschaltet wurde.

        Das mit den Alias verstehe ich nicht so ganz.

        paul53P UncleSamU 2 Antworten Letzte Antwort
        0
        • JB1985J JB1985

          @paul53 das ist der gleiche. Einmal ON damit der Zwischenstecker schaltet und einmal true damit meine Visualisierung weiß, das geschaltet wurde.

          Das mit den Alias verstehe ich nicht so ganz.

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

          @jb1985 sagte in trigger, triggert zu oft ...:

          das ist der gleiche.

          Das funktioniert nicht.

          @jb1985 sagte in trigger, triggert zu oft ...:

          Das mit den Alias verstehe ich nicht so ganz.

          Der Alias bildet den Original-Datenpunkt von Typ "string" in einen Alias-Datenpunkt vom Typ "boolean" ab. Führe das folgende Skript nach Eingabe der richtigen idOrigin einmal kurz aus, um den Alias-Datenpunkt zu erstellen.

          // Original-Datenpunkt
          const idOrigin = '...'; 
          // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
          // Bei Nicht-Verwendung Leerstring '' zuweisen
          const idRead = '';
           
          // Alias-Datenpunkt
          const idAlias = 'KG_Flur.Zwischenstecker.Status';
          var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
          
          // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
          nameAlias = 'Zwischenstecker KG Flur';
          desc = 'per Script erstellt';
          typeAlias = 'boolean'; // oder 'number'
          // read = "val == 'ON' ? true : false"; // Erkennung "OFF" --> false erfolgt automatisch  
          write = "val ? 'ON' : 'OFF'";
          // role = 'value';
          // min = 0; // nur Zahlen
          // max = 100; // nur Zahlen
          // unit = '%'; // nur für Zahlen
          // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
          custom = []; // verhindert doppelte Ausführung von history, ...
          // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
          // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
          
          // Ab hier nichts ändern !!
          function createAlias(idDst, idSrc, idRd) {
             if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
             else {
                var obj = {};
                obj.type = 'state';
                obj.common = getObject(idSrc).common;
                obj.common.alias = {};
                if(idRd) {
                    obj.common.alias.id = {};
                    obj.common.alias.id.read = idRd;
                    obj.common.alias.id.write = idSrc;
                    obj.common.read = true;
                } else obj.common.alias.id = idSrc;
                if(typeAlias) obj.common.type = typeAlias;
                if(obj.common.read !== false && read) obj.common.alias.read = read;
                if(obj.common.write !== false && write) obj.common.alias.write = write;
                if(nameAlias) obj.common.name = nameAlias;
                if(role) obj.common.role = role;
                if(desc) obj.common.desc = desc;
                if(obj.common.type == 'number') {
                   if(min !== undefined) obj.common.min = min;
                   if(max !== undefined) obj.common.max = max;
                   if(unit) obj.common.unit = unit;
                } else {
                   if(obj.common.min !== undefined) delete obj.common.min;
                   if(obj.common.max !== undefined) delete obj.common.max;
                   if(obj.common.unit) delete obj.common.unit;
                }
                if(states) obj.common.states = states;
                if(custom && obj.common.custom) obj.common.custom = custom;
                obj.native = {};
                setObject(idDst, obj, function() {
                   if(idRd) setState(idRd, getState(idRd).val, true);
                   else setState(idSrc, getState(idSrc).val, true); 
                });
                if(raum && existsObject('enum.rooms.' + raum)) {
                   let obj = getObject('enum.rooms.' + raum)
                   obj.common.members.push(idDst);
                   setObject('enum.rooms.' + raum, obj);
                }
                if(gewerk && existsObject('enum.functions.' + gewerk)) {
                   let obj = getObject('enum.functions.' + gewerk)
                   obj.common.members.push(idDst);
                   setObject('enum.functions.' + gewerk, obj);
                }
             } 
          }
           
          createAlias('alias.0.' + idAlias, idOrigin, idRead);
          

          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

          JB1985J 1 Antwort Letzte Antwort
          0
          • JB1985J JB1985

            @paul53 das ist der gleiche. Einmal ON damit der Zwischenstecker schaltet und einmal true damit meine Visualisierung weiß, das geschaltet wurde.

            Das mit den Alias verstehe ich nicht so ganz.

            UncleSamU Offline
            UncleSamU Offline
            UncleSam
            Developer
            schrieb am zuletzt editiert von
            #5

            @jb1985 sagte in trigger, triggert zu oft ...:

            @paul53 das ist der gleiche. Einmal ON damit der Zwischenstecker schaltet und einmal true damit meine Visualisierung weiß, das geschaltet wurde.

            Das kommt nicht gut. Ein Datenpunkt hat einen Typ und der ist entweder "boolean" (wahr/falsch) oder "string". Du kannst die zwei nicht einfach mischen.

            Du solltest, wie @paul53 geschrieben hat, mit einem Alias arbeiten, der den Wert "übersetzt". Aliasse kannst du entweder per Skript erstellen oder mit dem Devices Adapter.

            Bitte bei Problemen mit meinen Adaptern, Issue auf GitHub erfassen: Loxone | I2C | Luxtronik2
            ♡-lichen Dank an meine Sponsoren

            1 Antwort Letzte Antwort
            0
            • paul53P paul53

              @jb1985 sagte in trigger, triggert zu oft ...:

              das ist der gleiche.

              Das funktioniert nicht.

              @jb1985 sagte in trigger, triggert zu oft ...:

              Das mit den Alias verstehe ich nicht so ganz.

              Der Alias bildet den Original-Datenpunkt von Typ "string" in einen Alias-Datenpunkt vom Typ "boolean" ab. Führe das folgende Skript nach Eingabe der richtigen idOrigin einmal kurz aus, um den Alias-Datenpunkt zu erstellen.

              // Original-Datenpunkt
              const idOrigin = '...'; 
              // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt.
              // Bei Nicht-Verwendung Leerstring '' zuweisen
              const idRead = '';
               
              // Alias-Datenpunkt
              const idAlias = 'KG_Flur.Zwischenstecker.Status';
              var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk;
              
              // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich
              nameAlias = 'Zwischenstecker KG Flur';
              desc = 'per Script erstellt';
              typeAlias = 'boolean'; // oder 'number'
              // read = "val == 'ON' ? true : false"; // Erkennung "OFF" --> false erfolgt automatisch  
              write = "val ? 'ON' : 'OFF'";
              // role = 'value';
              // min = 0; // nur Zahlen
              // max = 100; // nur Zahlen
              // unit = '%'; // nur für Zahlen
              // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein)
              custom = []; // verhindert doppelte Ausführung von history, ...
              // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten !
              // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten !
              
              // Ab hier nichts ändern !!
              function createAlias(idDst, idSrc, idRd) {
                 if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn');
                 else {
                    var obj = {};
                    obj.type = 'state';
                    obj.common = getObject(idSrc).common;
                    obj.common.alias = {};
                    if(idRd) {
                        obj.common.alias.id = {};
                        obj.common.alias.id.read = idRd;
                        obj.common.alias.id.write = idSrc;
                        obj.common.read = true;
                    } else obj.common.alias.id = idSrc;
                    if(typeAlias) obj.common.type = typeAlias;
                    if(obj.common.read !== false && read) obj.common.alias.read = read;
                    if(obj.common.write !== false && write) obj.common.alias.write = write;
                    if(nameAlias) obj.common.name = nameAlias;
                    if(role) obj.common.role = role;
                    if(desc) obj.common.desc = desc;
                    if(obj.common.type == 'number') {
                       if(min !== undefined) obj.common.min = min;
                       if(max !== undefined) obj.common.max = max;
                       if(unit) obj.common.unit = unit;
                    } else {
                       if(obj.common.min !== undefined) delete obj.common.min;
                       if(obj.common.max !== undefined) delete obj.common.max;
                       if(obj.common.unit) delete obj.common.unit;
                    }
                    if(states) obj.common.states = states;
                    if(custom && obj.common.custom) obj.common.custom = custom;
                    obj.native = {};
                    setObject(idDst, obj, function() {
                       if(idRd) setState(idRd, getState(idRd).val, true);
                       else setState(idSrc, getState(idSrc).val, true); 
                    });
                    if(raum && existsObject('enum.rooms.' + raum)) {
                       let obj = getObject('enum.rooms.' + raum)
                       obj.common.members.push(idDst);
                       setObject('enum.rooms.' + raum, obj);
                    }
                    if(gewerk && existsObject('enum.functions.' + gewerk)) {
                       let obj = getObject('enum.functions.' + gewerk)
                       obj.common.members.push(idDst);
                       setObject('enum.functions.' + gewerk, obj);
                    }
                 } 
              }
               
              createAlias('alias.0.' + idAlias, idOrigin, idRead);
              
              JB1985J Offline
              JB1985J Offline
              JB1985
              schrieb am zuletzt editiert von
              #6

              @paul53 sagte in trigger, triggert zu oft ...:

              // Original-Datenpunkt const idOrigin = '...'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = ''; // Alias-Datenpunkt const idAlias = 'KG_Flur.Zwischenstecker.Status'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Zwischenstecker KG Flur'; desc = 'per Script erstellt'; typeAlias = 'boolean'; // oder 'number' // read = "val == 'ON' ? true : false"; // Erkennung "OFF" --> false erfolgt automatisch write = "val ? 'ON' : 'OFF'"; // role = 'value'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else obj.common.alias.id = idSrc; if(typeAlias) obj.common.type = typeAlias; if(obj.common.read !== false && read) obj.common.alias.read = read; if(obj.common.write !== false && write) obj.common.alias.write = write; if(nameAlias) obj.common.name = nameAlias; if(role) obj.common.role = role; if(desc) obj.common.desc = desc; if(obj.common.type == 'number') { if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; } else { if(obj.common.min !== undefined) delete obj.common.min; if(obj.common.max !== undefined) delete obj.common.max; if(obj.common.unit) delete obj.common.unit; } if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj, function() { if(idRd) setState(idRd, getState(idRd).val, true); else setState(idSrc, getState(idSrc).val, true); }); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead);

              Cool Danke, das funktioniert! Muss das Script immer an bleiben oder kann man das wieder löschen?

              paul53P 1 Antwort Letzte Antwort
              0
              • JB1985J JB1985

                @paul53 sagte in trigger, triggert zu oft ...:

                // Original-Datenpunkt const idOrigin = '...'; // Optional: Status-Datenpunkt, wenn Kommando und Status getrennt. // Bei Nicht-Verwendung Leerstring '' zuweisen const idRead = ''; // Alias-Datenpunkt const idAlias = 'KG_Flur.Zwischenstecker.Status'; var typeAlias, read, write, nameAlias, role, desc, min, max, unit, states, custom, raum, gewerk; // Folgende kommentieren, wenn keine Änderung der Eigenschaft erforderlich nameAlias = 'Zwischenstecker KG Flur'; desc = 'per Script erstellt'; typeAlias = 'boolean'; // oder 'number' // read = "val == 'ON' ? true : false"; // Erkennung "OFF" --> false erfolgt automatisch write = "val ? 'ON' : 'OFF'"; // role = 'value'; // min = 0; // nur Zahlen // max = 100; // nur Zahlen // unit = '%'; // nur für Zahlen // states = {0: 'Aus', 1: 'Auto', 2: 'Ein'}; // Zahlen (Multistate) oder Logikwert (z.B. Aus/Ein) custom = []; // verhindert doppelte Ausführung von history, ... // raum = 'EG_Flur'; // Groß-/Kleinschreibung in der ID beachten ! // gewerk = 'Licht'; // Groß-/Kleinschreibung in der ID beachten ! // Ab hier nichts ändern !! function createAlias(idDst, idSrc, idRd) { if(existsState(idDst)) log(idDst + ' schon vorhanden !', 'warn'); else { var obj = {}; obj.type = 'state'; obj.common = getObject(idSrc).common; obj.common.alias = {}; if(idRd) { obj.common.alias.id = {}; obj.common.alias.id.read = idRd; obj.common.alias.id.write = idSrc; obj.common.read = true; } else obj.common.alias.id = idSrc; if(typeAlias) obj.common.type = typeAlias; if(obj.common.read !== false && read) obj.common.alias.read = read; if(obj.common.write !== false && write) obj.common.alias.write = write; if(nameAlias) obj.common.name = nameAlias; if(role) obj.common.role = role; if(desc) obj.common.desc = desc; if(obj.common.type == 'number') { if(min !== undefined) obj.common.min = min; if(max !== undefined) obj.common.max = max; if(unit) obj.common.unit = unit; } else { if(obj.common.min !== undefined) delete obj.common.min; if(obj.common.max !== undefined) delete obj.common.max; if(obj.common.unit) delete obj.common.unit; } if(states) obj.common.states = states; if(custom && obj.common.custom) obj.common.custom = custom; obj.native = {}; setObject(idDst, obj, function() { if(idRd) setState(idRd, getState(idRd).val, true); else setState(idSrc, getState(idSrc).val, true); }); if(raum && existsObject('enum.rooms.' + raum)) { let obj = getObject('enum.rooms.' + raum) obj.common.members.push(idDst); setObject('enum.rooms.' + raum, obj); } if(gewerk && existsObject('enum.functions.' + gewerk)) { let obj = getObject('enum.functions.' + gewerk) obj.common.members.push(idDst); setObject('enum.functions.' + gewerk, obj); } } } createAlias('alias.0.' + idAlias, idOrigin, idRead);

                Cool Danke, das funktioniert! Muss das Script immer an bleiben oder kann man das wieder löschen?

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

                @jb1985 sagte: Muss das Script immer an bleiben oder kann man das wieder löschen?

                Nein, stoppe das Skript. Löschen solltest Du es nicht, denn mit kleinen Anpassungen (idOrigin, idAlias, nameAlias, ...) kannst Du es zur Erstellung weiterer Alias-Datenpunkte nutzen.

                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

                JB1985J 1 Antwort Letzte Antwort
                0
                • paul53P paul53

                  @jb1985 sagte: Muss das Script immer an bleiben oder kann man das wieder löschen?

                  Nein, stoppe das Skript. Löschen solltest Du es nicht, denn mit kleinen Anpassungen (idOrigin, idAlias, nameAlias, ...) kannst Du es zur Erstellung weiterer Alias-Datenpunkte nutzen.

                  JB1985J Offline
                  JB1985J Offline
                  JB1985
                  schrieb am zuletzt editiert von
                  #8

                  @paul53 Danke Dir!

                  1 Antwort Letzte Antwort
                  0

                  Hey! Du scheinst an dieser Unterhaltung interessiert zu sein, hast aber noch kein Konto.

                  Hast du es satt, bei jedem Besuch durch die gleichen Beiträge zu scrollen? Wenn du dich für ein Konto anmeldest, kommst du immer genau dorthin zurück, wo du zuvor warst, und kannst dich über neue Antworten benachrichtigen lassen (entweder per E-Mail oder Push-Benachrichtigung). Du kannst auch Lesezeichen speichern und Beiträge positiv bewerten, um anderen Community-Mitgliedern deine Wertschätzung zu zeigen.

                  Mit deinem Input könnte dieser Beitrag noch besser werden 💗

                  Registrieren Anmelden
                  Antworten
                  • In einem neuen Thema antworten
                  Anmelden zum Antworten
                  • Älteste zuerst
                  • Neuste zuerst
                  • Meiste Stimmen


                  Support us

                  ioBroker
                  Community Adapters
                  Donate

                  427

                  Online

                  32.7k

                  Benutzer

                  82.6k

                  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