# dlitz 2025 # Ref: https://github.com/esphome/starter-components/blob/main/components/empty_binary_sensor/binary_sensor.py import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import binary_sensor from esphome.const import CONF_ID CONF_DETECT_STATUS = "detect_status" CONF_WARNING = "warning" CONF_ERROR = "error" DETECT_STATUS_ENUM = { CONF_WARNING: 1, CONF_ERROR: 2, } app_status_ns = cg.esphome_ns.namespace("app_status") AppStatus = app_status_ns.class_("AppStatus", binary_sensor.BinarySensor, cg.PollingComponent) #CONFIG_SCHEMA = binary_sensor.binary_sensor_schema(AppStatus).extend({cv.GenerateID(): cv.declare_id(AppStatus)}).extend(cv.COMPONENT_SCHEMA) CONFIG_SCHEMA = binary_sensor.binary_sensor_schema(AppStatus).extend({ cv.GenerateID(): cv.declare_id(AppStatus), cv.Optional(CONF_DETECT_STATUS, default=[CONF_WARNING, CONF_ERROR]): cv.ensure_list(cv.enum(DETECT_STATUS_ENUM)), }).extend(cv.polling_component_schema(default_update_interval="1s")) async def to_code(config): var = await binary_sensor.new_binary_sensor(config) await cg.register_component(var, config) cg.add(var.set_include_warnings(CONF_WARNING in config[CONF_DETECT_STATUS])) cg.add(var.set_include_errors(CONF_ERROR in config[CONF_DETECT_STATUS]))