Files
esphome-dev/esphome/components/pvvx_mithermometer/display/__init__.py
T

56 lines
1.9 KiB
Python

import esphome.codegen as cg
import esphome.config_validation as cv
from esphome.components import ble_client, display, time
from esphome.const import (
CONF_AUTO_CLEAR_ENABLED,
CONF_DISCONNECT_DELAY,
CONF_ID,
CONF_LAMBDA,
CONF_TIME_ID,
CONF_VALIDITY_PERIOD,
)
DEPENDENCIES = ["ble_client"]
pvvx_ns = cg.esphome_ns.namespace("pvvx_mithermometer")
PVVXDisplay = pvvx_ns.class_(
"PVVXDisplay", cg.PollingComponent, ble_client.BLEClientNode
)
PVVXDisplayRef = PVVXDisplay.operator("ref")
CONFIG_SCHEMA = (
display.BASIC_DISPLAY_SCHEMA.extend(
{
cv.GenerateID(): cv.declare_id(PVVXDisplay),
cv.Optional(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
cv.Optional(CONF_AUTO_CLEAR_ENABLED, default=True): cv.boolean,
cv.Optional(CONF_DISCONNECT_DELAY, default="5s"): cv.positive_time_period,
cv.Optional(CONF_VALIDITY_PERIOD, default="5min"): cv.All(
cv.positive_time_period_seconds,
cv.Range(max=cv.TimePeriod(seconds=65535)),
),
}
)
.extend(ble_client.BLE_CLIENT_SCHEMA)
.extend(cv.polling_component_schema("60s"))
)
async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
await display.register_display(var, config)
await ble_client.register_ble_node(var, config)
cg.add(var.set_disconnect_delay(config[CONF_DISCONNECT_DELAY].total_milliseconds))
cg.add(var.set_auto_clear(config[CONF_AUTO_CLEAR_ENABLED]))
cg.add(var.set_validity_period(config[CONF_VALIDITY_PERIOD].total_seconds))
if CONF_TIME_ID in config:
time_ = await cg.get_variable(config[CONF_TIME_ID])
cg.add(var.set_time(time_))
if CONF_LAMBDA in config:
lambda_ = await cg.process_lambda(
config[CONF_LAMBDA], [(PVVXDisplayRef, "it")], return_type=cg.void
)
cg.add(var.set_writer(lambda_))