Navigation

    Logo
    • Register
    • Login
    • Search
    • Recent
    • Tags
    • Unread
    • Categories
    • Unreplied
    • Popular
    • GitHub
    • Docu
    • Hilfe
    1. Home
    2. Deutsch
    3. Entwicklung
    4. Adapter: alle Objekte/States eines Adapters löschen

    NEWS

    • ioBroker@Smart Living Forum Solingen, 14.06. - Agenda added

    • ioBroker goes Matter ... Matter Adapter in Stable

    • Monatsrückblick - April 2025

    Adapter: alle Objekte/States eines Adapters löschen

    This topic has been deleted. Only users with topic management privileges can see it.
    • P
      Pman last edited by

      siehe unten

      1 Reply Last reply Reply Quote 0
      • Bluefox
        Bluefox last edited by

        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 Reply Last reply Reply Quote 0
        • P
          Pman last edited by

          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 Reply Last reply Reply Quote 0
          • ruhr70
            ruhr70 last edited by

            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

            1 Reply Last reply Reply Quote 0
            • P
              Pman last edited by

              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 Reply Last reply Reply Quote 0
              • P
                Pman last edited by

                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 Reply Last reply Reply Quote 0
                • Bluefox
                  Bluefox last edited by

                  Probiere so:

                  adapter.deleteChannel('', channels[1]._id);
                  
                  1 Reply Last reply Reply Quote 0
                  • P
                    Pman last edited by

                    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 Reply Last reply Reply Quote 0
                    • Bluefox
                      Bluefox last edited by

                      Falls du diese Datei austauschst?

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

                      Wird es besser?

                      1 Reply Last reply Reply Quote 0
                      • P
                        Pman last edited by

                        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 Reply Last reply Reply Quote 0
                        • Bluefox
                          Bluefox last edited by

                          @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 Reply Last reply Reply Quote 0
                          • P
                            Pman last edited by

                            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 Reply Last reply Reply Quote 0
                            • Bluefox
                              Bluefox last edited by

                              @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 Reply Last reply Reply Quote 0
                              • P
                                Pman last edited by

                                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 Reply Last reply Reply Quote 0
                                • Bluefox
                                  Bluefox last edited by

                                  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 Reply Last reply Reply Quote 0
                                  • P
                                    Pman last edited by

                                    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 Reply Last reply Reply Quote 0
                                    • Bluefox
                                      Bluefox last edited by

                                      @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 Reply Last reply Reply Quote 0
                                      • P
                                        Pman last edited by

                                        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 Reply Last reply Reply Quote 0
                                        • P
                                          Pman last edited by

                                          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 Reply Last reply Reply Quote 0
                                          • P
                                            Pman last edited by

                                            Okay ich habe es rausgefunden.

                                            Funktioniert nicht:

                                            deleteChannel(channel._id)
                                            
                                            deleteChannel('',channel._id)
                                            

                                            Funktioniert:

                                            deleteChannel(hubName,channel.common.name)
                                            

                                            Sollte es mit _id funktionieren? Wenn ja, dann ist es ein Bug.

                                            1 Reply Last reply Reply Quote 0
                                            • First post
                                              Last post

                                            Support us

                                            ioBroker
                                            Community Adapters
                                            Donate

                                            789
                                            Online

                                            31.7k
                                            Users

                                            79.8k
                                            Topics

                                            1.3m
                                            Posts

                                            6
                                            27
                                            8128
                                            Loading More Posts
                                            • Oldest to Newest
                                            • Newest to Oldest
                                            • Most Votes
                                            Reply
                                            • Reply as topic
                                            Log in to reply
                                            Community
                                            Impressum | Datenschutz-Bestimmungen | Nutzungsbedingungen
                                            The ioBroker Community 2014-2023
                                            logo