components/ads131m08/sensor_rms/__init__.py

75 lines
2.2 KiB
Python

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"
MAX_CHANNELS = 12
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