Additional sensors and binary sensors support for Haier Climate (#6257)

Co-authored-by: Jesse Hills <3060199+jesserockz@users.noreply.github.com>
Co-authored-by: Pavlo Dudnytskyi <pdudnytskyi@astrata.eu>
This commit is contained in:
Pavlo Dudnytskyi
2024-03-04 22:54:01 +01:00
committed by GitHub
parent de2d5a65b5
commit 81b8451b8a
13 changed files with 1054 additions and 61 deletions
@@ -0,0 +1,70 @@
import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import binary_sensor
from esphome.const import (
ENTITY_CATEGORY_DIAGNOSTIC,
ICON_FAN,
ICON_RADIATOR,
)
from ..climate import (
CONF_HAIER_ID,
HonClimate,
)
BinarySensorTypeEnum = HonClimate.enum("SubBinarySensorType", True)
# Haier sensors
CONF_OUTDOOR_FAN_STATUS = "outdoor_fan_status"
CONF_DEFROST_STATUS = "defrost_status"
CONF_COMPRESSOR_STATUS = "compressor_status"
CONF_INDOOR_FAN_STATUS = "indoor_fan_status"
CONF_FOUR_WAY_VALVE_STATUS = "four_way_valve_status"
CONF_INDOOR_ELECTRIC_HEATING_STATUS = "indoor_electric_heating_status"
# Additional icons
ICON_SNOWFLAKE_THERMOMETER = "mdi:snowflake-thermometer"
ICON_HVAC = "mdi:hvac"
ICON_VALVE = "mdi:valve"
SENSOR_TYPES = {
CONF_OUTDOOR_FAN_STATUS: binary_sensor.binary_sensor_schema(
icon=ICON_FAN,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
CONF_DEFROST_STATUS: binary_sensor.binary_sensor_schema(
icon=ICON_SNOWFLAKE_THERMOMETER,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
CONF_COMPRESSOR_STATUS: binary_sensor.binary_sensor_schema(
icon=ICON_HVAC,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
CONF_INDOOR_FAN_STATUS: binary_sensor.binary_sensor_schema(
icon=ICON_FAN,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
CONF_FOUR_WAY_VALVE_STATUS: binary_sensor.binary_sensor_schema(
icon=ICON_VALVE,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
CONF_INDOOR_ELECTRIC_HEATING_STATUS: binary_sensor.binary_sensor_schema(
icon=ICON_RADIATOR,
entity_category=ENTITY_CATEGORY_DIAGNOSTIC,
),
}
CONFIG_SCHEMA = cv.Schema(
{
cv.Required(CONF_HAIER_ID): cv.use_id(HonClimate),
}
).extend({cv.Optional(type): schema for type, schema in SENSOR_TYPES.items()})
async def to_code(config):
paren = await cg.get_variable(config[CONF_HAIER_ID])
for type, _ in SENSOR_TYPES.items():
if conf := config.get(type):
sens = await binary_sensor.new_binary_sensor(conf)
binary_sensor_type = getattr(BinarySensorTypeEnum, type.upper())
cg.add(paren.set_sub_binary_sensor(binary_sensor_type, sens))