53 lines
1.9 KiB
Python
53 lines
1.9 KiB
Python
import esphome.codegen as cg
|
|
import esphome.config_validation as cv
|
|
from esphome import pins
|
|
from esphome.components import light
|
|
from esphome.components import uart
|
|
from esphome.components import sensor
|
|
from esphome.const import CONF_ID, CONF_HEIGHT, CONF_TIMEOUT, ICON_GAUGE
|
|
|
|
DEPENDENCIES = ['time']
|
|
AUTO_LOAD = ['light']
|
|
|
|
wordclock_ns = cg.esphome_ns.namespace('wordcl')
|
|
|
|
Wordclock = wordclock_ns.class_('Wordclock', cg.Component, light.)
|
|
Desky = desky_ns.class_('Desky', cg.Component, uart.UARTDevice)
|
|
|
|
CONF_UP = "up"
|
|
CONF_DOWN = "down"
|
|
CONF_REQUEST = "request"
|
|
CONF_STOPPING_DISTANCE = "stopping_distance"
|
|
|
|
|
|
|
|
CONFIG_SCHEMA = cv.COMPONENT_SCHEMA.extend({
|
|
cv.GenerateID(): cv.declare_id(Desky),
|
|
cv.Optional(CONF_UP): pins.gpio_output_pin_schema,
|
|
cv.Optional(CONF_DOWN): pins.gpio_output_pin_schema,
|
|
cv.Optional(CONF_REQUEST): pins.gpio_output_pin_schema,
|
|
cv.Optional(CONF_HEIGHT): sensor.sensor_schema(icon=ICON_GAUGE, accuracy_decimals=0),
|
|
cv.Optional(CONF_STOPPING_DISTANCE, default=15): cv.positive_int,
|
|
cv.Optional(CONF_TIMEOUT): cv.time_period,
|
|
}).extend(uart.UART_DEVICE_SCHEMA)
|
|
|
|
async def to_code(config):
|
|
var = cg.new_Pvariable(config[CONF_ID])
|
|
await cg.register_component(var, config)
|
|
await uart.register_uart_device(var, config)
|
|
if CONF_UP in config:
|
|
pin = await cg.gpio_pin_expression(config[CONF_UP])
|
|
cg.add(var.set_up_pin(pin))
|
|
if CONF_DOWN in config:
|
|
pin = await cg.gpio_pin_expression(config[CONF_DOWN])
|
|
cg.add(var.set_down_pin(pin))
|
|
if CONF_REQUEST in config:
|
|
pin = await cg.gpio_pin_expression(config[CONF_REQUEST])
|
|
cg.add(var.set_request_pin(pin))
|
|
if CONF_HEIGHT in config:
|
|
sens = await sensor.new_sensor(config[CONF_HEIGHT])
|
|
cg.add(var.set_height_sensor(sens))
|
|
cg.add(var.set_stopping_distance(config[CONF_STOPPING_DISTANCE]))
|
|
if CONF_TIMEOUT in config:
|
|
cg.add(var.set_timeout(config[CONF_TIMEOUT].total_milliseconds))
|
|
|