import esphome.codegen as cg import esphome.config_validation as cv from esphome.components import select from .. import ( CONF_PANASONIC_HEATPUMP_ID, PanasonicHeatpumpComponent, panasonic_heatpump_ns, ) CONF_COOL_MODE = "cool_mode" CONF_SET2 = "set2" # Set Holiday Mode CONF_SET3 = "set3" # Set Quiet Mode CONF_SET4 = "set4" # Set Powerful Mode CONF_SET9 = "set9" # Set Operation Mode # ToDo: Split up set9 into set9_1 (Heating Mode) and set9_2 (DHW Mode) CONF_SET17 = "set17" # Set Zones CONF_SET26 = "set26" # Set External PadHeater CONF_SET35 = "set35" # Set Bivalent Mode CONF_SET39 = "set39" # Set Heating Control CONF_SET40 = "set40" # Set Smart DHW CONF_SET41 = "set41" # Set Quiet Mode Priority CONF_SET42 = "set42" # Set Pump Flow Rate Mode TYPES = [ CONF_SET2, CONF_SET3, CONF_SET4, CONF_SET9, CONF_SET17, CONF_SET26, CONF_SET35, CONF_SET39, CONF_SET40, CONF_SET41, CONF_SET42, ] CONF_SELECTS = [ [ "Off", "Scheduled", "Active", ], [ "Off", "Level 1", "Level 2", "Level 3", ], [ "Off", "30min", "60min", "90min", ], [ "TANK", "HEAT", "HEAT+TANK", ], [ "Zone 1", "Zone 2", "Zone 1 & 2", ], ["Disabled", "Type-A", "Type-B"], ["Alternative", "Parallel", "Advanced Parallel"], [ "Comfort", "Efficiency", ], [ "Variable", "Standard", ], [ "Sound", "Capacity", ], [ "DeltaT", "Max. Duty", ], ] CONF_SELECT_COOL_MODE = [ "TANK", "HEAT", "HEAT+TANK", "COOL", "COOL+TANK", "AUTO", "AUTO+TANK", ] PanasonicHeatpumpSelect = panasonic_heatpump_ns.class_( "PanasonicHeatpumpSelect", select.Select, cg.Component ) CONFIG_SCHEMA = cv.Schema( { cv.GenerateID(CONF_PANASONIC_HEATPUMP_ID): cv.use_id( PanasonicHeatpumpComponent ), cv.Optional(CONF_COOL_MODE, default=False): cv.boolean, cv.Optional(CONF_SET2): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET3): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET4): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET9): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET17): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET26): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET35): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET39): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET40): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET41): select.select_schema( PanasonicHeatpumpSelect, ), cv.Optional(CONF_SET42): select.select_schema( PanasonicHeatpumpSelect, ), } ).extend(cv.COMPONENT_SCHEMA) async def to_code(config): parent = await cg.get_variable(config[CONF_PANASONIC_HEATPUMP_ID]) for index, key in enumerate(TYPES): if child_config := config.get(key): child_options = ( CONF_SELECT_COOL_MODE if config[CONF_COOL_MODE] and key == CONF_SET9 else CONF_SELECTS[index] ) var = await select.new_select(child_config, options=child_options) await cg.register_component(var, child_config) cg.add(var.set_parent(parent)) cg.add(var.set_id(index)) cg.add(parent.add_select(var))