Просмотр исходного кода

Use node_id in preference to uuid for sub-devices.

The Tuya uuid field is inconsistent. Sometimes it matches the node_id
for sub devices, sometimes the device_id. Sometimes it is a different
id altogether.

Issue #1951
Jason Rumney 1 год назад
Родитель
Сommit
b2ebd7312f

+ 4 - 0
README.md

@@ -50,6 +50,10 @@ they can handle, with typical limits being 1 or 3, depending on the specific
 Tuya module they are using.  This severely limits the number of sub devices
 Tuya module they are using.  This severely limits the number of sub devices
 that can be connected through this integration.
 that can be connected through this integration.
 
 
+Sub devices should be added using the `device_id`, `address` and `local_key`
+of the hub they are attached to, and the `node_id` of the sub-device. If there
+is no `node_id` listed, try using the `uuid` instead.
+
 Tuya Zigbee devices are usually standard zigbee devices, so as an
 Tuya Zigbee devices are usually standard zigbee devices, so as an
 alternative to this integration with a Tuya hub, you can use a
 alternative to this integration with a Tuya hub, you can use a
 supported Zigbee USB stick or Wifi hub with
 supported Zigbee USB stick or Wifi hub with

+ 5 - 2
custom_components/tuya_local/config_flow.py

@@ -200,9 +200,12 @@ class ConfigFlowHandler(config_entries.ConfigFlow, domain=DOMAIN):
                 # This is an indirectly addressable device. Need to know which hub it is connected to.
                 # This is an indirectly addressable device. Need to know which hub it is connected to.
                 if user_input["hub_id"] != "None":
                 if user_input["hub_id"] != "None":
                     hub_choice = self.__cloud_devices[user_input["hub_id"]]
                     hub_choice = self.__cloud_devices[user_input["hub_id"]]
-                    # Populate uuid and local_key from the child device to pass on complete information to the local step.
+                    # Populate node_id or uuid and local_key from the child
+                    # device to pass on complete information to the local step.
                     hub_choice["ip"] = ""
                     hub_choice["ip"] = ""
-                    hub_choice[CONF_DEVICE_CID] = device_choice["uuid"]
+                    hub_choice[CONF_DEVICE_CID] = (
+                        device_choice["node_id"] or device_choice["uuid"]
+                    )
                     hub_choice[CONF_LOCAL_KEY] = device_choice[CONF_LOCAL_KEY]
                     hub_choice[CONF_LOCAL_KEY] = device_choice[CONF_LOCAL_KEY]
                     self.__cloud_device = hub_choice
                     self.__cloud_device = hub_choice
                     return await self.async_step_search()
                     return await self.async_step_search()

+ 13 - 1
custom_components/tuya_local/device.py

@@ -376,7 +376,19 @@ class TuyaLocalDevice(object):
             # devices have dp 1. Lights generally start from 20.  101 is where
             # devices have dp 1. Lights generally start from 20.  101 is where
             # vendor specific dps start.  Between them, these three should cover
             # vendor specific dps start.  Between them, these three should cover
             # most devices.  148 covers a doorbell device that didn't have these
             # most devices.  148 covers a doorbell device that didn't have these
-            self._api.set_dpsUsed({"1": None, "20": None, "101": None, "148": None})
+            # 201 covers remote controllers and 2 and 9 cover others without 1
+            self._api.set_dpsUsed(
+                {
+                    "1": None,
+                    "2": None,
+                    "9": None,
+                    "20": None,
+                    "60": None,
+                    "101": None,
+                    "148": None,
+                    "201": None,
+                }
+            )
             await self.async_refresh()
             await self.async_refresh()
             cached_state = self._get_cached_state()
             cached_state = self._get_cached_state()
 
 

+ 1 - 1
custom_components/tuya_local/translations/bg.json

@@ -41,7 +41,7 @@
                     "local_key": "Локален ключ",
                     "local_key": "Локален ключ",
                     "protocol_version": "Версия на протокола (опитайте автоматична, ако не е известна)",
                     "protocol_version": "Версия на протокола (опитайте автоматична, ако не е известна)",
                     "poll_only": "Само анкетиране (опитайте това, ако устройството ви не работи напълно)",
                     "poll_only": "Само анкетиране (опитайте това, ако устройството ви не работи напълно)",
