Improve performance of mqtt_room (#100408)
This commit is contained in:
parent
042776ebb8
commit
6a9c9ca735
1 changed files with 15 additions and 7 deletions
|
@ -2,8 +2,9 @@
|
||||||
from __future__ import annotations
|
from __future__ import annotations
|
||||||
|
|
||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
import json
|
from functools import lru_cache
|
||||||
import logging
|
import logging
|
||||||
|
from typing import Any
|
||||||
|
|
||||||
import voluptuous as vol
|
import voluptuous as vol
|
||||||
|
|
||||||
|
@ -24,6 +25,7 @@ import homeassistant.helpers.config_validation as cv
|
||||||
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
from homeassistant.helpers.entity_platform import AddEntitiesCallback
|
||||||
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
from homeassistant.helpers.typing import ConfigType, DiscoveryInfoType
|
||||||
from homeassistant.util import dt as dt_util, slugify
|
from homeassistant.util import dt as dt_util, slugify
|
||||||
|
from homeassistant.util.json import json_loads
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
|
@ -47,9 +49,16 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
||||||
}
|
}
|
||||||
).extend(mqtt.config.MQTT_RO_SCHEMA.schema)
|
).extend(mqtt.config.MQTT_RO_SCHEMA.schema)
|
||||||
|
|
||||||
|
|
||||||
|
@lru_cache(maxsize=256)
|
||||||
|
def _slugify_upper(string: str) -> str:
|
||||||
|
"""Return a slugified version of string, uppercased."""
|
||||||
|
return slugify(string).upper()
|
||||||
|
|
||||||
|
|
||||||
MQTT_PAYLOAD = vol.Schema(
|
MQTT_PAYLOAD = vol.Schema(
|
||||||
vol.All(
|
vol.All(
|
||||||
json.loads,
|
json_loads,
|
||||||
vol.Schema(
|
vol.Schema(
|
||||||
{
|
{
|
||||||
vol.Required(ATTR_ID): cv.string,
|
vol.Required(ATTR_ID): cv.string,
|
||||||
|
@ -106,7 +115,7 @@ class MQTTRoomSensor(SensorEntity):
|
||||||
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}/+"
|
||||||
self._device_id = slugify(device_id).upper()
|
self._device_id = _slugify_upper(device_id)
|
||||||
self._timeout = timeout
|
self._timeout = timeout
|
||||||
self._consider_home = (
|
self._consider_home = (
|
||||||
timedelta(seconds=consider_home) if consider_home else None
|
timedelta(seconds=consider_home) if consider_home else None
|
||||||
|
@ -179,11 +188,10 @@ class MQTTRoomSensor(SensorEntity):
|
||||||
self._state = STATE_NOT_HOME
|
self._state = STATE_NOT_HOME
|
||||||
|
|
||||||
|
|
||||||
def _parse_update_data(topic, data):
|
def _parse_update_data(topic: str, data: dict[str, Any]) -> dict[str, Any]:
|
||||||
"""Parse the room presence update."""
|
"""Parse the room presence update."""
|
||||||
parts = topic.split("/")
|
parts = topic.split("/")
|
||||||
room = parts[-1]
|
room = parts[-1]
|
||||||
device_id = slugify(data.get(ATTR_ID)).upper()
|
device_id = _slugify_upper(data.get(ATTR_ID))
|
||||||
distance = data.get("distance")
|
distance = data.get("distance")
|
||||||
parsed_data = {ATTR_DEVICE_ID: device_id, ATTR_ROOM: room, ATTR_DISTANCE: distance}
|
return {ATTR_DEVICE_ID: device_id, ATTR_ROOM: room, ATTR_DISTANCE: distance}
|
||||||
return parsed_data
|
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue