Add CO device class to binary_sensor entity model (#61962)

Co-authored-by: epenet <epenet@users.noreply.github.com>
This commit is contained in:
epenet 2021-12-28 21:33:21 +01:00 committed by GitHub
parent 43dc12b1c8
commit 4da7508e9d
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 26 additions and 2 deletions

View File

@ -37,6 +37,9 @@ class BinarySensorDeviceClass(StrEnum):
# On means charging, Off means not charging # On means charging, Off means not charging
BATTERY_CHARGING = "battery_charging" BATTERY_CHARGING = "battery_charging"
# On means carbon monoxide detected, Off means no carbon monoxide (clear)
CO = "carbon_monoxide"
# On means cold, Off means normal # On means cold, Off means normal
COLD = "cold" COLD = "cold"
@ -120,6 +123,7 @@ DEVICE_CLASSES_SCHEMA = vol.All(vol.Lower, vol.Coerce(BinarySensorDeviceClass))
DEVICE_CLASSES = [cls.value for cls in BinarySensorDeviceClass] DEVICE_CLASSES = [cls.value for cls in BinarySensorDeviceClass]
DEVICE_CLASS_BATTERY = BinarySensorDeviceClass.BATTERY.value DEVICE_CLASS_BATTERY = BinarySensorDeviceClass.BATTERY.value
DEVICE_CLASS_BATTERY_CHARGING = BinarySensorDeviceClass.BATTERY_CHARGING.value DEVICE_CLASS_BATTERY_CHARGING = BinarySensorDeviceClass.BATTERY_CHARGING.value
DEVICE_CLASS_CO = BinarySensorDeviceClass.CO.value
DEVICE_CLASS_COLD = BinarySensorDeviceClass.COLD.value DEVICE_CLASS_COLD = BinarySensorDeviceClass.COLD.value
DEVICE_CLASS_CONNECTIVITY = BinarySensorDeviceClass.CONNECTIVITY.value DEVICE_CLASS_CONNECTIVITY = BinarySensorDeviceClass.CONNECTIVITY.value
DEVICE_CLASS_DOOR = BinarySensorDeviceClass.DOOR.value DEVICE_CLASS_DOOR = BinarySensorDeviceClass.DOOR.value

View File

@ -17,6 +17,7 @@ from homeassistant.helpers.typing import ConfigType
from . import ( from . import (
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_BATTERY_CHARGING,
DEVICE_CLASS_CO,
DEVICE_CLASS_COLD, DEVICE_CLASS_COLD,
DEVICE_CLASS_CONNECTIVITY, DEVICE_CLASS_CONNECTIVITY,
DEVICE_CLASS_DOOR, DEVICE_CLASS_DOOR,
@ -53,6 +54,8 @@ CONF_IS_BAT_LOW = "is_bat_low"
CONF_IS_NOT_BAT_LOW = "is_not_bat_low" CONF_IS_NOT_BAT_LOW = "is_not_bat_low"
CONF_IS_CHARGING = "is_charging" CONF_IS_CHARGING = "is_charging"
CONF_IS_NOT_CHARGING = "is_not_charging" CONF_IS_NOT_CHARGING = "is_not_charging"
CONF_IS_CO = "is_co"
CONF_IS_NO_CO = "is_no_co"
CONF_IS_COLD = "is_cold" CONF_IS_COLD = "is_cold"
CONF_IS_NOT_COLD = "is_not_cold" CONF_IS_NOT_COLD = "is_not_cold"
CONF_IS_CONNECTED = "is_connected" CONF_IS_CONNECTED = "is_connected"
@ -101,6 +104,7 @@ CONF_IS_NOT_OPEN = "is_not_open"
IS_ON = [ IS_ON = [
CONF_IS_BAT_LOW, CONF_IS_BAT_LOW,
CONF_IS_CHARGING, CONF_IS_CHARGING,
CONF_IS_CO,
CONF_IS_COLD, CONF_IS_COLD,
CONF_IS_CONNECTED, CONF_IS_CONNECTED,
CONF_IS_GAS, CONF_IS_GAS,
@ -142,6 +146,7 @@ IS_OFF = [
CONF_IS_NOT_PRESENT, CONF_IS_NOT_PRESENT,
CONF_IS_NOT_TAMPERED, CONF_IS_NOT_TAMPERED,
CONF_IS_NOT_UNSAFE, CONF_IS_NOT_UNSAFE,
CONF_IS_NO_CO,
CONF_IS_NO_GAS, CONF_IS_NO_GAS,
CONF_IS_NO_LIGHT, CONF_IS_NO_LIGHT,
CONF_IS_NO_MOTION, CONF_IS_NO_MOTION,
@ -163,6 +168,7 @@ ENTITY_CONDITIONS = {
{CONF_TYPE: CONF_IS_CHARGING}, {CONF_TYPE: CONF_IS_CHARGING},
{CONF_TYPE: CONF_IS_NOT_CHARGING}, {CONF_TYPE: CONF_IS_NOT_CHARGING},
], ],
DEVICE_CLASS_CO: [{CONF_TYPE: CONF_IS_CO}, {CONF_TYPE: CONF_IS_NO_CO}],
DEVICE_CLASS_COLD: [{CONF_TYPE: CONF_IS_COLD}, {CONF_TYPE: CONF_IS_NOT_COLD}], DEVICE_CLASS_COLD: [{CONF_TYPE: CONF_IS_COLD}, {CONF_TYPE: CONF_IS_NOT_COLD}],
DEVICE_CLASS_CONNECTIVITY: [ DEVICE_CLASS_CONNECTIVITY: [
{CONF_TYPE: CONF_IS_CONNECTED}, {CONF_TYPE: CONF_IS_CONNECTED},

View File

@ -15,6 +15,7 @@ from homeassistant.helpers.entity_registry import async_entries_for_device
from . import ( from . import (
DEVICE_CLASS_BATTERY, DEVICE_CLASS_BATTERY,
DEVICE_CLASS_BATTERY_CHARGING, DEVICE_CLASS_BATTERY_CHARGING,
DEVICE_CLASS_CO,
DEVICE_CLASS_COLD, DEVICE_CLASS_COLD,
DEVICE_CLASS_CONNECTIVITY, DEVICE_CLASS_CONNECTIVITY,
DEVICE_CLASS_DOOR, DEVICE_CLASS_DOOR,
@ -51,6 +52,8 @@ CONF_BAT_LOW = "bat_low"
CONF_NOT_BAT_LOW = "not_bat_low" CONF_NOT_BAT_LOW = "not_bat_low"
CONF_CHARGING = "charging" CONF_CHARGING = "charging"
CONF_NOT_CHARGING = "not_charging" CONF_NOT_CHARGING = "not_charging"
CONF_CO = "co"
CONF_NO_CO = "no_co"
CONF_COLD = "cold" CONF_COLD = "cold"
CONF_NOT_COLD = "not_cold" CONF_NOT_COLD = "not_cold"
CONF_CONNECTED = "connected" CONF_CONNECTED = "connected"
@ -99,6 +102,7 @@ CONF_NOT_OPENED = "not_opened"
TURNED_ON = [ TURNED_ON = [
CONF_BAT_LOW, CONF_BAT_LOW,
CONF_CO,
CONF_COLD, CONF_COLD,
CONF_CONNECTED, CONF_CONNECTED,
CONF_GAS, CONF_GAS,
@ -139,6 +143,7 @@ TURNED_OFF = [
CONF_NOT_PRESENT, CONF_NOT_PRESENT,
CONF_NOT_TAMPERED, CONF_NOT_TAMPERED,
CONF_NOT_UNSAFE, CONF_NOT_UNSAFE,
CONF_NO_CO,
CONF_NO_GAS, CONF_NO_GAS,
CONF_NO_LIGHT, CONF_NO_LIGHT,
CONF_NO_MOTION, CONF_NO_MOTION,
@ -157,6 +162,7 @@ ENTITY_TRIGGERS = {
{CONF_TYPE: CONF_CHARGING}, {CONF_TYPE: CONF_CHARGING},
{CONF_TYPE: CONF_NOT_CHARGING}, {CONF_TYPE: CONF_NOT_CHARGING},
], ],
DEVICE_CLASS_CO: [{CONF_TYPE: CONF_CO}, {CONF_TYPE: CONF_NO_CO}],
DEVICE_CLASS_COLD: [{CONF_TYPE: CONF_COLD}, {CONF_TYPE: CONF_NOT_COLD}], DEVICE_CLASS_COLD: [{CONF_TYPE: CONF_COLD}, {CONF_TYPE: CONF_NOT_COLD}],
DEVICE_CLASS_CONNECTIVITY: [ DEVICE_CLASS_CONNECTIVITY: [
{CONF_TYPE: CONF_CONNECTED}, {CONF_TYPE: CONF_CONNECTED},

View File

@ -4,6 +4,8 @@
"condition_type": { "condition_type": {
"is_bat_low": "{entity_name} battery is low", "is_bat_low": "{entity_name} battery is low",
"is_not_bat_low": "{entity_name} battery is normal", "is_not_bat_low": "{entity_name} battery is normal",
"is_co": "{entity_name} is detecting carbon monoxide",
"is_no_co": "{entity_name} is not detecting carbon monoxide",
"is_cold": "{entity_name} is cold", "is_cold": "{entity_name} is cold",
"is_not_cold": "{entity_name} is not cold", "is_not_cold": "{entity_name} is not cold",
"is_connected": "{entity_name} is connected", "is_connected": "{entity_name} is connected",
@ -54,6 +56,8 @@
"trigger_type": { "trigger_type": {
"bat_low": "{entity_name} battery low", "bat_low": "{entity_name} battery low",
"not_bat_low": "{entity_name} battery normal", "not_bat_low": "{entity_name} battery normal",
"co": "{entity_name} started detecting carbon monoxide",
"no_co": "{entity_name} stopped detecting carbon monoxide",
"cold": "{entity_name} became cold", "cold": "{entity_name} became cold",
"not_cold": "{entity_name} became not cold", "not_cold": "{entity_name} became not cold",
"connected": "{entity_name} connected", "connected": "{entity_name} connected",
@ -111,6 +115,10 @@
"off": "Not charging", "off": "Not charging",
"on": "Charging" "on": "Charging"
}, },
"co": {
"off": "Clear",
"on": "Detected"
},
"cold": { "cold": {
"off": "[%key:component::binary_sensor::state::battery::off%]", "off": "[%key:component::binary_sensor::state::battery::off%]",
"on": "Cold" "on": "Cold"
@ -209,6 +217,7 @@
} }
}, },
"device_class": { "device_class": {
"co": "carbon_monoxide",
"cold": "cold", "cold": "cold",
"gas": "gas", "gas": "gas",
"heat": "heat", "heat": "heat",

View File

@ -11,7 +11,6 @@ from homeassistant.components.binary_sensor import BinarySensorDeviceClass
from homeassistant.const import ( from homeassistant.const import (
ATTR_DEVICE_CLASS, ATTR_DEVICE_CLASS,
ATTR_UNIT_OF_MEASUREMENT, ATTR_UNIT_OF_MEASUREMENT,
DEVICE_CLASS_CO,
DEVICE_CLASS_CO2, DEVICE_CLASS_CO2,
STATE_HOME, STATE_HOME,
STATE_ON, STATE_ON,
@ -66,7 +65,7 @@ class SI(NamedTuple):
BINARY_SENSOR_SERVICE_MAP: dict[str, SI] = { BINARY_SENSOR_SERVICE_MAP: dict[str, SI] = {
DEVICE_CLASS_CO: SI( BinarySensorDeviceClass.CO: SI(
SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int SERV_CARBON_MONOXIDE_SENSOR, CHAR_CARBON_MONOXIDE_DETECTED, int
), ),
DEVICE_CLASS_CO2: SI(SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED, int), DEVICE_CLASS_CO2: SI(SERV_CARBON_DIOXIDE_SENSOR, CHAR_CARBON_DIOXIDE_DETECTED, int),