NEWS
Google Home/Assistant ioBroker einrichten/nutzen
-
Hi!
Nachdem ich jetzt nun in den letzten Wochen mehrere Stunden damit zugebracht habe, hier zu lesen und auszuprobieren, wo das Problem liegt, muss ich einfach hier noch mal fragen.
Ich habe Aqara Sensoren (Temperatur und Fenster) und will die in meiner GHome-App angezeigt bekommen. Ich bekomme es einfach nicht hin, weil ich die richtige Kombination von Type/Trait/Attribut irgendwie nicht herausfinden kann. Kann mir hier jemand mal für absolute Idioten erklären, wie das geht? Ich bin durchaus bereit komplett von vorne anzufangenMein Setup: Raspberry 3B+ mit RaspBee Aufsatz von Dresden Elektronik, drei Temperatur-Sensoren und zwei Fenster-Sensoren von Xiaomi/Aqara
-
@Maximilian-Klie könntest du ein export von den objekten (Beschreibung Beitrag 1) machen dann kann ich mir das anschauen. Wenn ich Zeit habe.
-
@tombox
Hier bitte:{ "deconz.0.Sensors.2": { "type": "device", "common": { "name": "Bad oben Temp", "role": "sensor", "smartName": false }, "native": { "ep": 1, "etag": "1cc6a3fe67a5e3502457af81c184ceae", "id": "2", "manufacturername": "LUMI", "modelid": "lumi.weather", "swversion": "20161129", "type": "ZHATemperature", "uniqueid": "00:15:8d:00:03:f0:55:74-01-0402" }, "from": "system.adapter.deconz.0", "user": "system.user.admin", "ts": 1574276560696, "_id": "deconz.0.Sensors.2", "acl": { "object": 1636 } }, "deconz.0.Sensors.2.battery": { "type": "state", "common": { "name": "Multisensor battery", "type": "number", "role": "indicator.battery", "read": true, "write": false }, "native": {}, "from": "system.adapter.deconz.0", "user": "system.user.admin", "ts": 1574276560720, "_id": "deconz.0.Sensors.2.battery", "acl": { "object": 1636, "state": 1636 } }, "deconz.0.Sensors.2.lastupdated": { "type": "state", "common": { "name": "lastupdated", "type": "string", "role": "state", "read": true, "write": false }, "native": {}, "from": "system.adapter.deconz.0", "user": "system.user.admin", "ts": 1574276615079, "_id": "deconz.0.Sensors.2.lastupdated", "acl": { "object": 1636, "state": 1636 } }, "deconz.0.Sensors.2.offset": { "type": "state", "common": { "name": "Multisensor offset", "type": "number", "role": "state", "read": true, "write": true, "smartName": false }, "native": {}, "from": "system.adapter.iot.0", "user": "system.user.admin", "ts": 1577399877048, "_id": "deconz.0.Sensors.2.offset", "acl": { "object": 1636, "state": 1636 } }, "deconz.0.Sensors.2.on": { "type": "state", "common": { "name": "Multisensor on", "type": "boolean", "role": "state", "read": true, "write": true, "smartName": false }, "native": {}, "from": "system.adapter.deconz.0", "user": "system.user.admin", "ts": 1574276560746, "_id": "deconz.0.Sensors.2.on", "acl": { "object": 1636, "state": 1636 } }, "deconz.0.Sensors.2.reachable": { "type": "state", "common": { "name": "Multisensor reachable", "type": "boolean", "role": "state", "read": true, "write": false }, "native": {}, "from": "system.adapter.deconz.0", "user": "system.user.admin", "ts": 1574276560746, "_id": "deconz.0.Sensors.2.reachable", "acl": { "object": 1636, "state": 1636 } }, "deconz.0.Sensors.2.temperature": { "type": "state", "common": { "name": "Sensor Bad oben", "type": "number", "role": "value.temperature", "unit": "°C", "read": true, "write": true, "smartName": false, "enums": [ { "_id": "enum.functions.infos", "common": { "name": "Infos", "icon": "", "color": false } }, { "_id": "enum.rooms.bad_oben", "common": { "name": "Bad oben", "icon": "", "color": false } } ] }, "native": {}, "from": "system.adapter.iot.0", "user": "system.user.admin", "ts": 1577541459184, "_id": "deconz.0.Sensors.2.temperature", "acl": { "object": 1636, "owner": "system.user.admin", "ownerGroup": "system.group.administrator", "state": 1636 } } }
Ich will nicht ausschließen, dass ich irgendwo Mist gemacht hab. Das ist jetzt auch nur ein Sensor exemplarisch. Danke schon mal!
-
@Maximilian-Klie die json datei wäre einfacher für mich
-
@tombox Verzeihung. Hier isse: deconz.0.Sensors.2.json
-
@tombox said in Google Home/Assistant ioBroker einrichten/nutzen:
https://issuetracker.google.com/issues/new?component=655104&template=1284148
Mache ich danke.
Aber der Zustand, dass der Adapter Abstürzt wenn ich in der GHome App ein Thermostat aufrufe wäre noch zu klären. Ich habe mal den iot Adapter etwas debugt und folgendes rausgefunden:
der Fehler Steckt in folgender Datei:
/opt/iobroker/node_modules/iobroker.iot/lib/GoogleHome.jsUnd zwar in der Zeile 2073:
getStates(ids, callback, states) { states = states || {}; if (!ids || !ids.length) { callback(states); } else { const id = ids.shift(); this.adapter.getForeignState(id, (err, state) => { <-- Hier steck der Fehler! states[id] = state && state.val; setImmediate(() => this.getStates(ids, callback, states)); }); } }
ids ist ein Array der zwei Elemente hat, das erste ist bestückt das zweite ist leer. Warum auch immer liefert hier das ids.length in der If trotzdem eine 1 für das leere Element. Dadurch geht der If zum zweiten mal in den Else-Zweig. Beim shift kommt's dann zur "Tragödie", die Konstante id wird undefined, wodurch der getForeignState abbricht weil er .startwith(ALIAS_STARTS_WITH) nicht auf ein undefiniertes Objekt machen kann. Dadurch schmiert der Adapter dann ab und Google Home App bekommt keine Antwort.
Ich habe die Funktion wie folgt abgeändert:
getStates(ids, callback, states) { states = states || {}; const id = ids.shift(); if (!id || !id.length) { callback(states); } else { //const id = ids.shift(); this.adapter.getForeignState(id, (err, state) => { states[id] = state && state.val; setImmediate(() => this.getStates(ids, callback, states)); }); } }
Also den Shift vor die If gezogen und in der If Frage ich die Konstante ab.
Jetzt läuft es durch und man kann Thermostate über die App auch bedienen.
Hat noch jemand anders den Fehler gehabt?
Und reicht es hier als Lösung oder soll ich das noch wo anders posten?Viele Grüße, David
-
Hallo,
ich hab jetzt auch mal diese Zeilen abgeändert und es funktionieren jetzt auch die Thermostate. Vorher ist der Adapter sofort abgestürzt, sobald irgendetwas mit Temperatur zu tun hatte.
Allerdings kann ich sie nur über die Google Home App bedienen und nicht auf Zuruf, hier kommt das das Gerät aktuell nicht erreichbar ist. -
@echoDave Hi danke für das Feedback, In meiner Version ist der Fehler schon länger behoben aber ich hatte noch keine Zeit es in die offizielle Version zu kopieren. Werde ich zeitnah machen.
Bzw teste doch mal meine Version ob da der Fehler auch weg ist.
-
@Maximilian-Klie Der schnellste Weg dein Problem zu fixen ist Sensor.2 manuell zu löschen und durch deconz neuerzeugen lassen und dann wie beschrieben dem Device Sensors.2 ein Raum und Funktion zu weisen und nicht dem State temperature
-
@tombox welche ist deine hast du mal nen Link zum github?
-
@echoDave https://github.com/TA2k/ioBroker.iot Anleitung zur Installation in Beitrag 1
-
@hollywoot Also die Jalousie wird erkannt wenn man dem Channel hm-rpc.0.OEXXXXXXXX.1 einen Raum und Funktion zuweist. Das Problem ist das der Türsensor bei mir im gleichen Channel liegt. Damit ist es schwer zwei Geräte automatisch zu erkennen. Ist es möglich den Sensor von der Jalousie zu trennen?
-
@tombox said in Google Home/Assistant ioBroker einrichten/nutzen:
ok Danke
aber welcher Brunch ist deiner? den Master 1.1.9 habe ich bereits von da.
Sorry übersehen, dass es dein repo ist nicht das vom iobroker. ich teste mal.Wieso kann man die Thermostate nicht per Sprache steuern?
-
Hmm also deine Version hat schon mal Probleme die Thermostate überhaupt einzufügen:
iot.0 2019-12-31 16:33:19.970 warn (10126) Missing name, type or treat for: hm-rpc.0.MEQ1457539.1.SET_TEMPERATURE. Not added to GoogleHome iot.0 2019-12-31 16:33:19.970 warn (10126) Missing name, type or treat for: hm-rpc.0.MEQ1773490.1.SET_TEMPERATURE. Not added to GoogleHome iot.0 2019-12-31 16:33:19.969 warn (10126) Missing name, type or treat for: hm-rpc.0.MEQ1773431.1.SET_TEMPERATURE. Not added to GoogleHome iot.0 2019-12-31 16:33:19.969 warn (10126) Missing name, type or treat for: hm-rpc.0.MEQ1452909.1.SET_TEMPERATURE. Not added to GoogleHome iot.0 2019-12-31 16:33:19.969 warn (10126) Missing name, type or treat for: hm-rpc.0.MEQ1450924.1.SET_TEMPERATURE. Not added to GoogleHome iot.0 2019-12-31 16:33:19.968 warn (10126) Missing name, type or treat for: hm-rpc.0.MEQ1773015.1.SET_TEMPERATURE. Not added to GoogleHome
mit Blinds gibts auch Probleme, irgendwie fügt die Adapter Version einen Doppelten Eintrag hinzu ohne Namen.
Der Führt zu Fehlern:
Meine Ikea Glühbirne (Zigbee) wurde auch nicht wirklich gut erkannt, konnte die nicht steuern.
-
@echoDave Wenn du MEQ1457539.1 und PEQ2266365.1 und die Lampe kurz als Export bereitstellen könntest, kann ich mir das bei mir anschauen.
-
@tombox gerne aber erst im neuen Jahr, habe die master vom iobroker wieder installiert damit das System über die Tage läuft stelle es im Neuen Jahr wieder auf deine Version.
Guten Rutsch euch allen!
-
Ich habe jetzt auch wieder die Version von tombox installiert. Thermostate kann ich damit hinzufügen und beim Synchronisieren der Geräte wird der Adapter jetzt nicht mehr rot.
Wenn ich Geräte manuell hinzufüge und dann Type und Funktion auswähle z.B. Thermostat dann steht nach dem speichern plötzlich Light drin oder switch. Nach ca. 3-5 mal korrigieren und neu speichern bleibt es dann.
Eine Zeile bei den google devices kann ich nicht mehr löschen, hier steht nur Blinds und Wohnzimmer das sich immer mal wieder verändert. -
@echoDave Der Export ist unabhängig davon welche Version gerade installiert ist. Bei den Thermostaten überprüfe nochmal das der Raum und Funktion auf dem Channel zugewiesen ist und nicht SET_TEMPERATURE
-
@tombox ok, kann schon mal sagen, dass bei mir die functions/räume auf den states liegen und nicht auf Channels.
-
@tombox said in Google Home/Assistant ioBroker einrichten/nutzen:
@Maximilian-Klie Der schnellste Weg dein Problem zu fixen ist Sensor.2 manuell zu löschen und durch deconz neuerzeugen lassen und dann wie beschrieben dem Device Sensors.2 ein Raum und Funktion zu weisen und nicht dem State temperature
Heya! Danke, werde ich testen. Das Ergebnis teile ich hier mit.