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_NAME,
|
||||
CONF_TIMEOUT,
|
||||
CONF_UNIQUE_ID,
|
||||
STATE_NOT_HOME,
|
||||
)
|
||||
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.Optional(CONF_AWAY_TIMEOUT, default=DEFAULT_AWAY_TIMEOUT): cv.positive_int,
|
||||
vol.Optional(CONF_NAME, default=DEFAULT_NAME): cv.string,
|
||||
vol.Optional(CONF_UNIQUE_ID): cv.string,
|
||||
}
|
||||
).extend(mqtt.config.MQTT_RO_SCHEMA.schema)
|
||||
|
||||
|
@ -70,10 +72,11 @@ async def async_setup_platform(
|
|||
[
|
||||
MQTTRoomSensor(
|
||||
config.get(CONF_NAME),
|
||||
config.get(CONF_STATE_TOPIC),
|
||||
config.get(CONF_DEVICE_ID),
|
||||
config.get(CONF_TIMEOUT),
|
||||
config.get(CONF_AWAY_TIMEOUT),
|
||||
config[CONF_STATE_TOPIC],
|
||||
config[CONF_DEVICE_ID],
|
||||
config[CONF_TIMEOUT],
|
||||
config[CONF_AWAY_TIMEOUT],
|
||||
config.get(CONF_UNIQUE_ID),
|
||||
)
|
||||
]
|
||||
)
|
||||
|
@ -82,8 +85,18 @@ async def async_setup_platform(
|
|||
class MQTTRoomSensor(SensorEntity):
|
||||
"""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."""
|
||||
self._attr_unique_id = unique_id
|
||||
|
||||
self._state = STATE_NOT_HOME
|
||||
self._name = name
|
||||
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
|
||||
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.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 assert_state(hass, BEDROOM)
|
||||
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