mirror of
https://github.com/esphome/esphome.git
synced 2025-10-30 14:43:51 +00:00
131 lines
3.9 KiB
Python
131 lines
3.9 KiB
Python
import esphome.codegen as cg
|
|
from esphome.components import number
|
|
import esphome.config_validation as cv
|
|
from esphome.const import (
|
|
CONF_ID,
|
|
CONF_MAX_VALUE,
|
|
CONF_MIN_VALUE,
|
|
CONF_MODE,
|
|
CONF_PHASE_A,
|
|
CONF_PHASE_B,
|
|
CONF_PHASE_C,
|
|
CONF_REFERENCE_VOLTAGE,
|
|
CONF_STEP,
|
|
ENTITY_CATEGORY_CONFIG,
|
|
UNIT_AMPERE,
|
|
UNIT_VOLT,
|
|
)
|
|
|
|
from .. import atm90e32_ns
|
|
from ..sensor import ATM90E32Component
|
|
|
|
ATM90E32Number = atm90e32_ns.class_(
|
|
"ATM90E32Number", number.Number, cg.Parented.template(ATM90E32Component)
|
|
)
|
|
|
|
CONF_REFERENCE_CURRENT = "reference_current"
|
|
PHASE_KEYS = [CONF_PHASE_A, CONF_PHASE_B, CONF_PHASE_C]
|
|
|
|
|
|
REFERENCE_VOLTAGE_PHASE_SCHEMA = cv.All(
|
|
cv.Schema(
|
|
{
|
|
cv.Optional(CONF_MODE, default="box"): cv.string,
|
|
cv.Optional(CONF_MIN_VALUE, default=100.0): cv.float_,
|
|
cv.Optional(CONF_MAX_VALUE, default=260.0): cv.float_,
|
|
cv.Optional(CONF_STEP, default=0.1): cv.float_,
|
|
}
|
|
).extend(
|
|
number.number_schema(
|
|
class_=ATM90E32Number,
|
|
unit_of_measurement=UNIT_VOLT,
|
|
entity_category=ENTITY_CATEGORY_CONFIG,
|
|
icon="mdi:power-plug",
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
REFERENCE_CURRENT_PHASE_SCHEMA = cv.All(
|
|
cv.Schema(
|
|
{
|
|
cv.Optional(CONF_MODE, default="box"): cv.string,
|
|
cv.Optional(CONF_MIN_VALUE, default=1.0): cv.float_,
|
|
cv.Optional(CONF_MAX_VALUE, default=200.0): cv.float_,
|
|
cv.Optional(CONF_STEP, default=0.1): cv.float_,
|
|
}
|
|
).extend(
|
|
number.number_schema(
|
|
class_=ATM90E32Number,
|
|
unit_of_measurement=UNIT_AMPERE,
|
|
entity_category=ENTITY_CATEGORY_CONFIG,
|
|
icon="mdi:home-lightning-bolt",
|
|
)
|
|
)
|
|
)
|
|
|
|
|
|
REFERENCE_VOLTAGE_SCHEMA = cv.Schema(
|
|
{
|
|
cv.Optional(CONF_PHASE_A): REFERENCE_VOLTAGE_PHASE_SCHEMA,
|
|
cv.Optional(CONF_PHASE_B): REFERENCE_VOLTAGE_PHASE_SCHEMA,
|
|
cv.Optional(CONF_PHASE_C): REFERENCE_VOLTAGE_PHASE_SCHEMA,
|
|
}
|
|
)
|
|
|
|
REFERENCE_CURRENT_SCHEMA = cv.Schema(
|
|
{
|
|
cv.Optional(CONF_PHASE_A): REFERENCE_CURRENT_PHASE_SCHEMA,
|
|
cv.Optional(CONF_PHASE_B): REFERENCE_CURRENT_PHASE_SCHEMA,
|
|
cv.Optional(CONF_PHASE_C): REFERENCE_CURRENT_PHASE_SCHEMA,
|
|
}
|
|
)
|
|
|
|
CONFIG_SCHEMA = cv.Schema(
|
|
{
|
|
cv.GenerateID(CONF_ID): cv.use_id(ATM90E32Component),
|
|
cv.Optional(CONF_REFERENCE_VOLTAGE): REFERENCE_VOLTAGE_SCHEMA,
|
|
cv.Optional(CONF_REFERENCE_CURRENT): REFERENCE_CURRENT_SCHEMA,
|
|
}
|
|
)
|
|
|
|
|
|
async def to_code(config):
|
|
parent = await cg.get_variable(config[CONF_ID])
|
|
|
|
if voltage_cfg := config.get(CONF_REFERENCE_VOLTAGE):
|
|
voltage_objs = [None, None, None]
|
|
|
|
for i, key in enumerate(PHASE_KEYS):
|
|
if validated := voltage_cfg.get(key):
|
|
obj = await number.new_number(
|
|
validated,
|
|
min_value=validated["min_value"],
|
|
max_value=validated["max_value"],
|
|
step=validated["step"],
|
|
)
|
|
await cg.register_parented(obj, parent)
|
|
voltage_objs[i] = obj
|
|
|
|
# Inherit from A → B/C if only A defined
|
|
if voltage_objs[0] is not None:
|
|
for i in range(3):
|
|
if voltage_objs[i] is None:
|
|
voltage_objs[i] = voltage_objs[0]
|
|
|
|
for i, obj in enumerate(voltage_objs):
|
|
if obj is not None:
|
|
cg.add(parent.set_reference_voltage(i, obj))
|
|
|
|
if current_cfg := config.get(CONF_REFERENCE_CURRENT):
|
|
for i, key in enumerate(PHASE_KEYS):
|
|
if validated := current_cfg.get(key):
|
|
obj = await number.new_number(
|
|
validated,
|
|
min_value=validated["min_value"],
|
|
max_value=validated["max_value"],
|
|
step=validated["step"],
|
|
)
|
|
await cg.register_parented(obj, parent)
|
|
cg.add(parent.set_reference_current(i, obj))
|