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 datetime import timedelta
|
||||
import json
|
||||
from functools import lru_cache
|
||||
import logging
|
||||
from typing import Any
|
||||
|
||||
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.typing import ConfigType, DiscoveryInfoType
|
||||
from homeassistant.util import dt as dt_util, slugify
|
||||
from homeassistant.util.json import json_loads
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
@ -47,9 +49,16 @@ PLATFORM_SCHEMA = PLATFORM_SCHEMA.extend(
|
|||
}
|
||||
).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(
|
||||
vol.All(
|
||||
json.loads,
|
||||
json_loads,
|
||||
vol.Schema(
|
||||
{
|
||||
vol.Required(ATTR_ID): cv.string,
|
||||
|
@ -106,7 +115,7 @@ class MQTTRoomSensor(SensorEntity):
|
|||
self._state = STATE_NOT_HOME
|
||||
self._name = name
|
||||
self._state_topic = f"{state_topic}/+"
|
||||
self._device_id = slugify(device_id).upper()
|
||||
self._device_id = _slugify_upper(device_id)
|
||||
self._timeout = timeout
|
||||
self._consider_home = (
|
||||
timedelta(seconds=consider_home) if consider_home else None
|
||||
|
@ -179,11 +188,10 @@ class MQTTRoomSensor(SensorEntity):
|
|||
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."""
|
||||
parts = topic.split("/")
|
||||
room = parts[-1]
|
||||
device_id = slugify(data.get(ATTR_ID)).upper()
|
||||
device_id = _slugify_upper(data.get(ATTR_ID))
|
||||
distance = data.get("distance")
|
||||
parsed_data = {ATTR_DEVICE_ID: device_id, ATTR_ROOM: room, ATTR_DISTANCE: distance}
|
||||
return parsed_data
|
||||
return {ATTR_DEVICE_ID: device_id, ATTR_ROOM: room, ATTR_DISTANCE: distance}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue