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

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
 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
 alternative to this integration with a Tuya hub, you can use a
 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.
                 if user_input["hub_id"] != "None":
                     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[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]
                     self.__cloud_device = hub_choice
                     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
             # vendor specific dps start.  Between them, these three should cover
             # 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()
             cached_state = self._get_cached_state()
 

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

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

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

@@ -41,7 +41,7 @@
                     "local_key": "lokální klíč (local_key)",
                     "protocol_version": "Verze protokolu (zkuste auto pokud ji neznáte)",
                     "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": {

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

@@ -41,7 +41,7 @@
                     "local_key": "Lokaler Schlüssel",
                     "protocol_version": "Protokollversion (versuchen Sie auto, falls nicht bekannt)",
                     "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": {

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

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

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

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "protocol_version": "Protocol version (try auto if not known)",
                     "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": {

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

@@ -41,7 +41,7 @@
                     "local_key": "Clave local (Local key)",
                     "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)",
-                    "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": {

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

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "protocol_version": "Version du Protocole (Auto si inconnu)",
                     "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": {

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

@@ -42,7 +42,7 @@
                     "local_key": "Helyi kulcs (local_key)",
                     "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)",
-                    "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": {

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

@@ -41,7 +41,7 @@
                     "local_key": "Kunci lokal (local_key)",
                     "protocol_version": "Versi protokol (coba otomatis bila tidak diketahui)",
                     "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": {

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

@@ -42,7 +42,7 @@
                     "local_key": "Local key",
                     "protocol_version": "Versione protocollo (prova 'auto' in caso di dubbi)",
                     "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": {

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

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

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

@@ -42,7 +42,7 @@
                     "local_key": "Lokal nøkkel",
                     "protocol_version": "Protocol versjon (prøv auto hvis du der usikker)",
                     "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": {

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

@@ -41,7 +41,7 @@
                     "local_key": "Local key",
                     "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)",
-                    "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": {

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

@@ -41,7 +41,7 @@
                     "local_key": "Chave Local",
                     "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)",
-                    "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": {

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

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

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

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

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

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

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

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

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

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