124 lines
4.4 KiB
Python
124 lines
4.4 KiB
Python
import esphome.codegen as cg
|
|||
|
|
import esphome.config_validation as cv
|
||
|
|
from esphome import automation
|
||
|
|
from esphome.components import time as time_, uart
|
||
|
|
from esphome.const import CONF_ID, CONF_TEXT, CONF_TIME_ID
|
||
|
|
|
||
|
|
DEPENDENCIES = ["uart", "time"]
|
||
|
|
|
||
|
|
CONF_COLS = "cols"
|
||
|
|
CONF_ROWS = "rows"
|
||
|
|
CONF_LINE = "line"
|
||
|
|
CONF_FORMAT = "format"
|
||
|
|
CONF_CENTERED = "centered"
|
||
|
|
CONF_SEND_NEWLINES = "send_newlines"
|
||
|
|
|
||
|
|
samsung_vfd_ns = cg.esphome_ns.namespace("samsung_vfd")
|
||
|
|
|
||
|
|
SamsungVfd = samsung_vfd_ns.class_("SamsungVfd", cg.Component, uart.UARTDevice)
|
||
|
|
|
||
|
|
PrintAction = samsung_vfd_ns.class_("PrintAction", automation.Action)
|
||
|
|
PrintfAction = samsung_vfd_ns.class_("PrintfAction", automation.Action)
|
||
|
|
ClearAction = samsung_vfd_ns.class_("ClearAction", automation.Action)
|
||
|
|
HomeAction = samsung_vfd_ns.class_("HomeAction", automation.Action)
|
||
|
|
|
||
|
|
CONFIG_SCHEMA = (
|
||
|
|
cv.Schema(
|
||
|
|
{
|
||
|
|
cv.GenerateID(): cv.declare_id(SamsungVfd),
|
||
|
|
cv.Optional(CONF_COLS, default=20): cv.int_range(min=1, max=80),
|
||
|
|
cv.Optional(CONF_ROWS, default=2): cv.int_range(min=1, max=8),
|
||
|
|
# Off by default: lines are padded to exactly `cols` characters and the
|
||
|
|
# display wraps to the next line by itself.
|
||
|
|
cv.Optional(CONF_SEND_NEWLINES, default=False): cv.boolean,
|
||
|
|
}
|
||
|
|
)
|
||
|
|
.extend(cv.COMPONENT_SCHEMA)
|
||
|
|
.extend(uart.UART_DEVICE_SCHEMA)
|
||
|
|
)
|
||
|
|
|
||
|
|
FINAL_VALIDATE_SCHEMA = uart.final_validate_device_schema(
|
||
|
|
"samsung_vfd", baud_rate=9600, require_tx=True
|
||
|
|
)
|
||
|
|
|
||
|
|
|
||
|
|
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)
|
||
|
|
cg.add(var.set_size(config[CONF_COLS], config[CONF_ROWS]))
|
||
|
|
cg.add(var.set_send_newlines(config[CONF_SEND_NEWLINES]))
|
||
|
|
|
||
|
|
|
||
|
|
@automation.register_action(
|
||
|
|
"samsung_vfd.print",
|
||
|
|
PrintAction,
|
||
|
|
cv.Schema(
|
||
|
|
{
|
||
|
|
cv.Required(CONF_ID): cv.use_id(SamsungVfd),
|
||
|
|
cv.Required(CONF_TEXT): cv.templatable(cv.string),
|
||
|
|
cv.Optional(CONF_LINE): cv.templatable(cv.int_range(min=0, max=7)),
|
||
|
|
cv.Optional(CONF_CENTERED): cv.templatable(cv.boolean),
|
||
|
|
}
|
||
|
|
),
|
||
|
|
synchronous=True,
|
||
|
|
)
|
||
|
|
async def samsung_vfd_print_to_code(config, action_id, template_arg, args):
|
||
|
|
var = cg.new_Pvariable(action_id, template_arg)
|
||
|
|
await cg.register_parented(var, config[CONF_ID])
|
||
|
|
cg.add(var.set_text(await cg.templatable(config[CONF_TEXT], args, cg.std_string)))
|
||
|
|
if CONF_LINE in config:
|
||
|
|
cg.add(var.set_line(await cg.templatable(config[CONF_LINE], args, cg.int_)))
|
||
|
|
if CONF_CENTERED in config:
|
||
|
|
cg.add(var.set_centered(await cg.templatable(config[CONF_CENTERED], args, cg.bool_)))
|
||
|
|
return var
|
||
|
|
|
||
|
|
|
||
|
|
@automation.register_action(
|
||
|
|
"samsung_vfd.printf",
|
||
|
|
PrintfAction,
|
||
|
|
cv.Schema(
|
||
|
|
{
|
||
|
|
cv.Required(CONF_ID): cv.use_id(SamsungVfd),
|
||
|
|
cv.Required(CONF_TIME_ID): cv.use_id(time_.RealTimeClock),
|
||
|
|
cv.Required(CONF_FORMAT): cv.templatable(cv.string),
|
||
|
|
cv.Optional(CONF_LINE): cv.templatable(cv.int_range(min=0, max=7)),
|
||
|
|
cv.Optional(CONF_CENTERED): cv.templatable(cv.boolean),
|
||
|
|
}
|
||
|
|
),
|
||
|
|
synchronous=True,
|
||
|
|
)
|
||
|
|
async def samsung_vfd_printf_to_code(config, action_id, template_arg, args):
|
||
|
|
var = cg.new_Pvariable(action_id, template_arg)
|
||
|
|
await cg.register_parented(var, config[CONF_ID])
|
||
|
|
cg.add(var.set_time(await cg.get_variable(config[CONF_TIME_ID])))
|
||
|
|
cg.add(var.set_format(await cg.templatable(config[CONF_FORMAT], args, cg.std_string)))
|
||
|
|
if CONF_LINE in config:
|
||
|
|
cg.add(var.set_line(await cg.templatable(config[CONF_LINE], args, cg.int_)))
|
||
|
|
if CONF_CENTERED in config:
|
||
|
|
cg.add(var.set_centered(await cg.templatable(config[CONF_CENTERED], args, cg.bool_)))
|
||
|
|
return var
|
||
|
|
|
||
|
|
|
||
|
|
@automation.register_action(
|
||
|
|
"samsung_vfd.clear",
|
||
|
|
ClearAction,
|
||
|
|
cv.Schema({cv.Required(CONF_ID): cv.use_id(SamsungVfd)}),
|
||
|
|
synchronous=True,
|
||
|
|
)
|
||
|
|
async def samsung_vfd_clear_to_code(config, action_id, template_arg, args):
|
||
|
|
var = cg.new_Pvariable(action_id, template_arg)
|
||
|
|
await cg.register_parented(var, config[CONF_ID])
|
||
|
|
return var
|
||
|
|
|
||
|
|
|
||
|
|
@automation.register_action(
|
||
|
|
"samsung_vfd.home",
|
||
|
|
HomeAction,
|
||
|
|
cv.Schema({cv.Required(CONF_ID): cv.use_id(SamsungVfd)}),
|
||
|
|
synchronous=True,
|
||
|
|
)
|
||
|
|
async def samsung_vfd_home_to_code(config, action_id, template_arg, args):
|
||
|
|
var = cg.new_Pvariable(action_id, template_arg)
|
||
|
|
await cg.register_parented(var, config[CONF_ID])
|
||
|
|
return var
|