mirror of
https://github.com/home-assistant/core.git
synced 2025-07-26 22:57:17 +00:00
Implemented unique ID support for Fibaro hub integration (#19055)
* Unique ID support New unique ID support, based on hub's serial number and device's permanent ID * Fixes, showing attributes Minor fixes Showing room, hub, fibaro_id for easier mapping and finding of devices * Update fibaro.py
This commit is contained in:
parent
47320adcc6
commit
f0d534cebc
@ -7,6 +7,7 @@ https://home-assistant.io/components/fibaro/
|
|||||||
|
|
||||||
import logging
|
import logging
|
||||||
from collections import defaultdict
|
from collections import defaultdict
|
||||||
|
from typing import Optional
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
from homeassistant.const import (ATTR_ARMED, ATTR_BATTERY_LEVEL,
|
from homeassistant.const import (ATTR_ARMED, ATTR_BATTERY_LEVEL,
|
||||||
@ -74,11 +75,14 @@ class FibaroController():
|
|||||||
from fiblary3.client.v4.client import Client as FibaroClient
|
from fiblary3.client.v4.client import Client as FibaroClient
|
||||||
self._client = FibaroClient(url, username, password)
|
self._client = FibaroClient(url, username, password)
|
||||||
self._scene_map = None
|
self._scene_map = None
|
||||||
|
self.hub_serial = None # Unique serial number of the hub
|
||||||
|
|
||||||
def connect(self):
|
def connect(self):
|
||||||
"""Start the communication with the Fibaro controller."""
|
"""Start the communication with the Fibaro controller."""
|
||||||
try:
|
try:
|
||||||
login = self._client.login.get()
|
login = self._client.login.get()
|
||||||
|
info = self._client.info.get()
|
||||||
|
self.hub_serial = slugify(info.serialNumber)
|
||||||
except AssertionError:
|
except AssertionError:
|
||||||
_LOGGER.error("Can't connect to Fibaro HC. "
|
_LOGGER.error("Can't connect to Fibaro HC. "
|
||||||
"Please check URL.")
|
"Please check URL.")
|
||||||
@ -180,9 +184,12 @@ class FibaroController():
|
|||||||
room_name = 'Unknown'
|
room_name = 'Unknown'
|
||||||
else:
|
else:
|
||||||
room_name = self._room_map[device.roomID].name
|
room_name = self._room_map[device.roomID].name
|
||||||
|
device.room_name = room_name
|
||||||
device.friendly_name = '{} {}'.format(room_name, device.name)
|
device.friendly_name = '{} {}'.format(room_name, device.name)
|
||||||
device.ha_id = '{}_{}_{}'.format(
|
device.ha_id = '{}_{}_{}'.format(
|
||||||
slugify(room_name), slugify(device.name), device.id)
|
slugify(room_name), slugify(device.name), device.id)
|
||||||
|
device.unique_id_str = "{}.{}".format(
|
||||||
|
self.hub_serial, device.id)
|
||||||
self._scene_map[device.id] = device
|
self._scene_map[device.id] = device
|
||||||
self.fibaro_devices['scene'].append(device)
|
self.fibaro_devices['scene'].append(device)
|
||||||
|
|
||||||
@ -197,6 +204,7 @@ class FibaroController():
|
|||||||
room_name = 'Unknown'
|
room_name = 'Unknown'
|
||||||
else:
|
else:
|
||||||
room_name = self._room_map[device.roomID].name
|
room_name = self._room_map[device.roomID].name
|
||||||
|
device.room_name = room_name
|
||||||
device.friendly_name = room_name + ' ' + device.name
|
device.friendly_name = room_name + ' ' + device.name
|
||||||
device.ha_id = '{}_{}_{}'.format(
|
device.ha_id = '{}_{}_{}'.format(
|
||||||
slugify(room_name), slugify(device.name), device.id)
|
slugify(room_name), slugify(device.name), device.id)
|
||||||
@ -207,6 +215,8 @@ class FibaroController():
|
|||||||
else:
|
else:
|
||||||
device.mapped_type = None
|
device.mapped_type = None
|
||||||
if device.mapped_type:
|
if device.mapped_type:
|
||||||
|
device.unique_id_str = "{}.{}".format(
|
||||||
|
self.hub_serial, device.id)
|
||||||
self._device_map[device.id] = device
|
self._device_map[device.id] = device
|
||||||
self.fibaro_devices[device.mapped_type].append(device)
|
self.fibaro_devices[device.mapped_type].append(device)
|
||||||
else:
|
else:
|
||||||
@ -347,7 +357,12 @@ class FibaroDevice(Entity):
|
|||||||
return False
|
return False
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def name(self):
|
def unique_id(self) -> str:
|
||||||
|
"""Return a unique ID."""
|
||||||
|
return self.fibaro_device.unique_id_str
|
||||||
|
|
||||||
|
@property
|
||||||
|
def name(self) -> Optional[str]:
|
||||||
"""Return the name of the device."""
|
"""Return the name of the device."""
|
||||||
return self._name
|
return self._name
|
||||||
|
|
||||||
@ -380,5 +395,5 @@ class FibaroDevice(Entity):
|
|||||||
except (ValueError, KeyError):
|
except (ValueError, KeyError):
|
||||||
pass
|
pass
|
||||||
|
|
||||||
attr['id'] = self.ha_id
|
attr['fibaro_id'] = self.fibaro_device.id
|
||||||
return attr
|
return attr
|
||||||
|
Loading…
x
Reference in New Issue
Block a user