-                    "device_cid": "Sub device UUID (за устройства свързани чрез шлюз)"
+                    "device_cid": "Sub device node_id или uuid (за устройства свързани чрез шлюз)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/cz.json

@@ -41,7 +41,7 @@
                     "local_key": "lokální klíč (local_key)",
                     "local_key": "lokální klíč (local_key)",
                     "protocol_version": "Verze protokolu (zkuste auto pokud ji neznáte)",
                     "protocol_version": "Verze protokolu (zkuste auto pokud ji neznáte)",
                     "poll_only": "Poll only (vyzkoušejte pokud zařízení úplně nefunguje)",
                     "poll_only": "Poll only (vyzkoušejte pokud zařízení úplně nefunguje)",
-                    "device_cid": "Sub device UUID (pro zařízení připojená pomocí brány)"
+                     "device_cid": "Sub device node_id nebo uuid (pro zařízení připojená pomocí brány)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/de.json

@@ -41,7 +41,7 @@
                     "local_key": "Lokaler Schlüssel",
                     "local_key": "Lokaler Schlüssel",
                     "protocol_version": "Protokollversion (versuchen Sie auto, falls nicht bekannt)",
                     "protocol_version": "Protokollversion (versuchen Sie auto, falls nicht bekannt)",
                     "poll_only": "Nur Abfrage (versuchen Sie dies, wenn Ihr Gerät nicht vollständig funktioniert)",
                     "poll_only": "Nur Abfrage (versuchen Sie dies, wenn Ihr Gerät nicht vollständig funktioniert)",
-                    "device_cid": "Sub Geräte UUID (für Geräte, die über ein Gateway angeschlossen sind)"
+                    "device_cid": "Sub Geräte node_id oder uuid (für Geräte, die über ein Gateway angeschlossen sind)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/el.json

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "Έκδοση Πρωτοκόλλου (δοκιμάστε αυτόματο (auto) αν δεν το γνωρίζετε)",
                     "protocol_version": "Έκδοση Πρωτοκόλλου (δοκιμάστε αυτόματο (auto) αν δεν το γνωρίζετε)",
                     "poll_only": "Ανίχνευση μόνο (δοκιμάστε αυτό αν η συσκευή δε λειτουργεί πλήρως)",
                     "poll_only": "Ανίχνευση μόνο (δοκιμάστε αυτό αν η συσκευή δε λειτουργεί πλήρως)",
-                    "device_cid": "Sub device UUID (για συσκευές συνδεμένες μέσω gateway)"
+                    "device_cid": "Sub device node_id ή uuid (για συσκευές συνδεμένες μέσω gateway)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/en.json

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "Protocol version (try auto if not known)",
                     "protocol_version": "Protocol version (try auto if not known)",
                     "poll_only": "Poll only (try this if your device does not work fully)",
                     "poll_only": "Poll only (try this if your device does not work fully)",
-                    "device_cid": "Sub device UUID (for devices connected via gateway)"
+                    "device_cid": "Sub device node_id or uuid (for devices connected via gateway)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/es.json

@@ -41,7 +41,7 @@
                     "local_key": "Clave local (Local key)",
                     "local_key": "Clave local (Local key)",
                     "protocol_version": "Versión del protocolo (pruebe automático si no lo sabe)",
                     "protocol_version": "Versión del protocolo (pruebe automático si no lo sabe)",
                     "poll_only": "Solo encuesta (pruebe esto si su dispositivo no funciona completamente)",
                     "poll_only": "Solo encuesta (pruebe esto si su dispositivo no funciona completamente)",
-                    "device_cid": "Sub device UUID (para dispositivos conectados a través de una puerta de enlace)"
+                    "device_cid": "Sub device node_id o uuid (para dispositivos conectados a través de una puerta de enlace)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/fr.json

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "Version du Protocole (Auto si inconnu)",
                     "protocol_version": "Version du Protocole (Auto si inconnu)",
                     "poll_only": "Poll only (Essayez ceci si votre appareil ne fonctionne pas complètement)",
                     "poll_only": "Poll only (Essayez ceci si votre appareil ne fonctionne pas complètement)",
-                    "device_cid": "UUID de sous-appareil (Pour les appareils connectés via une passerelle)"
+                    "device_cid": "node_id ou uuid de sous-appareil (Pour les appareils connectés via une passerelle)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/hu.json

