Add unique id option for mqtt_room
sensors (#82521)
Add unique_id setting for mqtt_room
This commit is contained in:
parent
157222126e
commit
9c1e8486c5
2 changed files with 56 additions and 6 deletions
|
@ -16,6 +16,7 @@ from homeassistant.const import (
|
||||||
CONF_DEVICE_ID,
|
CONF_DEVICE_ID,
|
||||||
CONF_NAME,
|
CONF_NAME,
|
||||||
CONF_TIMEOUT,
|
CONF_TIMEOUT,
|
||||||
|
CONF_UNIQUE_ID,
|
||||||
STATE_NOT_HOME,
|
STATE_NOT_HOME,
|
||||||
)
|
)
|
||||||
from homeassistant.core import HomeAssistant, callback
|
from homeassistant.core import HomeAssistant, callback
|
||||||
|
@ -42,6 +43,7 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||||
vol.Required(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int,
|
vol.Required(CONF_TIMEOUT, default=DEFAULT_TIMEOUT): cv.positive_int,
|
||||||
vol.Optional(CONF_AWAY_TIMEOUT, default=DEFAULT_AWAY_TIMEOUT): cv.positive_int,
|
vol.Optional(CONF_AWAY_TIMEOUT, default=DEFAULT_AWAY_TIMEOUT): cv.positive_int,
|
||||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||||
|
vol.Optional(CONF_UNIQUE_ID): cv.string,
|
||||||
}
|
}
|
||||||
).extend(mqtt.config.MQTT_RO_SCHEMA.schema)
|
).extend(mqtt.config.MQTT_RO_SCHEMA.schema)
|
||||||
|
|
||||||
|
@ -70,10 +72,11 @@ async def async_setup_platform(
|
||||||
[
|
[
|
||||||
MQTTRoomSensor(
|
MQTTRoomSensor(
|
||||||
config.get(CONF_NAME),
|
config.get(CONF_NAME),
|
||||||
config.get(CONF_STATE_TOPIC),
|
config[CONF_STATE_TOPIC],
|
||||||
config.get(CONF_DEVICE_ID),
|
config[CONF_DEVICE_ID],
|
||||||
config.get(CONF_TIMEOUT),
|
config[CONF_TIMEOUT],
|
||||||
config.get(CONF_AWAY_TIMEOUT),
|
config[CONF_AWAY_TIMEOUT],
|
||||||
|
config.get(CONF_UNIQUE_ID),
|
||||||
)
|
)
|
||||||
]
|
]
|
||||||
)
|
)
|
||||||
|
@ -82,8 +85,18 @@ async def async_setup_platform(
|
||||||
class MQTTRoomSensor(SensorEntity):
|
class MQTTRoomSensor(SensorEntity):
|
||||||
"""Representation of a room sensor that is updated via MQTT."""
|
"""Representation of a room sensor that is updated via MQTT."""
|
||||||
|
|
||||||
def __init__(self, name, state_topic, device_id, timeout, consider_home):
|
def __init__(
|
||||||
|
self,
|
||||||
|
name: str | None,
|
||||||
|
state_topic: str,
|
||||||
|
device_id: str,
|
||||||
|
timeout: int,
|
||||||
|
consider_home: int,
|
||||||
|
unique_id: str | None,
|
||||||
|
) -> None:
|
||||||
"""Initialize the sensor."""
|
"""Initialize the sensor."""
|
||||||
|
self._attr_unique_id = unique_id
|
||||||
|
|
||||||
self._state = STATE_NOT_HOME
|
self._state = STATE_NOT_HOME
|
||||||
self._name = name
|
self._name = name
|
||||||
self._state_topic = f"{state_topic}/+"
|
self._state_topic = f"{state_topic}/+"
|
||||||
|
|
|
@ -5,7 +5,15 @@ from unittest.mock import patch
|
||||||
|
|
||||||
from homeassistant.components.mqtt import CONF_QOS, CONF_STATE_TOPIC, DEFAULT_QOS
|
from homeassistant.components.mqtt import CONF_QOS, CONF_STATE_TOPIC, DEFAULT_QOS
|
||||||
import homeassistant.components.sensor as sensor
|
import homeassistant.components.sensor as sensor
|
||||||
from homeassistant.const import CONF_DEVICE_ID, CONF_NAME, CONF_PLATFORM, CONF_TIMEOUT
|
from homeassistant.const import (
|
||||||
|
CONF_DEVICE_ID,
|
||||||
|
CONF_NAME,
|
||||||
|
CONF_PLATFORM,
|
||||||
|
CONF_TIMEOUT,
|
||||||
|
CONF_UNIQUE_ID,
|
||||||
|
)
|
||||||
|
from homeassistant.core import HomeAssistant
|
||||||
|
from homeassistant.helpers import entity_registry as er
|
||||||
from homeassistant.setup import async_setup_component
|
from homeassistant.setup import async_setup_component
|
||||||
from homeassistant.util import dt
|
from homeassistant.util import dt
|
||||||
|
|
||||||
|
@ -82,3 +90,32 @@ async def test_room_update(hass, mqtt_mock_entry_with_yaml_config):
|
||||||
await send_message(hass, BEDROOM_TOPIC, FAR_MESSAGE)
|
await send_message(hass, BEDROOM_TOPIC, FAR_MESSAGE)
|
||||||
await assert_state(hass, BEDROOM)
|
await assert_state(hass, BEDROOM)
|
||||||
await assert_distance(hass, 10)
|
await assert_distance(hass, 10)
|
||||||
|
|
||||||
|
|
||||||
|
async def test_unique_id_is_set(
|
||||||
|
hass: HomeAssistant, mqtt_mock_entry_with_yaml_config
|
||||||
|
) -> None:
|
||||||
|
"""Test the updating between rooms."""
|
||||||
|
unique_name = "my_unique_name_0123456789"
|
||||||
|
assert await async_setup_component(
|
||||||
|
hass,
|
||||||
|
sensor.DOMAIN,
|
||||||
|
{
|
||||||
|
sensor.DOMAIN: {
|
||||||
|
CONF_PLATFORM: "mqtt_room",
|
||||||
|
CONF_NAME: NAME,
|
||||||
|
CONF_DEVICE_ID: DEVICE_ID,
|
||||||
|
CONF_STATE_TOPIC: "room_presence",
|
||||||
|
CONF_QOS: DEFAULT_QOS,
|
||||||
|
CONF_TIMEOUT: 5,
|
||||||
|
CONF_UNIQUE_ID: unique_name,
|
||||||
|
}
|
||||||
|
},
|
||||||
|
)
|
||||||
|
await hass.async_block_till_done()
|
||||||
|
state = hass.states.get(SENSOR_STATE)
|
||||||
|
assert state.state is not None
|
||||||
|
|
||||||
|
entity_registry = er.async_get(hass)
|
||||||
|
entry = entity_registry.async_get(SENSOR_STATE)
|
||||||
|
assert entry.unique_id == unique_name
|
||||||
|
|
Loading…
Add table
Reference in a new issue