NEWS
GetObject( id, "rooms") liefert zu viele "Räume"
-
Moin,
ich versuche mich gerade auch am ioBroker. Komme so langsam etwas rein, auch wenn ich mich echt noch orientieren muss.
Ich habe mich zuerst am "Licht zählen"-Skript versucht.
Da habe ich ein Problem mit "getObject( id, "rooms");":
Es werden mittels ".enumNames" ein Array von Räumen zurückgegeben, wo ich aber den Zusammenhang zu meinen Objekten nicht herstellen kann:
Test-Skript mit entsprechender Log-Meldung:
function testRooms( obj) { var textRaum = []; $('state[id=*.on][role=switch.light](functions="funcLight")').each( function( id, i){ var status = getState( id).val; var obj = getObject( id); var raeume = getObject( id, "rooms"); log( obj.common.name); log( raeume.enumNames); textRaum.push( raeume.enumNames); }); //*** doppelte Raumnamen entfernen textRaum = textRaum.filter( ( x, i, a) => a.indexOf( x) == i); log( textRaum); } function main() { setTimeout( function(){ testRooms( ); }, 2000); } main(); ------- Log 18:56:00.038 [info] javascript.0 Stop script script.js.common.test_rooms 18:56:00.050 [info] javascript.0 Start javascript script.js.common.test_rooms 18:56:00.050 [info] javascript.0 script.js.common.test_rooms: registered 0 subscriptions and 0 schedules 18:56:02.110 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Flur_1.on 18:56:02.110 [info] javascript.0 script.js.common.test_rooms: Flur,Wohnzimmer 18:56:02.113 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Flur_2.on 18:56:02.113 [info] javascript.0 script.js.common.test_rooms: Flur,Wohnzimmer 18:56:02.115 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Flur_3.on 18:56:02.116 [info] javascript.0 script.js.common.test_rooms: Flur,Wohnzimmer 18:56:02.118 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Ida_1.on 18:56:02.118 [info] javascript.0 script.js.common.test_rooms: Kinderzimmer Ida,Wohnzimmer 18:56:02.119 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Ida_2.on 18:56:02.120 [info] javascript.0 script.js.common.test_rooms: Kinderzimmer Ida,Wohnzimmer 18:56:02.120 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Ida_3.on 18:56:02.121 [info] javascript.0 script.js.common.test_rooms: Kinderzimmer Ida,Wohnzimmer 18:56:02.121 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Küche_Tisch.on 18:56:02.122 [info] javascript.0 script.js.common.test_rooms: Küche,Wohnzimmer 18:56:02.122 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Schlafzimmer_1.on 18:56:02.122 [info] javascript.0 script.js.common.test_rooms: Schlafzimmer,Wohnzimmer 18:56:02.123 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Schlafzimmer_2.on 18:56:02.123 [info] javascript.0 script.js.common.test_rooms: Schlafzimmer,Wohnzimmer 18:56:02.124 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Schlafzimmer_3.on 18:56:02.124 [info] javascript.0 script.js.common.test_rooms: Schlafzimmer,Wohnzimmer 18:56:02.125 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Schlafzimmer_4.on 18:56:02.125 [info] javascript.0 script.js.common.test_rooms: Schlafzimmer,Wohnzimmer 18:56:02.125 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Schlafzimmer_5.on 18:56:02.126 [info] javascript.0 script.js.common.test_rooms: Schlafzimmer,Wohnzimmer 18:56:02.126 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Wohnzimmer_Iris.on 18:56:02.127 [info] javascript.0 script.js.common.test_rooms: Wohnzimmer 18:56:02.127 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Wohnzimmer_Kommode.on 18:56:02.128 [info] javascript.0 script.js.common.test_rooms: Wohnzimmer 18:56:02.128 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Wohnzimmer_Kugel.on 18:56:02.128 [info] javascript.0 script.js.common.test_rooms: Wohnzimmer 18:56:02.129 [info] javascript.0 script.js.common.test_rooms: ralloHUE_2.0.Wohnzimmer_Tisch.on 18:56:02.129 [info] javascript.0 script.js.common.test_rooms: Wohnzimmer 18:56:02.130 [info] javascript.0 script.js.common.test_rooms: Flur,Wohnzimmer,Flur,Wohnzimmer,Flur,Wohnzimmer,Kinderzimmer Ida,Wohnzimmer,Kinderzimmer Ida,Wohnzimmer,Kinderzimmer Ida,Wohnzimmer,Küche,Wohnzimmer,Schlafzimmer,Wohnzimmer,Schlafzimmer,Wohnzimmer,Schlafzimmer,Wohnzimmer,Schlafzimmer,Wohnzimmer,Schlafzimmer,Wohnzimmer,Wohnzimmer,Wohnzimmer,Wohnzimmer,Wohnzimmer
Es wird teilweise willkürlich? ein zweiter Raum mit ausgegeben.
Wenn ich das mit ".enumNames[0]" begrenze scheint es der korrekte Raum zu sein.
Ich habe jeder HUE-Lampe genau einem Raum zugeordnet. enum.rooms wurde (meine ich) durch Homematic Instanzen angelegt:
Mache ich da was falsch oder habe ich da was nicht verstanden?
Danke
raller09
-
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
-