NEWS
Adapter: alle Objekte/States eines Adapters löschen
-
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
-
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.
-
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
-
Probiere so:
adapter.deleteChannel('', channels[1]._id);
-
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); } }); });
-
Falls du diese Datei austauschst?
https://raw.githubusercontent.com/ioBro … adapter.js
Wird es besser?
-
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
-
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?
-
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
-
"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.
-
-
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", }
-
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.
-
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?
-
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ürdevice=>channel=>states oder
channel=>states oder
nur states
Man kann doch nicht alles abdecken. :?
-
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: .
-
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
-
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.
-
Will mal keinen neuen Thread aufmachen, da die Überschrift passt.
Meine Frage ist etwas einfacher, es geht um das allgemeine Aufräumen, nach rumspielen mit node-red.
Nachdem ich die Variablen gelöscht habe, bleibt noch das Objekt stehen.Wie kann ich dieses löschen? Hier gibt es keinen Mülleimer,
Danke wie immer.
Fitti
-
Hmmm, nach einer Weile ist es einfach verschwunden. Räumt sich also das alleine auf?
Wodurch?
Fitti
-
Meine leeren Objekte sind mit einem Refresh weg.
Gesendet von meinem iPhone mit Tapatalk