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. Entwicklung
  4. Adapter: alle Objekte/States eines Adapters löschen

NEWS

  • Neuer Blogbeitrag: Monatsrückblick - Dezember 2025 🎄
    BluefoxB
    Bluefox
    10
    1
    127

  • Weihnachtsangebot 2025! 🎄
    BluefoxB
    Bluefox
    24
    1
    1.4k

  • UPDATE 31.10.: Amazon Alexa - ioBroker Skill läuft aus ?
    apollon77A
    apollon77
    48
    3
    9.3k

Adapter: alle Objekte/States eines Adapters löschen

Geplant Angeheftet Gesperrt Verschoben Entwicklung
27 Beiträge 6 Kommentatoren 9.1k Aufrufe
  • Ä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.
  • P Offline
    P Offline
    Pman
    schrieb am zuletzt editiert von
    #1

    Bei dem Harmony (und Hue) Adapter spiegeln die erstellten Objekte und States einfach nur den Konfigurationszustand des Hubs (der Bridge) wieder. Ich denke es gibt auch viele andere Adapter wo das so ist. Ich würde bei beiden Adapter gerne alle Objekte und States löschen, bevor die Aktuellen erstellt werden, damit nach Änderungen an Hub (oder Bridge) keine alten Objekte bestehen bleiben, die nicht mehr benötigt werden.

    Gibt es eine vorhandene Möglichkeit, dass ein Adapter sich selbst bereinigen kann, also alle seine Child-Objects löschen kann?

    Ich habe bei setupInstall.js so etwas ähnliches gefunden, allerdings wird da auch gleich die Instanz bzw. der Adapter gelöscht.

    Oder noch allgemeiner, gibt es etwas wie deleteChildObjects('a.b') wobei dann alle Objekte 'a.b.*' gelöscht werden, nicht jedoch 'a.b' ?

    1 Antwort Letzte Antwort
    0
    • P Offline
      P Offline
      Pman
      schrieb am zuletzt editiert von
      #2

      siehe unten

      1 Antwort Letzte Antwort
      0
      • BluefoxB Offline
        BluefoxB Offline
        Bluefox
        schrieb am zuletzt editiert von
        #3

        Wie sind deine Objekte aufgebaut?

        Normalerweise die Objekte müssen so aufgebaut werden:

         - Device
         +---Channel 1
               +------- State 1
               +------- State 2
               +------- State 3
         +---Channel 2
               +------- State 4
               +------- State 5
               +------- State 6
               +------- State 7
        
        

        Falls es so ist, dann kannst du es mit````
        adapter.getDevices(function (err, devices) {
        for(var d = 0; d < devices.length, d++) {
        adapter.deleteDevice(devices[d]._id);
        }
        });

        löschen.
        
        Wenn deine Struktur so ist:
        

        +---Channel 1
        +------- State 1
        +------- State 2
        +------- State 3
        +---Channel 2
        +------- State 4
        +------- State 5
        +------- State 6
        +------- State 7

        dann kannst du es mit````
        adapter.getChannels(function (err, channels) {
             for(var d = 0; d < channels.length, d++) {
                  adapter.deleteChannel(channels[d]._id);
             }
        });
        
        

        löschen.

        Und wenn so:

               +------- State 1
               +------- State 2
               +------- State 3
               +------- State 4
               +------- State 5
               +------- State 6
               +------- State 7
        
        

        dann kannst du es mit````
        adapter.getStates(function (err, states) {
        for(var d = 0; d < states.length, d++) {
        adapter.deleteState(states[d]._id);
        }
        });

        löschen.
        
        Ich empfehle es aber nicht die Objekte zu löschen und zu erzeugen.
        
        S7 oder Sonos machen es so, dass es detektiert wird, was sollte erzeugt und was gelöscht werden und nur die werden dann erzeugt und gelöscht.
        
        Warum: Falls für das Objekt history eingestellt wurde, oder Beschreibung hinzugefügt, dann wird das bei Neustart gelöscht und verloren.
        1 Antwort Letzte Antwort
        0
        • P Offline
          P Offline
          Pman
          schrieb am zuletzt editiert von
          #4

          Okay das macht Sinn was du sagst, wegen History. Ich werde es dann auch so implementieren, ist leider etwas mehr Arbeit :geek:

          EDIT:

          könnte man das Ganze nicht trotzdem verallgemeinern? Man müsste die Struktur in ein temporäres Device hinein aufbauen, dann könnte man anschließend eine Funktion aufrufen, welche beide Devices synchronisiert:

          -wenn Objekt in 'alt', aber nicht in 'neu': lösche Objekt

          -wenn Objekt in 'neu', aber nicht in 'alt': erstelle Objekt

          -wenn Objekt in 'neu' und 'alt': update Objekt

          1 Antwort Letzte Antwort
          0
          • ruhr70R Offline
            ruhr70R Offline
            ruhr70
            schrieb am zuletzt editiert von
            #5

            macht hm-rpc nicht das was Du realisieren willst?

            wenn man in der Konfig den Haken "initialisiere einmalig'" setzt, werden die Objekte "aufgeräumt" oder?

            Ich meine alte Objekte werden gelöscht, vorhandene bleiben erhalten, neue hinzugefügt. Historie ändert sich da doch auch nicht oder?

            Gesendet von iPhone mit Tapatalk

            Adapter: Fritzbox, Unify Circuit
            Skripte: dynamic hue, Bluetooth Scan, Multi-Ereignisliste

            1 Antwort Letzte Antwort
            0
            • P Offline
              P Offline
              Pman
              schrieb am zuletzt editiert von
              #6

              Ja, fast jeder Adapter macht so was. Deswegen die Frage ob man das irgendwie verallgemeinern kann, damit es nicht in jedem Adapter implementiert werden muss.

              1 Antwort Letzte Antwort
              0
              • P Offline
                P Offline
                Pman
                schrieb am zuletzt editiert von
                #7

                Bei dem Harmony Adapter ist die Struktur so:

                
                - Hub Name
                 +---activities
                       +---activity 1
                             +------- State 1
                       +---activity 2
                             +------- State 2
                 +---devices
                       +---device 1
                             +------- State 3
                             +------- State 4
                             +------- State 5
                       +---device 2
                             +------- State 6
                             +------- State 7
                             +------- State 8
                
                

                adapter.getChannels() gibt es nicht, nur getChannelsOf():

                adapter.getChannelsOf(adapter.config.hub.replace(/\s/g,'_'),function (err, channels) {
                    adapter.log.info('channels: ' + JSON.stringify(channels));
                });
                
                

                gibt mir:

                [
                   {
                      'type':'channel',
                      'common':{
                         'name':'activities',
                         'role':'channel.activities'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.activities'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'activities.Nintendo_Wii',
                         'role':'media.activity'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.activities.Nintendo_Wii'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'activities.Fire_TV',
                         'role':'media.activity'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.activities.Fire_TV'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'activities.Fernsehen',
                         'role':'media.activity'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.activities.Fernsehen'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'activities.Musik',
                         'role':'media.activity'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.activities.Musik'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices',
                         'role':'channel.devices'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Dish-DVR',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Dish-DVR'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Wii_Schalter',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Wii_Schalter'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.HTPC',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.HTPC'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.TV',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.TV'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Fire_TV_Stick',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Fire_TV_Stick'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Pause_Pause',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Pause_Pause'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Subwoofer',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Subwoofer'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Wii',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Wii'
                   },
                   {
                      'type':'channel',
                      'common':{
                         'name':'devices.Receiver',
                         'role':'media.device'
                      },
                      'native':{
                      },
                      '_id':'harmony.0.Wohnzimmer_Hub.devices.Receiver'
                   }
                ]
                

                Ich vergleiche dann die activities.* und devices.* mit den neuen Daten vom Hub, wenn etwas nicht mehr vorhanden ist will ich es löschen, z. B.:

                adapter.deleteChannel(channels[1]._id);
                

                Das funktioniert aber leider nicht:

                channel undefined
                
                1 Antwort Letzte Antwort
                0
                • BluefoxB Offline
                  BluefoxB Offline
                  Bluefox
                  schrieb am zuletzt editiert von
                  #8

                  Probiere so:

                  adapter.deleteChannel('', channels[1]._id);
                  
                  1 Antwort Letzte Antwort
                  0
                  • P Offline
                    P Offline
                    Pman
                    schrieb am zuletzt editiert von
                    #9
                    Delete	2015-08-15 11:55:33	info	channel harmony.0.Wohnzimmer_Hub.devices.Dish-DVR
                    harmony-0	2015-08-15 11:55:33	info	deleting old devices Dish-DVR
                    

                    Leider wird aber nichts gelöscht. Bis auf das deleteChannel funktioniert sonst alles korrekt:

                        //delete old activities and devices
                        adapter.getChannelsOf(adapter.config.hub.replace(/\s/g,'_'),function (err, channels) {
                            adapter.log.info('channels: ' + JSON.stringify(channels));
                            channels.forEach(function(channel){
                                var tmp = channel._id.split('.');
                                var id = tmp.pop();
                                var type = tmp.pop();
                                if (type != 'activities' && type != 'devices'){
                                    return;
                                }
                                if (!activities.hasOwnProperty(channel.native.id) && !devices.hasOwnProperty(channel.native.id)){
                                    adapter.log.info('deleting old ' + type + ' ' + id);
                                    adapter.deleteChannel('',channel._id);
                                }
                            });
                        });
                    
                    1 Antwort Letzte Antwort
                    0
                    • BluefoxB Offline
                      BluefoxB Offline
                      Bluefox
                      schrieb am zuletzt editiert von
                      #10

                      Falls du diese Datei austauschst?

                      https://raw.githubusercontent.com/ioBro … adapter.js

                      Wird es besser?

                      1 Antwort Letzte Antwort
                      0
                      • P Offline
                        P Offline
                        Pman
                        schrieb am zuletzt editiert von
                        #11

                        Reicht es die Datei auszutauschen, oder muss ich rebooten um js-controller neuzustarten?

                        Austauschen hat nicht geholfen.

                        Ich glaube es fehlen Punkte:

                        Delete	2015-08-15 12:14:37	info	channel harmony.0.Wohnzimmer_Hub_devices_Dish-DVR
                        harmony-0	2015-08-15 12:14:37	info	deleting old devices Dish-DVR
                        
                        1 Antwort Letzte Antwort
                        0
                        • BluefoxB Offline
                          BluefoxB Offline
                          Bluefox
                          schrieb am zuletzt editiert von
                          #12

                          @Pman:

                          Reicht es die Datei auszutauschen, oder muss ich rebooten um js-controller neuzustarten?

                          Austauschen hat nicht geholfen.

                          Ich glaube es fehlen Punkte:

                          Delete	2015-08-15 12:14:37	info	channel harmony.0.Wohnzimmer_Hub_devices_Dish-DVR
                          harmony-0	2015-08-15 12:14:37	info	deleting old devices Dish-DVR
                          ```` `  
                          

                          Der Channel - Name stimmt aber, oder?

                          1 Antwort Letzte Antwort
                          0
                          • P Offline
                            P Offline
                            Pman
                            schrieb am zuletzt editiert von
                            #13

                            raw vom channel:

                            {
                              "type": "channel",
                              "common": {
                                "name": "devices.Dish-DVR",
                                "role": "media.device"
                              },
                              "native": {
                                "Transport": 1,
                                "suggestedDisplay": "DEFAULT",
                                "deviceTypeDisplayName": "PVR",
                                "label": "Dish-DVR",
                                "id": "28521212",
                                "Capabilities": [
                                  1,
                                  3,
                                  5,
                                  6,
                                  9,
                                  10
                                ],
                                "type": "PVR",
                                "DongleRFID": 0,
                                "ControlPort": 7,
                                "IsKeyboardAssociated": false,
                                "model": "Hopper",
                                "deviceProfileUri": "svcs.myharmony.com/res/device/28521212-njRwAyB/wOPfT7VSsSuvx+V4eiPJah/Ss9ZlchCTYz4=",
                                "manufacturer": "Dish Network",
                                "icon": "18",
                                "isManualPower": "false"
                              },
                              "_id": "harmony.0.Wohnzimmer_Hub.devices.Dish-DVR",
                              "acl": {
                                "object": 1638
                              }
                            }
                            

                            bei der delete Meldung kommt das hier:

                            Delete 2015-08-15 12:14:37 info channel harmony.0.Wohnzimmer_Hub****devices****Dish-DVR

                            1 Antwort Letzte Antwort
                            0
                            • BluefoxB Offline
                              BluefoxB Offline
                              Bluefox
                              schrieb am zuletzt editiert von
                              #14

                              @Pman:

                              "name": "devices.Dish-DVR",

                              "_id": "Wohnzimmer_Hub.devices.Dish-DVR",

                              }

                              bei der delete Meldung kommt das hier:

                              Delete 2015-08-15 12:14:37 info channel harmony.0.Wohnzimmer_Hub****devices****Dish-DVR `
                              Also… Hier ist was in der Benennung falsch.

                              So sollte es sein und dafür auch gemacht:

                              • Wohnzimmer_Hub - Device

                              • devices.Dish-DVR - ist channel und muss "Dish-DVR" oder "devices_Dish-DVR" heisen. (Kiene Punkte)

                              Falls man diese Namensschema hat, dann werden auch getChannelsOf, deleteChannel und so weiter funktionieren,

                              sonst muss man manuell alle Objekte pflegen mit setObject, getObject, delObject.

                              1 Antwort Letzte Antwort
                              0
                              • P Offline
                                P Offline
                                Pman
                                schrieb am zuletzt editiert von
                                #15

                                Ah, Danke für die super Erklärung, ich dachte name wäre ganz frei wählbar und nicht wichtig für die Funktionalität.

                                Also, damit ich es komplett richtig mache frage ich besser nochmal vorher:

                                Device:

                                {
                                  "type": "device",
                                  "common": {
                                    "name": "Wohnzimmer_Hub"
                                  },
                                  "native": ...
                                  "_id": "harmony.0.Wohnzimmer_Hub"
                                }
                                

                                Channel devices:

                                {
                                  "type": "channel",
                                  "common": {
                                    "name": "devices",
                                    "role": "channel.devices"
                                  },
                                  "native": {},
                                  "_id": "harmony.0.Wohnzimmer_Hub.devices"
                                }
                                

                                Channel dish-dvr:

                                {
                                  "type": "channel",
                                  "common": {
                                    "name": "devices_Dish-DVR",
                                    "role": "media.device"
                                  },
                                  "native": ...
                                  "_id": "harmony.0.Wohnzimmer_Hub.devices.Dish-DVR",
                                }
                                

                                State dish-dvr

                                {
                                  "type": "state",
                                  "common": {
                                    "name": "devices_Dish-DVR_ChannelDown",
                                    "role": "button",
                                    "type": "boolean",
                                    "write": true,
                                    "read": true
                                  },
                                  "native": ...
                                  "_id": "harmony.0.Wohnzimmer_Hub.devices.Dish-DVR.ChannelDown",
                                }
                                
                                1 Antwort Letzte Antwort
                                0
                                • BluefoxB Offline
                                  BluefoxB Offline
                                  Bluefox
                                  schrieb am zuletzt editiert von
                                  #16

                                  Warum zwei channels?

                                  Device=>channel=>state.

                                  Kannst du so schaffen? Ich weiß nicht wie die Struktur von Harmony aussieht, sonst konnte ich dir sofort sagen, wie es am besten zu machen ist. ;)

                                  1 Antwort Letzte Antwort
                                  0
                                  • P Offline
                                    P Offline
                                    Pman
                                    schrieb am zuletzt editiert von
                                    #17

                                    Es gibt den Hub, der sendet Infrarot und Bluetooth befehle an Devices.

                                    Es gibt Devices (Fernseher, Receiver, Playstation usw.). Devices haben commands (VolUp, VolDown usw.)

                                    Es gibt Activities (Fernseh gucken, Playstation spielen), startet man eine Activity werden alle benötigten Geräte gestartet (Playstation spielen: Playstation an, Tv an, Tv auf Eingang HDMI 1). Activities haben einen Zustand (off,starting,on,ending).

                                    Es ist nötig Devices und Activities zu trennen, da sie die gleichen Bezeichnungen haben können und auch ganz unterschiedlich funktionieren.

                                    Kann man Channels nicht verschachteln?

                                    1 Antwort Letzte Antwort
                                    0
                                    • BluefoxB Offline
                                      BluefoxB Offline
                                      Bluefox
                                      schrieb am zuletzt editiert von
                                      #18

                                      @Pman:

                                      Es gibt den Hub, der sendet Infrarot und Bluetooth befehle an Devices.

                                      Es gibt Devices (Fernseher, Receiver, Playstation usw.). Devices haben commands (VolUp, VolDown usw.)

                                      Es gibt Activities (Fernseh gucken, Playstation spielen), startet man eine Activity werden alle benötigten Geräte gestartet (Playstation spielen: Playstation an, Tv an, Tv auf Eingang HDMI 1). Activities haben einen Zustand (off,starting,on,ending).

                                      Es ist nötig Devices und Activities zu trennen, da sie die gleichen Bezeichnungen haben können und auch ganz unterschiedlich funktionieren.

                                      Kann man Channels nicht verschachteln? `

                                      Hub => device

                                      Devices => channel

                                      commands => states

                                      activities => channel "activities"

                                      activities commands => states von channel "activities"

                                      ???
                                      > Kann man Channels nicht verschachteln?
                                      Man kann die verschachteln, aber dann werden die Befehle deleteChannel, createChannel usw nicht funktionieren. Ich habe die geschrieben für

                                      device=>channel=>states oder

                                      channel=>states oder

                                      nur states

                                      Man kann doch nicht alles abdecken. :?

                                      1 Antwort Letzte Antwort
                                      0
                                      • P Offline
                                        P Offline
                                        Pman
                                        schrieb am zuletzt editiert von
                                        #19

                                        Ich kenne die interne Datenstruktur von Objects nicht, aber könnte man nicht rekursiv über die ids laufen, so dass man adapter.deleteObjectById("Hub.devices.dish-dvr") machen kann und er dann alle devices/channels/states mit id "Hub.devices.dish-dvr.*" und "Hub.devices.dish-dvr" selbst löscht?

                                        Ich mache es jetzt aber so wie du gesagt hast Boss :lol: .

                                        1 Antwort Letzte Antwort
                                        0
                                        • P Offline
                                          P Offline
                                          Pman
                                          schrieb am zuletzt editiert von
                                          #20

                                          Ich bekomme es trotzdem nicht hin, der Channel wird nicht gelöscht :evil: .

                                          Device:

                                          {
                                            "type": "device",
                                            "common": {
                                              "name": "Wohnzimmer_Hub"
                                            },
                                            "native": ...
                                            "_id": "harmony.0.Wohnzimmer_Hub",
                                            "acl": {
                                              "object": 1638
                                            }
                                          }
                                          

                                          Channel:

                                          {
                                            "type": "channel",
                                            "common": {
                                              "name": "Sony_PS3",
                                              "role": "media.device"
                                            },
                                            "native": ...
                                            "_id": "harmony.0.Wohnzimmer_Hub.Sony_PS3",
                                            "acl": {
                                              "object": 1638
                                            }
                                          }
                                          

                                          State:

                                          {
                                            "type": "state",
                                            "common": {
                                              "name": "Angle",
                                              "role": "button",
                                              "type": "boolean",
                                              "write": true,
                                              "read": true
                                            },
                                            "native": ...
                                            "_id": "harmony.0.Wohnzimmer_Hub.Sony_PS3.Angle",
                                            "acl": {
                                              "object": 1638,
                                              "state": 1638
                                            }
                                          }
                                          

                                          Channel löschen mit:

                                          adapter.deleteChannel(channel._id);
                                          

                                          Log:

                                          Delete	2015-08-16 13:57:47	info	channel harmony.0.Wohnzimmer_Hub_Sony_PS3
                                          harmony-0	2015-08-16 13:57:47	info	deleting old device: Sony_PS3
                                          
                                          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

                                          577

                                          Online

                                          32.5k

                                          Benutzer

                                          81.7k

                                          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