mirror of
https://github.com/home-assistant/core.git
synced 2025-07-24 21:57:51 +00:00
Add battery sensor to xiaomi_aqara (#38004)
This commit is contained in:
parent
06ddb2c95e
commit
695585b68c
@ -13,3 +13,43 @@ CONF_KEY = "key"
|
|||||||
CONF_SID = "sid"
|
CONF_SID = "sid"
|
||||||
|
|
||||||
DEFAULT_DISCOVERY_RETRY = 5
|
DEFAULT_DISCOVERY_RETRY = 5
|
||||||
|
|
||||||
|
BATTERY_MODELS = [
|
||||||
|
"sensor_ht",
|
||||||
|
"weather",
|
||||||
|
"weather.v1",
|
||||||
|
"sensor_motion.aq2",
|
||||||
|
"vibration",
|
||||||
|
"magnet",
|
||||||
|
"sensor_magnet",
|
||||||
|
"sensor_magnet.aq2",
|
||||||
|
"motion",
|
||||||
|
"sensor_motion",
|
||||||
|
"sensor_motion.aq2",
|
||||||
|
"switch",
|
||||||
|
"sensor_switch",
|
||||||
|
"sensor_switch.aq2",
|
||||||
|
"sensor_switch.aq3",
|
||||||
|
"remote.b1acn01",
|
||||||
|
"86sw1",
|
||||||
|
"sensor_86sw1",
|
||||||
|
"sensor_86sw1.aq1",
|
||||||
|
"remote.b186acn01",
|
||||||
|
"86sw2",
|
||||||
|
"sensor_86sw2",
|
||||||
|
"sensor_86sw2.aq1",
|
||||||
|
"remote.b286acn01",
|
||||||
|
"cube",
|
||||||
|
"sensor_cube",
|
||||||
|
"sensor_cube.aqgl01",
|
||||||
|
"smoke",
|
||||||
|
"sensor_smoke",
|
||||||
|
"sensor_wleak.aq1",
|
||||||
|
"vibration",
|
||||||
|
"vibration.aq1",
|
||||||
|
"curtain",
|
||||||
|
"curtain.aq2",
|
||||||
|
"curtain.hagl04",
|
||||||
|
"lock.aq1",
|
||||||
|
"lock.acn02",
|
||||||
|
]
|
||||||
|
@ -2,6 +2,8 @@
|
|||||||
import logging
|
import logging
|
||||||
|
|
||||||
from homeassistant.const import (
|
from homeassistant.const import (
|
||||||
|
ATTR_BATTERY_LEVEL,
|
||||||
|
DEVICE_CLASS_BATTERY,
|
||||||
DEVICE_CLASS_HUMIDITY,
|
DEVICE_CLASS_HUMIDITY,
|
||||||
DEVICE_CLASS_ILLUMINANCE,
|
DEVICE_CLASS_ILLUMINANCE,
|
||||||
DEVICE_CLASS_PRESSURE,
|
DEVICE_CLASS_PRESSURE,
|
||||||
@ -11,7 +13,7 @@ from homeassistant.const import (
|
|||||||
)
|
)
|
||||||
|
|
||||||
from . import XiaomiDevice
|
from . import XiaomiDevice
|
||||||
from .const import DOMAIN, GATEWAYS_KEY
|
from .const import BATTERY_MODELS, DOMAIN, GATEWAYS_KEY
|
||||||
|
|
||||||
_LOGGER = logging.getLogger(__name__)
|
_LOGGER = logging.getLogger(__name__)
|
||||||
|
|
||||||
@ -79,6 +81,15 @@ async def async_setup_entry(hass, config_entry, async_add_entities):
|
|||||||
)
|
)
|
||||||
else:
|
else:
|
||||||
_LOGGER.warning("Unmapped Device Model")
|
_LOGGER.warning("Unmapped Device Model")
|
||||||
|
|
||||||
|
# Set up battery sensors
|
||||||
|
for devices in gateway.devices.values():
|
||||||
|
for device in devices:
|
||||||
|
if device["model"] in BATTERY_MODELS:
|
||||||
|
entities.append(
|
||||||
|
XiaomiBatterySensor(device, "Battery", gateway, config_entry)
|
||||||
|
)
|
||||||
|
|
||||||
async_add_entities(entities)
|
async_add_entities(entities)
|
||||||
|
|
||||||
|
|
||||||
@ -144,3 +155,37 @@ class XiaomiSensor(XiaomiDevice):
|
|||||||
else:
|
else:
|
||||||
self._state = round(value, 1)
|
self._state = round(value, 1)
|
||||||
return True
|
return True
|
||||||
|
|
||||||
|
|
||||||
|
class XiaomiBatterySensor(XiaomiDevice):
|
||||||
|
"""Representation of a XiaomiSensor."""
|
||||||
|
|
||||||
|
@property
|
||||||
|
def unit_of_measurement(self):
|
||||||
|
"""Return the unit of measurement of this entity, if any."""
|
||||||
|
return UNIT_PERCENTAGE
|
||||||
|
|
||||||
|
@property
|
||||||
|
def device_class(self):
|
||||||
|
"""Return the device class of this entity."""
|
||||||
|
return DEVICE_CLASS_BATTERY
|
||||||
|
|
||||||
|
@property
|
||||||
|
def state(self):
|
||||||
|
"""Return the state of the sensor."""
|
||||||
|
return self._state
|
||||||
|
|
||||||
|
def parse_data(self, data, raw_data):
|
||||||
|
"""Parse data sent by gateway."""
|
||||||
|
succeed = super().parse_voltage(data)
|
||||||
|
if not succeed:
|
||||||
|
return False
|
||||||
|
battery_level = int(self._device_state_attributes.pop(ATTR_BATTERY_LEVEL))
|
||||||
|
if battery_level <= 0 or battery_level > 100:
|
||||||
|
return False
|
||||||
|
self._state = battery_level
|
||||||
|
return True
|
||||||
|
|
||||||
|
def parse_voltage(self, data):
|
||||||
|
"""Parse battery level data sent by gateway."""
|
||||||
|
return False # Override parse_voltage to do nothing
|
||||||
|
Loading…
x
Reference in New Issue
Block a user