NEWS
[Problem] deleteDevice klappt nicht
-
Hallo Leute,
im Zuge der Entwicklung des deConz Adapters versuche ich die Objekte eines Devices zu löschen. Dazu gibt es die Funktion deleteDevices in ioBroker, die scheint aber nicht zu funktionieren.
Wenn ich sie mit dem Namen des device aufrufe passiert nichts, kein Fehler aber auch das device wird nicht gelöscht.
Der callback liefert auch nichts zurück.
Ich hab statt dem Namen auch schon die ID verwendet, mit dem selben Resultat.
Kann hier jemand helfen?
-
Kannst Du mal zeigen wie das Device-Objekt genau aussieht (also ObjektStruktur laut "Raw") und dein Code zum löschen.
-
Hier das Objekt:
{ "type": "device", "common": { "name": "TRADFRI motion sensor ", "role": "sensor" }, "native": { "ep": 1, "etag": "80cdb305c4cd68d5be1d9f45ad0f6536", "id": "22", "group": "5485", "manufacturername": "IKEA of Sweden", "modelid": "TRADFRI motion sensor", "type": "ZHAPresence", "uniqueid": "90:fd:9f:ff:fe:05:8a:95-01-0006" }, "from": "system.adapter.deconz.0", "ts": 1521829247031, "_id": "deconz.0.deCONZ-GW.TRADFRI_motion_sensor", "acl": { "object": 1638 } }
Und hier mein Code, der Teil mit delObject Funktioniert löscht aber nur das Objekt und lässt die Untergeordneten zurück.
var name = enums[keyName].common.name; /*adapter.delObject(keyName, function(err){ adapter.log.info(err); });*/ adapter.deleteDevice(name, function(err){ adapter.log.info(err); });
-
Und die DeleteDevice rufst Du auch mit "deconz.0.deCONZ-GW.TRADFRI_motion_sensor" auf? (alternativ mit "deCONZ-GW.TRADFRI_motion_sensor" … wenn namespace fehlt wird der automatisch ergänzt)
-
Und die DeleteDevice rufst Du auch mit "deconz.0.deCONZ-GW.TRADFRI_motion_sensor" auf? `
Nur um sicher zu gehen das hier nicht etwas schief läuft habe ich das jetzt mal direkt als String an die Funktion übergeben, aber das Ergebniss ist das selbe. Callback liefert 'undefined' und das Device bleibt im Objektbaum erhalten. -
Ich denke ich habe das Problem …
https://github.com/ioBroker/ioBroker.js ... r.js#L2024
impliziert das der Device-Name keine Punkte enthalten darf ... Damit impliziert es auch das Devices AUSSCHLIESSLICH auf der allerersten ebene direkt unterhalb der Instanznummer existieren dürfen.
Ich kläre das mal ...
-
Ich kläre das mal … `
Hast du schon neue infos für mich?Ich hab die Objekt Struktur geändert und die Devices liegen jetzt direkt unter der Instanznummer. Zwar wird das Device gelöscht, aber die darunter liegenden Objekte nicht.
-
Also der oben referenzierte Code erwartet:
adapter.instanz.device.channel.state
In dem Fall müsstest Du damit das tut unterhalb der Devices nur channels haben die dürfen wieder states haben. Wenn unter devices direkt states kommen werden die in der aktuellen Implementierung nicht gelöscht.
Meiner Meinung nach ist das ein Bug … weil in https://github.com/ioBroker/ioBroker/bl ... ject-types steht das Devices auch States enthalten dürfen.
Wäre ein Issue in js-controller wert ...
-
Wäre ein Issue in js-controller wert … `
Danke für deine Antwort, dann mache ich mal einen Issue auf Github. -
Danke, mal schauen ob ich die Tage mal dazu komme da rein zu schauen
-
Also der oben referenzierte Code erwartet:
adapter.instanz.device.channel.state
In dem Fall müsstest Du damit das tut unterhalb der Devices nur channels haben die dürfen wieder states haben. Wenn unter devices direkt states kommen werden die in der aktuellen Implementierung nicht gelöscht.
Meiner Meinung nach ist das ein Bug … weil in https://github.com/ioBroker/ioBroker/bl ... ject-types steht das Devices auch States enthalten dürfen.
Wäre ein Issue in js-controller wert ... `
Es kann natürlich auch falsche Beschreibung sein -
:-)) Naja dann muss das "Issue" die Doku fixen Aber ich denke hier könnte auch die Realität gewinnen und es ist oft so das unter Devices states existieren. Man kann Sie anlegen … also sollte man auch löschen denke ich
-
Warum einfach wenn es auch Kompliziert geht
Bitte nicht die Doku fixen.
Gesendet von meinem m8 mit Tapatalk
-
ich werde langsam verrückt, seit 3 Tagen versuche ich jetzt die devices zu löschen wenn sie nicht mehr in der Config stehen. aber ich scheitere jedes mal kläglich. Ich hoffe mir kann einer sagen wo mein fehler ist..
Hier die Funktion:
Es wird erst nach den vorhandenen Devices gesucht und dann die überschüssigen gelöscht
`function checkChanges() { adapter.getForeignObjects(adapter.namespace + ".*", 'device', function (err, list) { if (err) { adapter.log.error(err); } else { objects = list; adapter.log.debug("O:_ " + JSON.stringify(objects)); for (var element in objects) { var sid = objects[element].native.sid; var type = objects[element].native.type; var isThere = false; for (var i = 0; i < sel_devices.length; i++) { if (sel_devices[i].name == sid && sel_devices[i].type == type) isThere = true; if (i === sel_devices.length - 1 && isThere === false) { sds(element); adapter.log.debug('object: ' + objects[element]._id + ' deleded'); } } } } }); function sds(sid) { adapter.getForeignObjects(sid + ".*", function (err, list) { adapter.log.warn("search: " + " tt: " + JSON.stringify(list)); var count = Object.keys(list).length - 1; for (var i = 0; i <= count; i++) { var keyName = Object.keys(list)[i] adapter.log.debug("search: " + JSON.stringify(list[keyName])); if (list[keyName].type && list[keyName].type === "state") { adapter.delObject(list[keyName]._id, function (err, dat) { }); } if (i === count) { if (list[keyName].type && list[keyName].type === "device") { adapter.deleteDevice(sid.split(".")[2], function (err) { adapter.log.info(err); }); } } } }); } }` hier das Device: ![1768_2018-05-19_05h35_23.png](/assets/uploads/files/1768_2018-05-19_05h35_23.png) es wird alles gelöscht, und auch nicht mehr sichtbar, rufe ich dann aber such ich dann jedoch nach device finde ich sie immernoch[/i][/i][/i]
-
Hast du mal die logausgabe?
-
Hier der log
ich habe ein neues hinzu und ein altes gelöscht und ein drittes ist noch drin welches ich heute morgen gelöscht habe.
(die logausgaben vom adapter sind sehr durcheinander, da ich zum testen temporär ausgaben eingefügt habe)
! ````
2018-05-19 10:51:18.839 - debug: yeelight.0 from_conf: {"useSystemGPS":false,"latitude":"","longitude":"","devices":[{"name":"0x0000000004cae3a0","ip":"192.168.178.62","port":"55443","smart_name":"","undefined":"color","type":"color"}]}
2018-05-19 10:51:18.850 - warn: yeelight.0 {"yeelight.0.color-anderegggjj":{"type":"device","common":{"name":"color","icon":"/icons/color.png"},"native":{"sid":"anderegggjj","type":"color"},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-ddd":{"type":"device","common":{"name":"color","icon":"/icons/color.png"},"native":{"sid":"ddd","type":"color"},"from":"system.adapter.yeelight.0","ts":1526700248087,"id":"yeelight.0.color-ddd","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}}
2018-05-19 10:51:18.850 - debug: yeelight.0 Create Device: yeelight.0.color-0x0000000004cae3a0
2018-05-19 10:51:18.853 - warn: yeelight.0 setObject yeelight.0.color-0x0000000004cae3a0.info (type=channel) property native missing!
2018-05-19 10:51:18.853 - warn: yeelight.0 setObject yeelight.0.color-0x0000000004cae3a0.info (type=channel) property common missing!
2018-05-19 10:51:18.853 - debug: yeelight.0 setObject yeelight.0.color-0x0000000004cae3a0.info (type=channel) property common.name missing, using id as name
2018-05-19 10:51:18.854 - debug: yeelight.0 listen to: 192.168.178.62
2018-05-19 10:51:18.870 - debug: yeelight.0 Device:["on","","5500","16711680","","3","89","194","24"]
2018-05-19 10:51:19.057 - debug: yeelight.0 listen to: 192.168.178.62
2018-05-19 10:51:19.058 - debug: yeelight.0 listen to: 192.168.178.61
2018-05-19 10:51:19.059 - debug: yeelight.0 O: {"yeelight.0.color-anderegggjj":{"type":"device","common":{"name":"color","icon":"/icons/color.png"},"native":{"sid":"anderegggjj","type":"color"},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-ddd":{"type":"device","common":{"name":"color","icon":"/icons/color.png"},"native":{"sid":"ddd","type":"color"},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-ddd","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-0x0000000004cae3a0":{"type":"device","common":{"name":"color","icon":"/icons/color.png"},"native":{"sid":"0x0000000004cae3a0","type":"color"},"from":"system.adapter.yeelight.0","ts":1526719878869,"_id":"yeelight.0.color-0x0000000004cae3a0","acl":{"object":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}}
2018-05-19 10:51:19.059 - debug: yeelight.0 object: yeelight.0.color-anderegggjj deleded
2018-05-19 10:51:19.059 - debug: yeelight.0 object: yeelight.0.color-ddd deleded
2018-05-19 10:51:19.065 - warn: yeelight.0 search: tt: {"yeelight.0.color-anderegggjj.info.com":{"common":{"name":"Command","role":"state","write":false,"read":true,"type":"string"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.com","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.info.connect":{"common":{"name":"Connect","role":"indicator.connected","write":false,"read":true,"type":"boolean"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.connect","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.info.IPAdress":{"common":{"name":"IP","role":"state","write":false,"read":true,"type":"string"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.IPAdress","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.info.Port":{"common":{"name":"Port","role":"state","write":false,"read":true,"type":"number"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.Port","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.power":{"type":"state","common":{"name":"power","role":"switch","write":true,"read":true,"type":"boolean","smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.power","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.active_bright":{"type":"state","common":{"name":"active_bright","role":"level.dimmer","write":true,"read":true,"type":"number","smartName":{"de":"Dachboden","smartType":"LIGHT","byON":"-"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.active_bright","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.ct":{"type":"state","common":{"name":"ct","role":"level.color.temperature","write":true,"read":true,"type":"number","min":1700,"max":6500,"smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.ct","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.rgb":{"type":"state","common":{"name":"rgb","role":"level.rgb","write":true,"read":true,"type":"string"},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.rgb","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.hue":{"type":"state","common":{"name":"hue","role":"level.color.hue","write":true,"read":true,"type":"number","min":0,"max":360,"smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.hue","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}},"yeelight.0.color-anderegggjj.sat":{"type":"state","common":{"name":"sat","role":"level.color.saturation","write":true,"read":true,"type":"number","min":0,"max":100,"smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.sat","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}}
2018-05-19 10:51:19.065 - debug: yeelight.0 search: {"common":{"name":"Command","role":"state","write":false,"read":true,"type":"string"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.com","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"common":{"name":"Connect","role":"indicator.connected","write":false,"read":true,"type":"boolean"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.connect","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"common":{"name":"IP","role":"state","write":false,"read":true,"type":"string"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.IPAdress","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"common":{"name":"Port","role":"state","write":false,"read":true,"type":"number"},"type":"state","native":{},"from":"system.adapter.yeelight.0","ts":1526700248087,"_id":"yeelight.0.color-anderegggjj.info.Port","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"type":"state","common":{"name":"power","role":"switch","write":true,"read":true,"type":"boolean","smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.power","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"type":"state","common":{"name":"active_bright","role":"level.dimmer","write":true,"read":true,"type":"number","smartName":{"de":"Dachboden","smartType":"LIGHT","byON":"-"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.active_bright","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"type":"state","common":{"name":"ct","role":"level.color.temperature","write":true,"read":true,"type":"number","min":1700,"max":6500,"smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.ct","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"type":"state","common":{"name":"rgb","role":"level.rgb","write":true,"read":true,"type":"string"},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.rgb","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"type":"state","common":{"name":"hue","role":"level.color.hue","write":true,"read":true,"type":"number","min":0,"max":360,"smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.hue","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - debug: yeelight.0 search: {"type":"state","common":{"name":"sat","role":"level.color.saturation","write":true,"read":true,"type":"number","min":0,"max":100,"smartName":{"de":"Dachboden","smartType":"LIGHT"}},"native":{},"from":"system.adapter.yeelight.0","ts":1526700248101,"_id":"yeelight.0.color-anderegggjj.sat","acl":{"object":1636,"state":1636,"owner":"system.user.admin","ownerGroup":"system.group.administrator"},"enums":{}}
2018-05-19 10:51:19.066 - warn: yeelight.0 search: tt: {}
2018-05-19 10:51:22.136 - error: yeelight.0 Error: connect EHOSTUNREACH 192.168.178.61:55443
2018-05-19 10:51:22.137 - error: yeelight.0 Error: connect EHOSTUNREACH 192.168.178.61:55443 -
Bin da leider immer noch nicht weiter.
Hab die Struktir jetzt nochmal geändert, dass unter device keine states sind sondern nur channel
device:
{ "type": "device", "common": { "name": "ceiling1", "icon": "/icons/ceiling1.png" }, "native": { "sid": "0x00000000049f120b", "type": "ceiling1" }, "from": "system.adapter.yeelight.0", "ts": 1527218959378, "_id": "yeelight.0.ceiling1-0x00000000049f120b", "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
channel:
{ "type": "channel", "native": {}, "common": { "name": "yeelight.0.ceiling1-0x00000000049f120b.control" }, "from": "system.adapter.yeelight.0", "ts": 1527218959364, "_id": "yeelight.0.ceiling1-0x00000000049f120b.control", "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
state:
{ "common": { "name": "Port", "role": "state", "write": false, "read": true, "type": "number" }, "type": "state", "native": {}, "from": "system.adapter.yeelight.0", "ts": 1527218959378, "_id": "yeelight.0.ceiling1-0x00000000049f120b.info.Port", "acl": { "object": 1636, "state": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator" } }
ich dreh eicht langsam durch… Die Devices verschwinden aus der liste und wenn ich sie aktualisiere sind sie wieder da aber nicht mehr als device sondern ohne role.
kann es daran liegen dass die Objekte zum teil mit setObjectNotExists erstellt werden?
hier ist die main:
https://github.com/MeisterTR/ioBroker.y … er/main.js
edit: Problem gelößt, mit keinen states unter device und vreate channel klappt es nun endlich..
-
So wie ich das jetzt verstanden habe ist die Logik folgende:
Devices und Channels werden als Objekte behandelt. Alles andere muss ein State sein. Steht in der Doku ganz oben.
Die Funktion deleteDevice löscht also die Objekte nicht wenn sie keine Channels sind.