Fix Totalconnect BinarySensorDeviceClass logic (#94772)

* handle temperature

* test for temperature

* test for unknown
pull/95119/head
Austin Mroczek 2023-06-20 13:12:11 -07:00 committed by Franck Nijhof
parent 254b1fd314
commit f33d671a5d
No known key found for this signature in database
GPG Key ID: D62583BA8AB11CA3
3 changed files with 32 additions and 11 deletions

View File

@ -81,15 +81,9 @@ class TotalConnectZoneSecurityBinarySensor(TotalConnectZoneBinarySensor):
return BinarySensorDeviceClass.MOTION
if self._zone.is_type_medical():
return BinarySensorDeviceClass.SAFETY
# "security" type is a generic category so test for it last
if self._zone.is_type_security():
return BinarySensorDeviceClass.DOOR
_LOGGER.error(
"TotalConnect zone %s reported an unexpected device class",
self._zone.zoneid,
)
return None
if self._zone.is_type_temperature():
return BinarySensorDeviceClass.PROBLEM
return BinarySensorDeviceClass.DOOR
def update(self):
"""Return the state of the device."""

View File

@ -189,14 +189,23 @@ ZONE_5 = {
# 99 is an unknown ZoneType
ZONE_6 = {
"ZoneID": "6",
"ZoneDescription": "Medical",
"ZoneDescription": "Unknown",
"ZoneStatus": ZoneStatus.NORMAL,
"ZoneTypeId": 99,
"PartitionId": "1",
"CanBeBypassed": 0,
}
ZONE_INFO = [ZONE_NORMAL, ZONE_2, ZONE_3, ZONE_4, ZONE_5, ZONE_6]
ZONE_7 = {
"ZoneID": 7,
"ZoneDescription": "Temperature",
"ZoneStatus": ZoneStatus.NORMAL,
"ZoneTypeId": ZoneType.MONITOR,
"PartitionId": "1",
"CanBeBypassed": 0,
}
ZONE_INFO = [ZONE_NORMAL, ZONE_2, ZONE_3, ZONE_4, ZONE_5, ZONE_6, ZONE_7]
ZONES = {"ZoneInfo": ZONE_INFO}
METADATA_DISARMED = {

View File

@ -84,3 +84,21 @@ async def test_state_and_attributes(hass: HomeAssistant) -> None:
assert state.state == STATE_OFF
state = hass.states.get("binary_sensor.gas_tamper")
assert state.state == STATE_ON
# Zone 6 is unknown type, assume it is a security (door) sensor
state = hass.states.get("binary_sensor.unknown")
assert state.state == STATE_OFF
assert state.attributes.get("device_class") == BinarySensorDeviceClass.DOOR
state = hass.states.get("binary_sensor.unknown_low_battery")
assert state.state == STATE_OFF
state = hass.states.get("binary_sensor.unknown_tamper")
assert state.state == STATE_OFF
# Zone 7 is temperature
state = hass.states.get("binary_sensor.temperature")
assert state.state == STATE_OFF
assert state.attributes.get("device_class") == BinarySensorDeviceClass.PROBLEM
state = hass.states.get("binary_sensor.temperature_low_battery")
assert state.state == STATE_OFF
state = hass.states.get("binary_sensor.temperature_tamper")
assert state.state == STATE_OFF