Skip to content
Snippets Groups Projects
Commit 20ed231f authored by jkerdreu's avatar jkerdreu
Browse files

- Cleaning up some code around identifiers

- Added domain check on rename

git-svn-id: https://redmine.imt-atlantique.fr/svn/xaal/code/Python/branches/0.7@3037 b32b6428-25c9-4566-ad07-03861ab6144f
parent 8204e5ab
No related branches found
No related tags found
No related merge requests found
......@@ -7,6 +7,7 @@ from homeassistant.helpers.device_registry import DeviceEntry
from xaal.lib import tools
from .bridge import Bridge
from .const import DOMAIN, CONF_DB_SERVER
from . import utils
_LOGGER = logging.getLogger(__name__)
......@@ -43,8 +44,7 @@ async def async_unload_entry(hass: HomeAssistant, entry: ConfigEntry) -> bool:
async def async_remove_config_entry_device(hass: HomeAssistant, entry: ConfigEntry, device_entry: DeviceEntry) -> bool:
"""Remove a config entry from a device."""
bridge = hass.data[DOMAIN][entry.entry_id]
# TODO: add a method to extract ident_id
ident_id = list(device_entry.identifiers)[0][1]
bridge.ha_remove_device(ident_id)
(domain, dev_ident) = utils.extract_device_identifiers(device_entry.identifiers)
bridge.ha_remove_device(dev_ident)
return True
......@@ -4,6 +4,7 @@ import functools
from typing import Dict, List, Any
from .const import DOMAIN
from . import utils
from homeassistant.core import HomeAssistant, Event
from homeassistant.helpers.entity import Entity, DeviceInfo
......@@ -11,6 +12,7 @@ from homeassistant.helpers.entity_platform import AddEntitiesCallback
from homeassistant.config_entries import ConfigEntry
from homeassistant.helpers import device_registry
from homeassistant.helpers.device_registry import DeviceEntry, EVENT_DEVICE_REGISTRY_UPDATED
from homeassistant.helpers import entity_registry
from homeassistant.helpers.entity_registry import EVENT_ENTITY_REGISTRY_UPDATED
from xaal.lib import AsyncEngine, tools, Device, Message, bindings
......@@ -359,16 +361,16 @@ class Bridge(object):
"""store the new device name in DB if changed"""
if event.data.get('action') != 'update':
return
_LOGGER.info(event.data)
# is it a xAAL device
device_id = event.data.get('device_id')
dr = device_registry.async_get(self.hass)
device_entry = dr.async_get(device_id)
idents = list(device_entry.identifiers)
print(idents)
if idents[0][0] != DOMAIN:
(domain, dev_ident) = utils.extract_device_identifiers(device_entry.identifiers)
if domain != DOMAIN:
return
addrs = self.ident_to_address(idents[0][1])
_LOGGER.info(event.data)
addrs = self.ident_to_address(dev_ident)
kv = {'ha_dev_name': device_entry.name_by_user}
for addr in addrs:
body = {'device': addr, 'map': kv}
......@@ -378,12 +380,17 @@ class Bridge(object):
"""store the new entity name in DB if changed"""
if event.data.get('action') != 'update':
return
_LOGGER.info(event.data)
# ugly bugfix HASS sync issue, we need to wait registry to be up to date.
await asyncio.sleep(0.1)
# is it xAAL entity ?
entity_id = event.data.get('entity_id')
entity = self.get_entity_by_id(entity_id)
er = entity_registry.async_get(self.hass)
entity_entry = er.async_get(entity_id)
if entity_entry.platform != DOMAIN:
return
_LOGGER.info(event.data)
entity = self.get_entity_by_id(entity_id)
if entity:
name = entity.registry_entry.name
if (name is None) and (entity._dev.db.get('ha_name') is None):
......
from typing import Tuple
def str_to_id(value: str):
def str_to_id(value: str) -> str:
return value.translate ({ord(c): "_" for c in "!@#$%^&*()[]{};:,./<>?\|`~-=_+ "})
def extract_device_identifiers(identifiers: str) -> Tuple(str, str):
ident_data = list(identifiers)
domain = ident_data[0][0]
dev_ident = ident_data[0][1]
return (domain, dev_ident)
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Please register or to comment