Ensure groups always have unique entity id
This commit is contained in:
parent
d4cad0b267
commit
f1209a42a9
2 changed files with 18 additions and 7 deletions
|
@ -8,8 +8,8 @@ Provides functionality to group devices that can be turned on or off.
|
||||||
import homeassistant as ha
|
import homeassistant as ha
|
||||||
import homeassistant.util as util
|
import homeassistant.util as util
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
ATTR_ENTITY_ID, STATE_ON, STATE_OFF, STATE_HOME, STATE_NOT_HOME,
|
ATTR_ENTITY_ID, ATTR_FRIENDLY_NAME, STATE_ON, STATE_OFF,
|
||||||
STATE_UNKNOWN)
|
STATE_HOME, STATE_NOT_HOME, STATE_UNKNOWN)
|
||||||
|
|
||||||
DOMAIN = "group"
|
DOMAIN = "group"
|
||||||
DEPENDENCIES = []
|
DEPENDENCIES = []
|
||||||
|
@ -91,9 +91,7 @@ def get_entity_ids(hass, entity_id, domain_filter=None):
|
||||||
def setup(hass, config):
|
def setup(hass, config):
|
||||||
""" Sets up all groups found definded in the configuration. """
|
""" Sets up all groups found definded in the configuration. """
|
||||||
for name, entity_ids in config.get(DOMAIN, {}).items():
|
for name, entity_ids in config.get(DOMAIN, {}).items():
|
||||||
entity_ids = entity_ids.split(",")
|
setup_group(hass, name, entity_ids.split(","))
|
||||||
|
|
||||||
setup_group(hass, name, entity_ids)
|
|
||||||
|
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
@ -104,13 +102,18 @@ class Group(object):
|
||||||
self.hass = hass
|
self.hass = hass
|
||||||
self.name = name
|
self.name = name
|
||||||
self.user_defined = user_defined
|
self.user_defined = user_defined
|
||||||
self.entity_id = ENTITY_ID_FORMAT.format(util.slugify(name))
|
|
||||||
|
self.entity_id = util.ensure_unique_string(
|
||||||
|
ENTITY_ID_FORMAT.format(util.slugify(name)),
|
||||||
|
hass.states.entity_ids(DOMAIN))
|
||||||
|
|
||||||
self.tracking = []
|
self.tracking = []
|
||||||
self.group_on, self.group_off = None, None
|
self.group_on, self.group_off = None, None
|
||||||
|
|
||||||
if entity_ids is not None:
|
if entity_ids is not None:
|
||||||
self.update_tracked_entity_ids(entity_ids)
|
self.update_tracked_entity_ids(entity_ids)
|
||||||
|
else:
|
||||||
|
self.force_update()
|
||||||
|
|
||||||
@property
|
@property
|
||||||
def state(self):
|
def state(self):
|
||||||
|
@ -122,7 +125,8 @@ class Group(object):
|
||||||
""" State attributes of this group. """
|
""" State attributes of this group. """
|
||||||
return {
|
return {
|
||||||
ATTR_ENTITY_ID: self.tracking,
|
ATTR_ENTITY_ID: self.tracking,
|
||||||
ATTR_AUTO: not self.user_defined
|
ATTR_AUTO: not self.user_defined,
|
||||||
|
ATTR_FRIENDLY_NAME: self.name
|
||||||
}
|
}
|
||||||
|
|
||||||
def update_tracked_entity_ids(self, entity_ids):
|
def update_tracked_entity_ids(self, entity_ids):
|
||||||
|
|
|
@ -162,3 +162,10 @@ class TestComponentsGroup(unittest.TestCase):
|
||||||
|
|
||||||
self.assertEqual(STATE_ON, group_state.state)
|
self.assertEqual(STATE_ON, group_state.state)
|
||||||
self.assertFalse(group_state.attributes[group.ATTR_AUTO])
|
self.assertFalse(group_state.attributes[group.ATTR_AUTO])
|
||||||
|
|
||||||
|
def test_groups_get_unique_names(self):
|
||||||
|
""" Two groups with same name should both have a unique entity id. """
|
||||||
|
grp1 = group.Group(self.hass, 'Je suis Charlie')
|
||||||
|
grp2 = group.Group(self.hass, 'Je suis Charlie')
|
||||||
|
|
||||||
|
self.assertNotEqual(grp1.entity_id, grp2.entity_id)
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue