import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import sensor from esphome.const import ( DEVICE_CLASS_VOLTAGE, STATE_CLASS_MEASUREMENT, ICON_CURRENT_AC, UNIT_VOLT, CONF_CHANNEL, CONF_NAME, ) from .. import CONF_ADS131M08_ID, ads131m08_ns CONF_AC = "ac" CONF_DC = "dc" ICON_CURRENT_DC = "mdi:current-dc" AUTO_LOAD = ["sensor",] DEPENDENCIES = ["ads131m08"] ads131m08_acdc_ns = cg.esphome_ns.namespace("ads131m08_acdc") RMS_SENSOR = ads131m08_ns.class_( "RMS_Sensor", sensor.Sensor, cg.Component ) CONFIG_SCHEMA_RMS_SENSORS = cv.Schema( { cv.Required(CONF_DC): sensor.sensor_schema( RMS_SENSOR, accuracy_decimals=6, icon=ICON_CURRENT_DC, unit_of_measurement=UNIT_VOLT, device_class=DEVICE_CLASS_VOLTAGE, state_class=STATE_CLASS_MEASUREMENT, ).extend( { cv.Required(CONF_NAME): cv.string, } ), cv.Optional(CONF_AC): sensor.sensor_schema( RMS_SENSOR, accuracy_decimals=6, icon=ICON_CURRENT_AC, unit_of_measurement=UNIT_VOLT, device_class=DEVICE_CLASS_VOLTAGE, state_class=STATE_CLASS_MEASUREMENT, ).extend( { cv.Required(CONF_NAME): cv.string, } ), } ). extend (cv.COMPONENT_SCHEMA) async def to_code_ac(config): hub = await cg.get_variable(config[CONF_ADS131M08_ID]) channel = config[CONF_CHANNEL] if ac_config := config.get(CONF_AC): sens_ac = await sensor.new_sensor(ac_config) cg.add(sens_ac.set_calc_rms(True)) cg.add(hub.register_sensor_ac(channel, sens_ac)) await cg.register_component(sens_ac, config[CONF_AC]) return sens_ac return None async def to_code_dc(config): hub = await cg.get_variable(config[CONF_ADS131M08_ID]) channel = config[CONF_CHANNEL] dc_config = config.get(CONF_DC) sens_dc = await sensor.new_sensor(dc_config) cg.add(sens_dc, config.get(CONF_DC)) cg.add(hub.register_sensor_dc(channel, sens_dc)) await cg.register_component(sens_dc, config[CONF_DC]) return sens_dc