Improve performance of mqtt_room (#100408)

This commit is contained in:
J. Nick Koston 2023-09-14 17:55:56 -05:00 committed by GitHub
parent 042776ebb8
commit 6a9c9ca735
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23

View file

@ -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}