@@ -42,7 +42,7 @@
                     "local_key": "Helyi kulcs (local_key)",
                     "local_key": "Helyi kulcs (local_key)",
                     "protocol_version": "Protokol verzió (hagyd auto-n, ha nem tudod)",
                     "protocol_version": "Protokol verzió (hagyd auto-n, ha nem tudod)",
                     "poll_only": "Csak olvasás (próbáld ki ezt, ha az eszköz nem működik rendesen)",
                     "poll_only": "Csak olvasás (próbáld ki ezt, ha az eszköz nem működik rendesen)",
-                    "device_cid": "Aleszköz UUID (átjárón keresztül használt eszközök esetén)"
+                    "device_cid": "Aleszköz node_id vagy uuid (átjárón keresztül használt eszközök esetén)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/id.json

@@ -41,7 +41,7 @@
                     "local_key": "Kunci lokal (local_key)",
                     "local_key": "Kunci lokal (local_key)",
                     "protocol_version": "Versi protokol (coba otomatis bila tidak diketahui)",
                     "protocol_version": "Versi protokol (coba otomatis bila tidak diketahui)",
                     "poll_only": "Hanya poll (Coba ini bila perangkat Anda tidak berfungsi secara penuh)",
                     "poll_only": "Hanya poll (Coba ini bila perangkat Anda tidak berfungsi secara penuh)",
-                    "device_cid": "ID sub perangkat (untuk perangkat yang tersambung via gateway)"
+                    "device_cid": "node_id atau uuid sub perangkat (untuk perangkat yang tersambung via gateway)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/it.json

@@ -42,7 +42,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "Versione protocollo (prova 'auto' in caso di dubbi)",
                     "protocol_version": "Versione protocollo (prova 'auto' in caso di dubbi)",
                     "poll_only": "Poll only (prova questa opzione se il dispositivo non funziona correttamente)",
                     "poll_only": "Poll only (prova questa opzione se il dispositivo non funziona correttamente)",
-                    "device_cid": "Sub device UUID (per dispositivi connessi tramite gateway)"
+                    "device_cid": "Sub device node_id o uuid (per dispositivi connessi tramite gateway)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/ja.json

@@ -41,7 +41,7 @@
                     "local_key": "ローカルキー",
                     "local_key": "ローカルキー",
                     "protocol_version": "プロトコルのバージョン (不明な場合はAutoを試してください)",
                     "protocol_version": "プロトコルのバージョン (不明な場合はAutoを試してください)",
                     "poll_only": "投票のみ (デバイスが動作しない場合)",
                     "poll_only": "投票のみ (デバイスが動作しない場合)",
-                    "device_cid": "サブデバイスUUID (デバイスがハブ経由で接続されている場合)"
+                    "device_cid": "サブデバイスのnode_id又はuuid(デバイスがハブ経由で接続されている場合)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/no-NB.json

@@ -42,7 +42,7 @@
                     "local_key": "Lokal nøkkel",
                     "local_key": "Lokal nøkkel",
                     "protocol_version": "Protocol versjon (prøv auto hvis du der usikker)",
                     "protocol_version": "Protocol versjon (prøv auto hvis du der usikker)",
                     "poll_only": "Kun poll (prøv dette hvis enhenten ikke virker ordentlig)",
                     "poll_only": "Kun poll (prøv dette hvis enhenten ikke virker ordentlig)",
-                    "device_cid": "Underenhets-UUID (for enheter tilkoblet via gateway)"
+                    "device_cid": "Underenhets node_id eller uuid (for enheter tilkoblet via gateway)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/pl.json

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "Wersja protokołu (spróbuj auto jeśli nieznana)",
                     "protocol_version": "Wersja protokołu (spróbuj auto jeśli nieznana)",
                     "poll_only": "Poll only (spróbuj jeśli Twoje urządzenie nie działa w pełni)",
                     "poll_only": "Poll only (spróbuj jeśli Twoje urządzenie nie działa w pełni)",
-                    "device_cid": "Sub device UUID (dla urządzeń podłączonych poprzez bramkę)"
+                    "device_cid": "Sub device node_id lub uuid (dla urządzeń podłączonych poprzez bramkę)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/pt-BR.json

