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. JavaScript
  5. Löschen von Objekten in Aufzählungen [solved]

NEWS

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

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

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    25
    1
    2.4k

Löschen von Objekten in Aufzählungen [solved]

Geplant Angeheftet Gesperrt Verschoben JavaScript
7 Beiträge 2 Kommentatoren 614 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.
  • cengC Offline
    cengC Offline
    ceng
    schrieb am zuletzt editiert von ceng
    #1

    Hallo Ihr,
    Problem: Objekt (POWER1) wird in Aufzählung (Rooms) bei jedem Script Start angelegt.

    Ich erstelle per Script Datenpunkte die auf Basis des Friendly Name eine bessere Übersicht in "userdata.0.schalten" bieten. So kann ich ein physisches Device einfach tauschen, ohne den Rest anzupassen. => Gleicher Friendlyname am Sonoff Device und der Rest funktioniert wieder.

    Wenn ich das untenstehende Script nutze, wird mir aber der neue Datenpunkt mehrfach in die Aufzählung "rooms" gepusht.

    1.) Wie kann ich aus einer Aufzählung löschen, wenn das Device sich vom Raum A in Raum B bewegt. Mein Script lässt das Objekt in Raum A weiter stehen.
    2.) Wie kann ich abprüfen, ob das Objekt bereits in der Aufzählung vorhanden ist und dann entweder anlegen oder nichts machen -> Hat Paul53 gelöst. THX
    3.) Wie kann ich sicherstellen, dass die Objekte wirklich angelegt werden. Vgl. Zeile 8 im Script. Hier habe ich nach Ausführung des Scripts eine Pause von 1 Sekunden eingebaut. Das funktioniert, ist aber vermutlich optimierungsfähig.

    if(!existsObject('enum.rooms.' + String(Raumname))) {
        console.log('Raumname ' + String(Raumname) + ' NICHT in Aufzählung');
    } else {
        let obj = getObject('enum.rooms.' + String(Raumname))
       // hier ist das PROBLEM -> Objekt wird IMMER zusätzlich angelegt
        obj.common.members.push(DP_Selected);
        //https://forum.iobroker.net/topic/50900/getobject-setobject-bug/4
        setObjectAsync('enum.rooms.' + String(Raumname), obj, function (err) {
                if (err) console.log('Fehler: Zuordnung von ' + String(DP_Selected) + ' zu  ' + String(Raumname) + ' fehlgeschlagen. Error=' + err, 'error');
        });
    }
    

    Gruß
    CENG

    Diverse Raspies am Start

    paul53P 2 Antworten Letzte Antwort
    0
    • cengC ceng

      Hallo Ihr,
      Problem: Objekt (POWER1) wird in Aufzählung (Rooms) bei jedem Script Start angelegt.

      Ich erstelle per Script Datenpunkte die auf Basis des Friendly Name eine bessere Übersicht in "userdata.0.schalten" bieten. So kann ich ein physisches Device einfach tauschen, ohne den Rest anzupassen. => Gleicher Friendlyname am Sonoff Device und der Rest funktioniert wieder.

      Wenn ich das untenstehende Script nutze, wird mir aber der neue Datenpunkt mehrfach in die Aufzählung "rooms" gepusht.

      1.) Wie kann ich aus einer Aufzählung löschen, wenn das Device sich vom Raum A in Raum B bewegt. Mein Script lässt das Objekt in Raum A weiter stehen.
      2.) Wie kann ich abprüfen, ob das Objekt bereits in der Aufzählung vorhanden ist und dann entweder anlegen oder nichts machen -> Hat Paul53 gelöst. THX
      3.) Wie kann ich sicherstellen, dass die Objekte wirklich angelegt werden. Vgl. Zeile 8 im Script. Hier habe ich nach Ausführung des Scripts eine Pause von 1 Sekunden eingebaut. Das funktioniert, ist aber vermutlich optimierungsfähig.

      if(!existsObject('enum.rooms.' + String(Raumname))) {
          console.log('Raumname ' + String(Raumname) + ' NICHT in Aufzählung');
      } else {
          let obj = getObject('enum.rooms.' + String(Raumname))
         // hier ist das PROBLEM -> Objekt wird IMMER zusätzlich angelegt
          obj.common.members.push(DP_Selected);
          //https://forum.iobroker.net/topic/50900/getobject-setobject-bug/4
          setObjectAsync('enum.rooms.' + String(Raumname), obj, function (err) {
                  if (err) console.log('Fehler: Zuordnung von ' + String(DP_Selected) + ' zu  ' + String(Raumname) + ' fehlgeschlagen. Error=' + err, 'error');
          });
      }
      

      Gruß
      CENG

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

      @ceng sagte: abprüfen, ob das Objekt bereits in der Aufzählung vorhanden ist

          if(!obj.common.members.includes(DP_Selcted) {
              obj.common.members.push(DP_Selected);
              setObject(...);
          }
      

      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

      cengC 1 Antwort Letzte Antwort
      0
      • paul53P paul53

        @ceng sagte: abprüfen, ob das Objekt bereits in der Aufzählung vorhanden ist

            if(!obj.common.members.includes(DP_Selcted) {
                obj.common.members.push(DP_Selected);
                setObject(...);
            }
        
        cengC Offline
        cengC Offline
        ceng
        schrieb am zuletzt editiert von
        #3

        @paul53 sagte in Löschen von Objekten in Aufzählungen:

                                                                                                                                        if(!obj.common.members.includes(DP_Selcted) {                                                                                                                                                                                    obj.common.members.push(DP_Selected);                                                                                                                                                                                    setObject(...);                                                                                                                                                                                }                                            
        

        THX Paul

        Bleibt noch Frage 1 und 3. Hat jemand eine Idee

        Diverse Raspies am Start

        1 Antwort Letzte Antwort
        0
        • cengC ceng

          Hallo Ihr,
          Problem: Objekt (POWER1) wird in Aufzählung (Rooms) bei jedem Script Start angelegt.

          Ich erstelle per Script Datenpunkte die auf Basis des Friendly Name eine bessere Übersicht in "userdata.0.schalten" bieten. So kann ich ein physisches Device einfach tauschen, ohne den Rest anzupassen. => Gleicher Friendlyname am Sonoff Device und der Rest funktioniert wieder.

          Wenn ich das untenstehende Script nutze, wird mir aber der neue Datenpunkt mehrfach in die Aufzählung "rooms" gepusht.

          1.) Wie kann ich aus einer Aufzählung löschen, wenn das Device sich vom Raum A in Raum B bewegt. Mein Script lässt das Objekt in Raum A weiter stehen.
          2.) Wie kann ich abprüfen, ob das Objekt bereits in der Aufzählung vorhanden ist und dann entweder anlegen oder nichts machen -> Hat Paul53 gelöst. THX
          3.) Wie kann ich sicherstellen, dass die Objekte wirklich angelegt werden. Vgl. Zeile 8 im Script. Hier habe ich nach Ausführung des Scripts eine Pause von 1 Sekunden eingebaut. Das funktioniert, ist aber vermutlich optimierungsfähig.

          if(!existsObject('enum.rooms.' + String(Raumname))) {
              console.log('Raumname ' + String(Raumname) + ' NICHT in Aufzählung');
          } else {
              let obj = getObject('enum.rooms.' + String(Raumname))
             // hier ist das PROBLEM -> Objekt wird IMMER zusätzlich angelegt
              obj.common.members.push(DP_Selected);
              //https://forum.iobroker.net/topic/50900/getobject-setobject-bug/4
              setObjectAsync('enum.rooms.' + String(Raumname), obj, function (err) {
                      if (err) console.log('Fehler: Zuordnung von ' + String(DP_Selected) + ' zu  ' + String(Raumname) + ' fehlgeschlagen. Error=' + err, 'error');
              });
          }
          

          Gruß
          CENG

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

          @ceng sagte: 1.) Wie kann ich aus einer Aufzählung löschen

              let idx = obj.common.members.indexOf(DP_Selected);
              if(idx > -1) {
                  obj.common.members.splice(idx, 1);
                  setObject(...);
              }
          

          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

          cengC 2 Antworten Letzte Antwort
          0
          • paul53P paul53

            @ceng sagte: 1.) Wie kann ich aus einer Aufzählung löschen

                let idx = obj.common.members.indexOf(DP_Selected);
                if(idx > -1) {
                    obj.common.members.splice(idx, 1);
                    setObject(...);
                }
            
            cengC Offline
            cengC Offline
            ceng
            schrieb am zuletzt editiert von
            #5

            @paul53
            Erstmal vielen Dank für Deine Hilfe.

            Ich erhalte jetzt allerdings Fehler beim Objekt:

            08:52:22.977	info	javascript.4 (940122) script.js.Test.Test_SYNC_Sonof: Function #DP Raum zuweisen#: DP_Selected: 0_userdata.0.Lokal.Schalten.Aussen.Garten.Farbwechsler_Gartenlampe Slave 1 Freisitz_POWER1 | Raum: Garten
            08:52:22.980	error	javascript.4 (940122) script.js.Test.Test_SYNC_Sonof: ReferenceError: common is not defined
            08:52:22.980	error	javascript.4 (940122) at DP_Raum_zuweisen (script.js.Test.Test_SYNC_Sonof:272:19)
            08:52:22.980	error	javascript.4 (940122) at Object.<anonymous> (script.js.Test.Test_SYNC_Sonof:473:15)
            

            Die Zeile 272 ist

             let idx = common.members.indexOf(DP_Selected);
            

            Das Script habe ich nach Deiner Vorlage angepasst:

            //Löschen
            let obj = getObject('enum.rooms.' + String(RaumnameAmDevice))
            if(existsObject('enum.rooms.' + String(RaumnameAmDevice))) {
                let idx = common.members.indexOf(DP_Selected);
                if(idx > -1) {
                    console.log('Lösche ' + DP_Selected);
                    obj.common.members.splice(idx, 1);
                    setObjectAsync('enum.rooms.' + RaumnameAmDevice, idx, function (err) {
                        if (err) log('Fehler: Löschen von ' + String(DP_Selected) + ' am  ' + String(RaumnameAmDevice) + ' fehlgeschlagen. Error=' + err, 'error');
                    });
                }
            }
            

            Diverse Raspies am Start

            paul53P 1 Antwort Letzte Antwort
            0
            • cengC ceng

              @paul53
              Erstmal vielen Dank für Deine Hilfe.

              Ich erhalte jetzt allerdings Fehler beim Objekt:

              08:52:22.977	info	javascript.4 (940122) script.js.Test.Test_SYNC_Sonof: Function #DP Raum zuweisen#: DP_Selected: 0_userdata.0.Lokal.Schalten.Aussen.Garten.Farbwechsler_Gartenlampe Slave 1 Freisitz_POWER1 | Raum: Garten
              08:52:22.980	error	javascript.4 (940122) script.js.Test.Test_SYNC_Sonof: ReferenceError: common is not defined
              08:52:22.980	error	javascript.4 (940122) at DP_Raum_zuweisen (script.js.Test.Test_SYNC_Sonof:272:19)
              08:52:22.980	error	javascript.4 (940122) at Object.<anonymous> (script.js.Test.Test_SYNC_Sonof:473:15)
              

              Die Zeile 272 ist

               let idx = common.members.indexOf(DP_Selected);
              

              Das Script habe ich nach Deiner Vorlage angepasst:

              //Löschen
              let obj = getObject('enum.rooms.' + String(RaumnameAmDevice))
              if(existsObject('enum.rooms.' + String(RaumnameAmDevice))) {
                  let idx = common.members.indexOf(DP_Selected);
                  if(idx > -1) {
                      console.log('Lösche ' + DP_Selected);
                      obj.common.members.splice(idx, 1);
                      setObjectAsync('enum.rooms.' + RaumnameAmDevice, idx, function (err) {
                          if (err) log('Fehler: Löschen von ' + String(DP_Selected) + ' am  ' + String(RaumnameAmDevice) + ' fehlgeschlagen. Error=' + err, 'error');
                      });
                  }
              }
              
              paul53P Offline
              paul53P Offline
              paul53
              schrieb am zuletzt editiert von
              #6

              @ceng sagte: Die Zeile 272 ist

              Korrektur:

                  let idx = obj.common.members.indexOf(DP_Selected);
              

              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
              • paul53P paul53

                @ceng sagte: 1.) Wie kann ich aus einer Aufzählung löschen

                    let idx = obj.common.members.indexOf(DP_Selected);
                    if(idx > -1) {
                        obj.common.members.splice(idx, 1);
                        setObject(...);
                    }
                
                cengC Offline
                cengC Offline
                ceng
                schrieb am zuletzt editiert von ceng
                #7

                Danke @paul53
                Danke für den Support @paul53

                Mittlerweile bin ich nach rumprobieren da...

                    if(existsObject('enum.rooms.' + RaumnameAmDevice)) {
                        console.log('Raum ' + RaumnameAmDevice + ' vorhanden');
                        let obj = getObject('enum.rooms.' + RaumnameAmDevice)
                        if(obj.common.members.includes(DP_Selected)) {
                            console.log('DP ist in Raumaufzählung vorhanden. Obj ' + JSON.stringify(obj));
                            let idx = obj.common.members.indexOf(DP_Selected);
                            console.log(DP_Selected + ' ist in der Aufzählung für ' + RaumnameAmDevice + ' an Stelle ' + idx);          
                            if(idx > -1) {
                                console.warn('Lösche ' + DP_Selected + ' ID:' + idx);
                                obj.common.members.splice(idx, 1);
                                setObject('enum.rooms.' + RaumnameAmDevice, obj, function (err) {
                                    if (err) console.error('Fehler: Lösche ID ' + idx + ' | DP ' + DP_Selected + ' aus Aufzählung  ' + String(RaumnameAmDevice) + ' fehlgeschlagen. Error=' + err, 'error');
                                });
                                if (getState('0_userdata.0.Global.Debug').val == true) {
                                    console.log(('Raumzuweisung für DP_Selected: ' + DP_Selected + ' | RaumAmDevice: ' + RaumnameAmDevice + '  RaumAmDP '+ RaumnameAmDP + ' gelöscht'));
                                }
                
                            }
                        } else {
                            console.log(DP_Selected + ' ist nicht Aufzählung vorhanden');
                        }
                    } else {
                        if (getState('0_userdata.0.Global.Debug').val == true) {
                            console.log(('Raum ' + RaumnameAmDevice + ' ist nicht in Aufzählung vorhanden. DP Selected:' + DP_Selected));
                        }   
                    }
                

                Diverse Raspies am Start

                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

                672

                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