Files
hassos_config/esphome/custom_component/nixie_display/display.py
2026-03-26 12:10:21 +01:00

64 lines
2.5 KiB
Python

import esphome.codegen as cg
import esphome.config_validation as cv
from esphome import pins
from esphome.components import display, spi, time
from esphome.const import CONF_ID, CONF_SPI_ID
DEPENDENCIES = ["spi", "time"]
nixie_display_ns = cg.esphome_ns.namespace("nixie_display")
NixieDisplay = nixie_display_ns.class_(
"NixieDisplay", display.DisplayBuffer, spi.SPIDevice
)
CONF_ANODE0_PIN = "anode0_pin"
CONF_ANODE1_PIN = "anode1_pin"
CONF_ANODE2_PIN = "anode2_pin"
CONF_LE_PIN = "le_pin"
CONF_REFRESH_INTERVAL_US = "refresh_interval_us"
CONF_TIME_ID = "time_id"
CONF_DEBUG_LOGGING = "debug_logging"
CONF_ANTI_POISONING = "anti_poisoning"
CONF_LAMBDA_HOLD_MS = "lambda_hold_ms"
CONF_AUTO_TIME = "auto_time"
CONFIG_SCHEMA = display.FULL_DISPLAY_SCHEMA.extend(
{
cv.GenerateID(): cv.declare_id(NixieDisplay),
cv.Required(CONF_SPI_ID): cv.use_id(spi.SPIComponent),
cv.Required(CONF_ANODE0_PIN): pins.gpio_output_pin_schema,
cv.Required(CONF_ANODE1_PIN): pins.gpio_output_pin_schema,
cv.Required(CONF_ANODE2_PIN): pins.gpio_output_pin_schema,
cv.Required(CONF_LE_PIN): pins.gpio_output_pin_schema,
cv.Optional(CONF_REFRESH_INTERVAL_US, default=1000): cv.int_range(
min=200, max=20000
),
cv.Optional(CONF_TIME_ID): cv.use_id(time.RealTimeClock),
cv.Optional(CONF_DEBUG_LOGGING, default=False): cv.boolean,
cv.Optional(CONF_ANTI_POISONING, default=True): cv.boolean,
cv.Optional(CONF_LAMBDA_HOLD_MS, default=1500): cv.int_range(min=0, max=60000),
cv.Optional(CONF_AUTO_TIME, default=True): cv.boolean,
}
)
async def to_code(config):
var = cg.new_Pvariable(config[CONF_ID])
await display.register_display(var, config)
await spi.register_spi_device(var, config)
anode0 = await cg.gpio_pin_expression(config[CONF_ANODE0_PIN])
anode1 = await cg.gpio_pin_expression(config[CONF_ANODE1_PIN])
anode2 = await cg.gpio_pin_expression(config[CONF_ANODE2_PIN])
le_pin = await cg.gpio_pin_expression(config[CONF_LE_PIN])
cg.add(var.set_anode_pins(anode0, anode1, anode2, le_pin))
cg.add(var.set_refresh_interval_us(config[CONF_REFRESH_INTERVAL_US]))
cg.add(var.set_debug_logging(config[CONF_DEBUG_LOGGING]))
cg.add(var.set_anti_poisoning(config[CONF_ANTI_POISONING]))
cg.add(var.set_lambda_hold_ms(config[CONF_LAMBDA_HOLD_MS]))
cg.add(var.set_auto_time(config[CONF_AUTO_TIME]))
if CONF_TIME_ID in config:
time_var = await cg.get_variable(config[CONF_TIME_ID])
cg.add(var.set_time_source(time_var))