import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import sensor from esphome.const import ( CONF_EXTERNAL_TEMPERATURE, CONF_ID, CONF_INTERNAL_TEMPERATURE, CONF_SPEED, DEVICE_CLASS_TEMPERATURE, STATE_CLASS_MEASUREMENT, UNIT_CELSIUS, UNIT_PERCENT, UNIT_REVOLUTIONS_PER_MINUTE, ICON_PERCENT, ) from .. import EMC2101_COMPONENT_SCHEMA, CONF_EMC2101_ID, emc2101_ns DEPENDENCIES = ["emc2101"] CONF_DUTY_CYCLE = "duty_cycle" EMC2101Sensor = emc2101_ns.class_("EMC2101Sensor", cg.PollingComponent) CONFIG_SCHEMA = EMC2101_COMPONENT_SCHEMA.extend( { cv.GenerateID(): cv.declare_id(EMC2101Sensor), cv.Optional(CONF_INTERNAL_TEMPERATURE): sensor.sensor_schema( unit_of_measurement=UNIT_CELSIUS, accuracy_decimals=0, device_class=DEVICE_CLASS_TEMPERATURE, state_class=STATE_CLASS_MEASUREMENT, ), cv.Optional(CONF_EXTERNAL_TEMPERATURE): sensor.sensor_schema( unit_of_measurement=UNIT_CELSIUS, accuracy_decimals=3, device_class=DEVICE_CLASS_TEMPERATURE, state_class=STATE_CLASS_MEASUREMENT, ), cv.Optional(CONF_SPEED): sensor.sensor_schema( unit_of_measurement=UNIT_REVOLUTIONS_PER_MINUTE, accuracy_decimals=2, state_class=STATE_CLASS_MEASUREMENT, icon="mdi:fan", ), cv.Optional(CONF_DUTY_CYCLE): sensor.sensor_schema( unit_of_measurement=UNIT_PERCENT, accuracy_decimals=2, state_class=STATE_CLASS_MEASUREMENT, icon=ICON_PERCENT, ), } ).extend(cv.polling_component_schema("60s")) async def to_code(config): paren = await cg.get_variable(config[CONF_EMC2101_ID]) var = cg.new_Pvariable(config[CONF_ID], paren) await cg.register_component(var, config) if CONF_INTERNAL_TEMPERATURE in config: sens = await sensor.new_sensor(config[CONF_INTERNAL_TEMPERATURE]) cg.add(var.set_internal_temperature_sensor(sens)) if CONF_EXTERNAL_TEMPERATURE in config: sens = await sensor.new_sensor(config[CONF_EXTERNAL_TEMPERATURE]) cg.add(var.set_external_temperature_sensor(sens)) if CONF_SPEED in config: sens = await sensor.new_sensor(config[CONF_SPEED]) cg.add(var.set_speed_sensor(sens)) if CONF_DUTY_CYCLE in config: sens = await sensor.new_sensor(config[CONF_DUTY_CYCLE]) cg.add(var.set_duty_cycle_sensor(sens))