Ich habe dasselbe Problem, bin durch einen Skriptfehler drauf gestoßen und kann das Datenkonsistens-Problem nicht lösen! Ich habe mehrer Räume definiert (29 Räume, spezielles Gebäude mit Nebengelass).
Unter javascript.0.alarm.devices.cams.Camx sind diverse Kameras als device mit weiteren Unterdatenpunkten vorhanden.
Den Geräten Cam0 - CamX habe ich nun die entsprechenden Räume zugewiesen, jede Kamera ist und kann nur in einem Raum sein.
Das habe ich in der object.json verifizieren können und auch bei der Anzeige der enums und der Zuordnung der Räume (auch nach einem Neustart des ioBrokers oder Linux) ist alles in Ordnung.
Bsp.
let dppCamProp = 'javascript.0.alarm.devices.Cams.Cam0';
let oCamRooms = getObject(dppCamProp), 'rooms')
logs(fctName + ', oCamRooms: ' + JSON.stringify(oCamRooms), 'debug2');
"enumIds":["enum.rooms.entrance","enum.rooms.workshop"],"enumNames":["entrance","workshop"]
Die Kamera ist aber gar nicht der Werkstatt zugeordnet
"enum.rooms.entrance":
{
"_id": "enum.rooms.entrance",
"type": "enum",
"common": {
"name": {
"en": "entrance",
"de": "Hauseingang außen"
},
"desc": "Hauseingang außen",
"members": [
"javascript.0.alarm.devices.Cams.Cam0",
"javascript.0.alarm.zones.2.20"
]
},
"from": "system.adapter.hm-rega.0",
"ts": 1544567253529,
"acl": {
"object": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator"
},
"enumIds": [
],
"enumNames": [
]
}
"enum.rooms.workshop"
{
"_id": "enum.rooms.workshop",
"type": "enum",
"common": {
"name": {
"en": "workshop",
"de": "Werkstatt"
},
"desc": "Werkstatt",
"members": [
"javascript.0.alarm.devices.Cams.Cam7",
"hm-rpc.0.BidCoS-RF",
"javascript.0.alarm.zones.2.22"
]
},
"from": "system.adapter.hm-rega.0",
"ts": 1544124463498,
"acl": {
"object": 1636,
"owner": "system.user.admin",
"ownerGroup": "system.group.administrator"
},
"enumIds": [
],
"enumNames": [
]
}
Nach meinem Verständnis der Funktion getObject(id, 'rooms') bzw. getObject(id, true) liefert dieser Aufruf quasi "reverse engineered" aus enum.rooms den zugeordneten Raum. Aber wieso auch die Werkstatt?
Es gibt 2 Kameras (Cam1 und Cam2), wo die Raum-Zuordnung stimmt. Diese beiden Kameras sind die beiden einzigen, wo es anscheinend immer stimmt (auch nach löschen eines Raumes).
Folgendes habe ich noch beobachtet:
Es wird an fast jeder Kamera ein 2. Raum angehangen, der 2. Raum ist überall derselbe
Wenn ich einen Raum lösche, z. B. den "FALSCHEN" angehangenen, dann sucht sich ioBroker einen neuen Zombieraum
Die Ausgaben der enum.rooms-Objekte von "entrance" und "workshop" sind ja korrekt.
Gibt es Beschränkungen in der Namensgebung für Räume?
Meine enum.room-Ids lauten z. B. wie folgt:
enum.rooms.dining_room
enum.rooms.co-op_office
enum.rooms.co-op_entrance_hall
enum.rooms.utility_room
enum.rooms.entrance
…
Ist das nun ein Fehler in javascript-Adapter oder im js-Controller?
Laufen tut das ganze bei mir unter
node: v8.14.0
debian Jessie, aktueller Patchstand
Script-Engine: 4.0.5
js-Controller: 1.4.2