Skip to content
GitLab
Explore
Sign in
Primary navigation
Search or go to…
Project
C
Core
Manage
Activity
Members
Labels
Plan
Issues
Issue boards
Milestones
Iterations
Wiki
Code
Merge requests
Repository
Branches
Commits
Tags
Repository graph
Compare revisions
Snippets
Locked files
Build
Pipelines
Jobs
Pipeline schedules
Artifacts
Deploy
Releases
Package registry
Container Registry
Model registry
Operate
Environments
Terraform modules
Monitor
Incidents
Service Desk
Analyze
Value stream analytics
Contributor analytics
CI/CD analytics
Repository analytics
Code review analytics
Issue analytics
Model experiments
Help
Help
Support
GitLab documentation
Compare GitLab plans
Community forum
Contribute to GitLab
Provide feedback
Terms and privacy
Keyboard shortcuts
?
Snippets
Groups
Projects
Show more breadcrumbs
mirrored_repos
HomeAssistant
Core
Commits
c6157d55
Unverified
Commit
c6157d55
authored
3 years ago
by
Franck Nijhof
Committed by
GitHub
3 years ago
Browse files
Options
Downloads
Patches
Plain Diff
Migrate Tuya unique IDs for switches & lights (#58631)
parent
9c5a79c6
No related branches found
No related tags found
No related merge requests found
Changes
1
Hide whitespace changes
Inline
Side-by-side
Showing
1 changed file
homeassistant/components/tuya/__init__.py
+84
-1
84 additions, 1 deletion
homeassistant/components/tuya/__init__.py
with
84 additions
and
1 deletion
homeassistant/components/tuya/__init__.py
+
84
−
1
View file @
c6157d55
...
...
@@ -14,9 +14,11 @@ from tuya_iot import (
TuyaOpenMQ
,
)
from
homeassistant.components.light
import
DOMAIN
as
LIGHT_DOMAIN
from
homeassistant.components.switch
import
DOMAIN
as
SWITCH_DOMAIN
from
homeassistant.config_entries
import
ConfigEntry
from
homeassistant.core
import
HomeAssistant
,
callback
from
homeassistant.helpers
import
device_registry
as
dr
from
homeassistant.helpers
import
device_registry
as
dr
,
entity_registry
as
er
from
homeassistant.helpers.dispatcher
import
dispatcher_send
from
.const
import
(
...
...
@@ -33,6 +35,7 @@ from .const import (
PLATFORMS
,
TUYA_DISCOVERY_NEW
,
TUYA_HA_SIGNAL_UPDATE_ENTITY
,
DPCode
,
)
_LOGGER
=
logging
.
getLogger
(
__name__
)
...
...
@@ -115,6 +118,9 @@ async def _init_tuya_sdk(hass: HomeAssistant, entry: ConfigEntry) -> bool:
await
hass
.
async_add_executor_job
(
home_manager
.
update_device_cache
)
await
cleanup_device_registry
(
hass
,
device_manager
)
# Migrate old unique_ids to the new format
async_migrate_entities_unique_ids
(
hass
,
entry
,
device_manager
)
# Register known device IDs
device_registry
=
dr
.
async_get
(
hass
)
for
device
in
device_manager
.
device_map
.
values
():
...
...
@@ -143,6 +149,83 @@ async def cleanup_device_registry(
break
@callback
def
async_migrate_entities_unique_ids
(
hass
:
HomeAssistant
,
config_entry
:
ConfigEntry
,
device_manager
:
TuyaDeviceManager
)
->
None
:
"""
Migrate unique_ids in the entity registry to the new format.
"""
entity_registry
=
er
.
async_get
(
hass
)
registry_entries
=
er
.
async_entries_for_config_entry
(
entity_registry
,
config_entry
.
entry_id
)
light_entries
=
{
entry
.
unique_id
:
entry
for
entry
in
registry_entries
if
entry
.
domain
==
LIGHT_DOMAIN
}
switch_entries
=
{
entry
.
unique_id
:
entry
for
entry
in
registry_entries
if
entry
.
domain
==
SWITCH_DOMAIN
}
for
device
in
device_manager
.
device_map
.
values
():
# Old lights where in `tuya.{device_id}` format, now the DPCode is added.
#
# If the device is a previously supported light category and still has
# the old format for the unique ID, migrate it to the new format.
#
# Previously only devices providing the SWITCH_LED DPCode were supported,
# thus this can be added to those existing IDs.
#
# `tuya.{device_id}` -> `tuya.{device_id}{SWITCH_LED}`
if
(
device
.
category
in
(
"
dc
"
,
"
dd
"
,
"
dj
"
,
"
fs
"
,
"
fwl
"
,
"
jsq
"
,
"
xdd
"
,
"
xxj
"
)
and
(
entry
:
=
light_entries
.
get
(
f
"
tuya.
{
device
.
id
}
"
))
and
f
"
tuya.
{
device
.
id
}{
DPCode
.
SWITCH_LED
}
"
not
in
light_entries
):
entity_registry
.
async_update_entity
(
entry
.
entity_id
,
new_unique_id
=
f
"
tuya.
{
device
.
id
}{
DPCode
.
SWITCH_LED
}
"
)
# Old switches has different formats for the unique ID, but is mappable.
#
# If the device is a previously supported switch category and still has
# the old format for the unique ID, migrate it to the new format.
#
# `tuya.{device_id}` -> `tuya.{device_id}{SWITCH}`
# `tuya.{device_id}_1` -> `tuya.{device_id}{SWITCH_1}`
# ...
# `tuya.{device_id}_6` -> `tuya.{device_id}{SWITCH_6}`
# `tuya.{device_id}_usb1` -> `tuya.{device_id}{SWITCH_USB1}`
# ...
# `tuya.{device_id}_usb6` -> `tuya.{device_id}{SWITCH_USB6}`
#
# In all other cases, the unique ID is not changed.
if
device
.
category
in
(
"
bh
"
,
"
cwysj
"
,
"
cz
"
,
"
dlq
"
,
"
kg
"
,
"
kj
"
,
"
pc
"
,
"
xxj
"
):
for
postfix
,
dpcode
in
(
(
""
,
DPCode
.
SWITCH
),
(
"
_1
"
,
DPCode
.
SWITCH_1
),
(
"
_2
"
,
DPCode
.
SWITCH_2
),
(
"
_3
"
,
DPCode
.
SWITCH_3
),
(
"
_4
"
,
DPCode
.
SWITCH_4
),
(
"
_5
"
,
DPCode
.
SWITCH_5
),
(
"
_6
"
,
DPCode
.
SWITCH_6
),
(
"
_usb1
"
,
DPCode
.
SWITCH_USB1
),
(
"
_usb2
"
,
DPCode
.
SWITCH_USB2
),
(
"
_usb3
"
,
DPCode
.
SWITCH_USB3
),
(
"
_usb4
"
,
DPCode
.
SWITCH_USB4
),
(
"
_usb5
"
,
DPCode
.
SWITCH_USB5
),
(
"
_usb6
"
,
DPCode
.
SWITCH_USB6
),
):
if
(
entry
:
=
switch_entries
.
get
(
f
"
tuya.
{
device
.
id
}{
postfix
}
"
)
)
and
f
"
tuya.
{
device
.
id
}{
dpcode
}
"
not
in
switch_entries
:
entity_registry
.
async_update_entity
(
entry
.
entity_id
,
new_unique_id
=
f
"
tuya.
{
device
.
id
}{
dpcode
}
"
)
async
def
async_unload_entry
(
hass
:
HomeAssistant
,
entry
:
ConfigEntry
)
->
bool
:
"""
Unloading the Tuya platforms.
"""
unload
=
await
hass
.
config_entries
.
async_unload_platforms
(
entry
,
PLATFORMS
)
...
...
This diff is collapsed.
Click to expand it.
Preview
0%
Loading
Try again
or
attach a new file
.
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Save comment
Cancel
Please
register
or
sign in
to comment