@@ -41,7 +41,7 @@
                     "local_key": "Chave Local",
                     "local_key": "Chave Local",
                     "protocol_version": "Versão do protocolo (tente auto se não souber)",
                     "protocol_version": "Versão do protocolo (tente auto se não souber)",
                     "poll_only": "Pesquisar (tente isto se o seu dispositivo não funcionar totalmente)",
                     "poll_only": "Pesquisar (tente isto se o seu dispositivo não funcionar totalmente)",
-                    "device_cid": "Sub device UUID (para dispositivos conectados via gateway)"
+                    "device_cid": "node_id ou uuid do sub-dispoitivo (para dispositivos conectados via gateway)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/ru.json

@@ -41,7 +41,7 @@
                     "local_key": "Локальный ключ",
                     "local_key": "Локальный ключ",
                     "protocol_version": "Версия протокола (попробуйте auto, если не уверены)",
                     "protocol_version": "Версия протокола (попробуйте auto, если не уверены)",
                     "poll_only": "Только опрос (попробуйте это, если ваше устройство не работает в полной мере)",
                     "poll_only": "Только опрос (попробуйте это, если ваше устройство не работает в полной мере)",
-                    "device_cid": "UUID подустройства (для устройств, подключенных через шлюз)"
+                    "device_cid": "node_id или uuid подустройства (для устройств, подключенных через шлюз)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/uk.json

@@ -43,7 +43,7 @@
                     "local_key": "Локальний ключ (local_key)",
                     "local_key": "Локальний ключ (local_key)",
                     "protocol_version": "Версія протоколу (якщо не знаєте, спробуйте 'auto')",
                     "protocol_version": "Версія протоколу (якщо не знаєте, спробуйте 'auto')",
                     "poll_only": "Виключно опитування (спробуйте це, якщо ваш пристрій не зовсім працює)",
                     "poll_only": "Виключно опитування (спробуйте це, якщо ваш пристрій не зовсім працює)",
-                    "device_cid": "Sub device UUID (для пристроїв, підключених через шлюз)"
+                    "device_cid": "Sub device node_id або uuid (для пристроїв, підключених через шлюз)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 2 - 1
custom_components/tuya_local/translations/ur.json

@@ -43,7 +43,8 @@
                     "local_key": "مقامی کلید",
                     "local_key": "مقامی کلید",
                     "protocol_version": "پروٹوکول ورژن (اگر معلوم نہ ہو تو خود کار طریقے سے آزمائیں)",
                     "protocol_version": "پروٹوکول ورژن (اگر معلوم نہ ہو تو خود کار طریقے سے آزمائیں)",
                     "poll_only": "صرف پول کریں (اگر آپ کا آلہ مکمل طور پر کام نہیں کرتا ہے تو اسے آزمائیں)",
                     "poll_only": "صرف پول کریں (اگر آپ کا آلہ مکمل طور پر کام نہیں کرتا ہے تو اسے آزمائیں)",
-                    "device_cid": "سب ڈیوائس آئی ڈی (گیٹ وے کے ذریعے منسلک آلات کے لیے) (UUID)"
+                    "NODE_ID or uuid of the sub-device": "ذیلی آلہ کا NODE_ID یا UUID"
+                    "device_cid": "ذیلی آلہ کا node_id یا uuid (گیٹ وے کے ذریعے منسلک آلات کے لیے)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/zh-Hans.json

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "协议版本(如果不清楚,请选择自动)",
                     "protocol_version": "协议版本(如果不清楚,请选择自动)",
                     "poll_only": "仅轮询(如果设备无法正常工作,请选择此项)",
                     "poll_only": "仅轮询(如果设备无法正常工作,请选择此项)",
-                    "device_cid": "子设备UUID(对于通过网关连接的设备)"
+                    "device_cid": "子设备node_id或uuid(对于通过网关连接的设备)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {

+ 1 - 1
custom_components/tuya_local/translations/zh-Hant.json

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "local_key": "Local key",
                     "protocol_version": "協議版本(如果不清楚,請選擇自動)",
                     "protocol_version": "協議版本(如果不清楚,請選擇自動)",
                     "poll_only": "僅輪詢(如果設備無法正常運作,請選擇此項)",
                     "poll_only": "僅輪詢(如果設備無法正常運作,請選擇此項)",
-                    "device_cid": "子設備UUID(對於透過網關連接的設備)"
+                    "device_cid": "子設備node_id或uuid(對於透過網關連接的設備)"
                 }
                 }
             },
             },
             "select_type": {
             "select_type": {