Skip to content
  • Home
  • Recent
  • Tags
  • 0 Unread 0
  • Categories
  • Unreplied
  • Popular
  • 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

  • Default (No Skin)
  • No Skin
Collapse
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

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

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

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

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

Scheduled Pinned Locked Moved JavaScript
7 Posts 2 Posters 655 Views 1 Watching
  • Oldest to Newest
  • Newest to Oldest
  • Most Votes
Reply
  • Reply as topic
Log in to reply
This topic has been deleted. Only users with topic management privileges can see it.
  • cengC Offline
    cengC Offline
    ceng
    wrote on last edited by 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 Replies Last reply
    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
      wrote on last edited by
      #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 Reply Last reply
      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
        wrote on last edited by
        #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 Reply Last reply
        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
          wrote on last edited by 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 Replies Last reply
          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
            wrote on last edited by
            #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 Reply Last reply
            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
              wrote on last edited by
              #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 Reply Last reply
              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
                wrote on last edited by 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 Reply Last reply
                0

                Hello! It looks like you're interested in this conversation, but you don't have an account yet.

                Getting fed up of having to scroll through the same posts each visit? When you register for an account, you'll always come back to exactly where you were before, and choose to be notified of new replies (either via email, or push notification). You'll also be able to save bookmarks and upvote posts to show your appreciation to other community members.

                With your input, this post could be even better 💗

                Register Login
                Reply
                • Reply as topic
                Log in to reply
                • Oldest to Newest
                • Newest to Oldest
                • Most Votes


                Support us

                ioBroker
                Community Adapters
                Donate

                535

                Online

                32.7k

                Users

                82.6k

                Topics

                1.3m

                Posts
                Community
                Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen | Einwilligungseinstellungen
                ioBroker Community 2014-2025
                logo
                • Login

                • Don't have an account? Register

                • Login or register to search.
                • First post
                  Last post
                0
                • Home
                • Recent
                • Tags
                • Unread 0
                • Categories
                • Unreplied
                • Popular
                • GitHub
                • Docu
                • Hilfe