def build_condition(config, arg_type): template_arg = TemplateArguments(arg_type) if CONF_AND in config: yield AndCondition.new( template_arg, build_conditions(config[CONF_AND], template_arg)) elif CONF_OR in config: yield OrCondition.new(template_arg, build_conditions(config[CONF_OR], template_arg)) elif CONF_LAMBDA in config: lambda_ = None for lambda_ in process_lambda(config[CONF_LAMBDA], [(arg_type, 'x')]): yield yield LambdaCondition.new(template_arg, lambda_) elif CONF_RANGE in config: conf = config[CONF_RANGE] rhs = RangeCondition.new(template_arg) type = RangeCondition.template(template_arg) condition = Pvariable(config[CONF_CONDITION_ID], rhs, type=type) if CONF_ABOVE in conf: template_ = None for template_ in templatable(conf[CONF_ABOVE], arg_type, float_): yield condition.set_min(template_) if CONF_BELOW in conf: template_ = None for template_ in templatable(conf[CONF_BELOW], arg_type, float_): yield condition.set_max(template_) yield condition else: raise ESPHomeYAMLError(u"Unsupported condition {}".format(config))
def fan_toggle_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = ToggleAction.template(arg_type) yield Pvariable(action_id, rhs, type=type)
def deep_sleep_prevent_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_prevent_deep_sleep_action(template_arg) type = PreventDeepSleepAction.template(arg_type) yield Pvariable(action_id, rhs, type=type)
def component_update_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = UpdateComponentAction.new(var) type = UpdateComponentAction.template(template_arg) yield Pvariable(action_id, rhs, type=type)
def lambda_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for lambda_ in process_lambda(config, [(arg_type, 'x')]): yield None rhs = LambdaAction.new(template_arg, lambda_) type = LambdaAction.template(template_arg) yield Pvariable(action_id, rhs, type=type)
def to_code(config): rhs = App.make_fast_led_light(config[CONF_NAME]) make = variable(config[CONF_MAKE_ID], rhs) fast_led = make.Pfast_led rgb_order = None if CONF_RGB_ORDER in config: rgb_order = RawExpression(config[CONF_RGB_ORDER]) template_args = TemplateArguments(RawExpression(config[CONF_CHIPSET]), config[CONF_DATA_PIN], config[CONF_CLOCK_PIN], rgb_order) add(fast_led.add_leds(template_args, config[CONF_NUM_LEDS])) if CONF_MAX_REFRESH_RATE in config: add(fast_led.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) if CONF_POWER_SUPPLY in config: for power_supply in get_variable(config[CONF_POWER_SUPPLY]): yield add(fast_led.set_power_supply(power_supply)) if CONF_COLOR_CORRECT in config: r, g, b = config[CONF_COLOR_CORRECT] add(fast_led.set_correction(r, g, b)) light.setup_light(make.Pstate, make.Pmqtt, config) setup_component(fast_led, config)
def switch_turn_off_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = TurnOffAction.template(arg_type) yield Pvariable(action_id, rhs, type=type)
def exp_mqtt_message(config): if config is None: return optional(TemplateArguments(MQTTMessage)) exp = StructInitializer(MQTTMessage, ('topic', config[CONF_TOPIC]), ('payload', config.get(CONF_PAYLOAD, "")), ('qos', config[CONF_QOS]), ('retain', config[CONF_RETAIN])) return exp
def delay_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) rhs = App.register_component(DelayAction.new(template_arg)) type = DelayAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config, arg_type, uint32): yield add(action.set_delay(template_)) yield action
def stepper_set_target_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_set_target_action(template_arg) type = SetTargetAction.template(arg_type) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_TARGET], arg_type, int32): yield None add(action.set_target(template_)) yield action
def output_set_level_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_set_level_action(template_arg) type = SetLevelAction.template(arg_type) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_LEVEL], arg_type, bool_): yield None add(action.set_level(template_)) yield action
def stepper_report_position_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_report_position_action(template_arg) type = ReportPositionAction.template(arg_type) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_POSITION], arg_type, int32): yield None add(action.set_target(template_)) yield action
def light_turn_off_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = TurnOffAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_TRANSITION_LENGTH in config: for template_ in templatable(config[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) yield action
def logger_log_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) esp_log = LOG_LEVEL_TO_ESP_LOG[config[CONF_LEVEL]] args = [RawExpression(unicode(x)) for x in config[CONF_ARGS]] text = unicode( statement(esp_log(config[CONF_TAG], config[CONF_FORMAT], *args))) for lambda_ in process_lambda(Lambda(text), [(arg_type, 'x')]): yield None rhs = LambdaAction.new(template_arg, lambda_) type = LambdaAction.template(template_arg) yield Pvariable(action_id, rhs, type=type)
def build_automation_(trigger, arg_type, config): rhs = App.make_automation(TemplateArguments(arg_type), trigger) type = Automation.template(arg_type) obj = Pvariable(config[CONF_AUTOMATION_ID], rhs, type=type) if CONF_IF in config: conditions = None for conditions in build_conditions(config[CONF_IF], arg_type): yield None add(obj.add_conditions(conditions)) actions = None for actions in build_actions(config[CONF_THEN], arg_type): yield None add(obj.add_actions(actions)) yield obj
def light_turn_on_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = TurnOnAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_TRANSITION_LENGTH in config: for template_ in templatable(config[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) if CONF_FLASH_LENGTH in config: for template_ in templatable(config[CONF_FLASH_LENGTH], arg_type, uint32): yield None add(action.set_flash_length(template_)) if CONF_BRIGHTNESS in config: for template_ in templatable(config[CONF_BRIGHTNESS], arg_type, float_): yield None add(action.set_brightness(template_)) if CONF_RED in config: for template_ in templatable(config[CONF_RED], arg_type, float_): yield None add(action.set_red(template_)) if CONF_GREEN in config: for template_ in templatable(config[CONF_GREEN], arg_type, float_): yield None add(action.set_green(template_)) if CONF_BLUE in config: for template_ in templatable(config[CONF_BLUE], arg_type, float_): yield None add(action.set_blue(template_)) if CONF_WHITE in config: for template_ in templatable(config[CONF_WHITE], arg_type, float_): yield None add(action.set_white(template_)) if CONF_COLOR_TEMPERATURE in config: for template_ in templatable(config[CONF_COLOR_TEMPERATURE], arg_type, float_): yield None add(action.set_color_temperature(template_)) if CONF_EFFECT in config: for template_ in templatable(config[CONF_EFFECT], arg_type, std_string): yield None add(action.set_effect(template_)) yield action
def to_code(config): for conf in config: type_ = RawExpression(conf[CONF_TYPE]) template_args = TemplateArguments(type_) res_type = GlobalVariableComponent.template(template_args) initial_value = None if CONF_INITIAL_VALUE in conf: initial_value = RawExpression(conf[CONF_INITIAL_VALUE]) rhs = App.Pmake_global_variable(template_args, initial_value) glob = Pvariable(conf[CONF_ID], rhs, type=res_type) if conf.get(CONF_RESTORE_VALUE, False): hash_ = hash(conf[CONF_ID].id) % 2**32 add(glob.set_restore_value(hash_)) setup_component(glob, conf)
def if_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for conditions in build_conditions(config[CONF_CONDITION], arg_type): yield None rhs = IfAction.new(template_arg, conditions) type = IfAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_THEN in config: for actions in build_actions(config[CONF_THEN], arg_type): yield None add(action.add_then(actions)) if CONF_ELSE in config: for actions in build_actions(config[CONF_ELSE], arg_type): yield None add(action.add_else(actions)) yield action
def fan_turn_on_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = TurnOnAction.template(arg_type) action = Pvariable(action_id, rhs, type=type) if CONF_OSCILLATING in config: for template_ in templatable(config[CONF_OSCILLATING], arg_type, bool_): yield None add(action.set_oscillating(template_)) if CONF_SPEED in config: for template_ in templatable(config[CONF_SPEED], arg_type, FanSpeed): yield None add(action.set_speed(template_)) yield action
def mqtt_publish_json_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) rhs = App.Pget_mqtt_client().Pmake_publish_json_action(template_arg) type = MQTTPublishJsonAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_TOPIC], arg_type, std_string): yield None add(action.set_topic(template_)) for lambda_ in process_lambda(config[CONF_PAYLOAD], [(arg_type, 'x'), (JsonObjectRef, 'root')]): yield None add(action.set_payload(lambda_)) if CONF_QOS in config: add(action.set_qos(config[CONF_QOS])) if CONF_RETAIN in config: add(action.set_retain(config[CONF_RETAIN])) yield action
def to_code(config): rhs = App.make_fast_led_light(config[CONF_NAME]) make = variable(MakeFastLEDLight, config[CONF_MAKE_ID], rhs) fast_led = make.Pfast_led rgb_order = None if CONF_RGB_ORDER in config: rgb_order = RawExpression(config[CONF_RGB_ORDER]) template_args = TemplateArguments(RawExpression(config[CONF_CHIPSET]), config[CONF_PIN], rgb_order) add(fast_led.add_leds(template_args, config[CONF_NUM_LEDS])) if CONF_MAX_REFRESH_RATE in config: add(fast_led.set_max_refresh_rate(config[CONF_MAX_REFRESH_RATE])) if CONF_POWER_SUPPLY in config: power_supply = get_variable(config[CONF_POWER_SUPPLY]) add(fast_led.set_power_supply(power_supply)) light.setup_light(make.Pstate, make.Pmqtt, config)
def mqtt_publish_action_to_code(config, action_id, arg_type): template_arg = TemplateArguments(arg_type) rhs = App.Pget_mqtt_client().Pmake_publish_action(template_arg) type = MQTTPublishAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_TOPIC], arg_type, std_string): yield None add(action.set_topic(template_)) for template_ in templatable(config[CONF_PAYLOAD], arg_type, std_string): yield None add(action.set_payload(template_)) if CONF_QOS in config: for template_ in templatable(config[CONF_QOS], arg_type, uint8): yield add(action.set_qos(template_)) if CONF_RETAIN in config: for template_ in templatable(config[CONF_RETAIN], arg_type, bool_): yield None add(action.set_retain(template_)) yield action
def build_condition(config, arg_type): template_arg = TemplateArguments(arg_type) if CONF_AND in config: return AndCondition.new( template_arg, build_conditions(config[CONF_AND], template_arg)) if CONF_OR in config: return OrCondition.new(template_arg, build_conditions(config[CONF_OR], template_arg)) if CONF_LAMBDA in config: return LambdaCondition.new( template_arg, process_lambda(config[CONF_LAMBDA], [(arg_type, 'x')])) if CONF_RANGE in config: conf = config[CONF_RANGE] rhs = RangeCondition.new(template_arg) condition = Pvariable(RangeCondition.template(template_arg), config[CONF_CONDITION_ID], rhs) if CONF_ABOVE in conf: condition.set_min(templatable(conf[CONF_ABOVE], arg_type, float_)) if CONF_BELOW in conf: condition.set_max(templatable(conf[CONF_BELOW], arg_type, float_)) return condition raise ESPHomeYAMLError(u"Unsupported condition {}".format(config))
def build_action(config, arg_type): from esphomeyaml.components import light, mqtt, switch template_arg = TemplateArguments(arg_type) # Keep pylint from freaking out var = None if CONF_DELAY in config: rhs = App.register_component(DelayAction.new(template_arg)) type = DelayAction.template(template_arg) action = Pvariable(config[CONF_ACTION_ID], rhs, type=type) template_ = None for template_ in templatable(config[CONF_DELAY], arg_type, uint32): yield add(action.set_delay(template_)) yield action elif CONF_LAMBDA in config: lambda_ = None for lambda_ in process_lambda(config[CONF_LAMBDA], [(arg_type, 'x')]): yield None rhs = LambdaAction.new(template_arg, lambda_) type = LambdaAction.template(template_arg) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_MQTT_PUBLISH in config: conf = config[CONF_MQTT_PUBLISH] rhs = App.Pget_mqtt_client().Pmake_publish_action(template_arg) type = mqtt.MQTTPublishAction.template(template_arg) action = Pvariable(config[CONF_ACTION_ID], rhs, type=type) template_ = None for template_ in templatable(conf[CONF_TOPIC], arg_type, std_string): yield None add(action.set_topic(template_)) template_ = None for template_ in templatable(conf[CONF_PAYLOAD], arg_type, std_string): yield None add(action.set_payload(template_)) if CONF_QOS in conf: template_ = None for template_ in templatable(conf[CONF_QOS], arg_type, uint8): yield add(action.set_qos(template_)) if CONF_RETAIN in conf: template_ = None for template_ in templatable(conf[CONF_RETAIN], arg_type, bool_): yield None add(action.set_retain(template_)) yield action elif CONF_LIGHT_TOGGLE in config: conf = config[CONF_LIGHT_TOGGLE] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = light.ToggleAction.template(template_arg) action = Pvariable(config[CONF_ACTION_ID], rhs, type=type) if CONF_TRANSITION_LENGTH in conf: template_ = None for template_ in templatable(conf[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) yield action elif CONF_LIGHT_TURN_OFF in config: conf = config[CONF_LIGHT_TURN_OFF] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = light.TurnOffAction.template(template_arg) action = Pvariable(config[CONF_ACTION_ID], rhs, type=type) if CONF_TRANSITION_LENGTH in conf: template_ = None for template_ in templatable(conf[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) yield action elif CONF_LIGHT_TURN_ON in config: conf = config[CONF_LIGHT_TURN_ON] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = light.TurnOnAction.template(template_arg) action = Pvariable(config[CONF_ACTION_ID], rhs, type=type) if CONF_TRANSITION_LENGTH in conf: template_ = None for template_ in templatable(conf[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) if CONF_FLASH_LENGTH in conf: template_ = None for template_ in templatable(conf[CONF_FLASH_LENGTH], arg_type, uint32): yield None add(action.set_flash_length(template_)) if CONF_BRIGHTNESS in conf: template_ = None for template_ in templatable(conf[CONF_BRIGHTNESS], arg_type, float_): yield None add(action.set_brightness(template_)) if CONF_RED in conf: template_ = None for template_ in templatable(conf[CONF_RED], arg_type, float_): yield None add(action.set_red(template_)) if CONF_GREEN in conf: template_ = None for template_ in templatable(conf[CONF_GREEN], arg_type, float_): yield None add(action.set_green(template_)) if CONF_BLUE in conf: template_ = None for template_ in templatable(conf[CONF_BLUE], arg_type, float_): yield None add(action.set_blue(template_)) if CONF_WHITE in conf: template_ = None for template_ in templatable(conf[CONF_WHITE], arg_type, float_): yield None add(action.set_white(template_)) if CONF_EFFECT in conf: template_ = None for template_ in templatable(conf[CONF_EFFECT], arg_type, std_string): yield None add(action.set_effect(template_)) yield action elif CONF_SWITCH_TOGGLE in config: conf = config[CONF_SWITCH_TOGGLE] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = switch.ToggleAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_SWITCH_TURN_OFF in config: conf = config[CONF_SWITCH_TURN_OFF] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = switch.TurnOffAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_SWITCH_TURN_ON in config: conf = config[CONF_SWITCH_TURN_ON] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = switch.TurnOnAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_COVER_OPEN in config: conf = config[CONF_COVER_OPEN] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_open_action(template_arg) type = cover.OpenAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_COVER_CLOSE in config: conf = config[CONF_COVER_CLOSE] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_close_action(template_arg) type = cover.CloseAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_COVER_STOP in config: conf = config[CONF_COVER_STOP] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_stop_action(template_arg) type = cover.StopAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_FAN_TOGGLE in config: conf = config[CONF_FAN_TOGGLE] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = fan.ToggleAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_FAN_TURN_OFF in config: conf = config[CONF_FAN_TURN_OFF] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = fan.TurnOffAction.template(arg_type) yield Pvariable(config[CONF_ACTION_ID], rhs, type=type) elif CONF_FAN_TURN_ON in config: conf = config[CONF_FAN_TURN_ON] for var in get_variable(conf[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = fan.TurnOnAction.template(arg_type) action = Pvariable(config[CONF_ACTION_ID], rhs, type=type) if CONF_OSCILLATING in config: template_ = None for template_ in templatable(conf[CONF_OSCILLATING], arg_type, bool_): yield None add(action.set_oscillating(template_)) if CONF_SPEED in config: template_ = None for template_ in templatable(conf[CONF_SPEED], arg_type, fan.FanSpeed): yield None add(action.set_speed(template_)) yield action else: raise ESPHomeYAMLError(u"Unsupported action {}".format(config))
def build_action(full_config, arg_type): from esphomeyaml.components import light, mqtt, switch template_arg = TemplateArguments(arg_type) # Keep pylint from freaking out var = None action_id = full_config[CONF_ACTION_ID] key, config = next( (k, v) for k, v in full_config.items() if k in ACTION_KEYS) if key == CONF_DELAY: rhs = App.register_component(DelayAction.new(template_arg)) type = DelayAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config, arg_type, uint32): yield add(action.set_delay(template_)) yield action elif key == CONF_LAMBDA: for lambda_ in process_lambda(config, [(arg_type, 'x')]): yield None rhs = LambdaAction.new(template_arg, lambda_) type = LambdaAction.template(template_arg) yield Pvariable(action_id, rhs, type=type) elif key == CONF_MQTT_PUBLISH: rhs = App.Pget_mqtt_client().Pmake_publish_action(template_arg) type = mqtt.MQTTPublishAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_TOPIC], arg_type, std_string): yield None add(action.set_topic(template_)) for template_ in templatable(config[CONF_PAYLOAD], arg_type, std_string): yield None add(action.set_payload(template_)) if CONF_QOS in config: for template_ in templatable(config[CONF_QOS], arg_type, uint8): yield add(action.set_qos(template_)) if CONF_RETAIN in config: for template_ in templatable(config[CONF_RETAIN], arg_type, bool_): yield None add(action.set_retain(template_)) yield action elif key == CONF_LIGHT_TOGGLE: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = light.ToggleAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_TRANSITION_LENGTH in config: for template_ in templatable(config[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) yield action elif key == CONF_LIGHT_TURN_OFF: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = light.TurnOffAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_TRANSITION_LENGTH in config: for template_ in templatable(config[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) yield action elif key == CONF_LIGHT_TURN_ON: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = light.TurnOnAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_TRANSITION_LENGTH in config: for template_ in templatable(config[CONF_TRANSITION_LENGTH], arg_type, uint32): yield None add(action.set_transition_length(template_)) if CONF_FLASH_LENGTH in config: for template_ in templatable(config[CONF_FLASH_LENGTH], arg_type, uint32): yield None add(action.set_flash_length(template_)) if CONF_BRIGHTNESS in config: for template_ in templatable(config[CONF_BRIGHTNESS], arg_type, float_): yield None add(action.set_brightness(template_)) if CONF_RED in config: for template_ in templatable(config[CONF_RED], arg_type, float_): yield None add(action.set_red(template_)) if CONF_GREEN in config: for template_ in templatable(config[CONF_GREEN], arg_type, float_): yield None add(action.set_green(template_)) if CONF_BLUE in config: for template_ in templatable(config[CONF_BLUE], arg_type, float_): yield None add(action.set_blue(template_)) if CONF_WHITE in config: for template_ in templatable(config[CONF_WHITE], arg_type, float_): yield None add(action.set_white(template_)) if CONF_COLOR_TEMPERATURE in config: for template_ in templatable(config[CONF_COLOR_TEMPERATURE], arg_type, float_): yield None add(action.set_color_temperature(template_)) if CONF_EFFECT in config: for template_ in templatable(config[CONF_EFFECT], arg_type, std_string): yield None add(action.set_effect(template_)) yield action elif key == CONF_SWITCH_TOGGLE: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = switch.ToggleAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_SWITCH_TURN_OFF: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = switch.TurnOffAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_SWITCH_TURN_ON: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = switch.TurnOnAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_COVER_OPEN: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_open_action(template_arg) type = cover.OpenAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_COVER_CLOSE: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_close_action(template_arg) type = cover.CloseAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_COVER_STOP: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_stop_action(template_arg) type = cover.StopAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_FAN_TOGGLE: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_toggle_action(template_arg) type = fan.ToggleAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_FAN_TURN_OFF: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = fan.TurnOffAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_FAN_TURN_ON: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = fan.TurnOnAction.template(arg_type) action = Pvariable(action_id, rhs, type=type) if CONF_OSCILLATING in config: for template_ in templatable(config[CONF_OSCILLATING], arg_type, bool_): yield None add(action.set_oscillating(template_)) if CONF_SPEED in config: for template_ in templatable(config[CONF_SPEED], arg_type, fan.FanSpeed): yield None add(action.set_speed(template_)) yield action elif key == CONF_OUTPUT_TURN_OFF: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_off_action(template_arg) type = output.TurnOffAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_OUTPUT_TURN_ON: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_turn_on_action(template_arg) type = output.TurnOnAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_OUTPUT_SET_LEVEL: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_set_level_action(template_arg) type = output.SetLevelAction.template(arg_type) action = Pvariable(action_id, rhs, type=type) for template_ in templatable(config[CONF_LEVEL], arg_type, bool_): yield None add(action.set_level(template_)) yield action elif key == CONF_IF: for conditions in build_conditions(config[CONF_CONDITION], arg_type): yield None rhs = IfAction.new(template_arg, conditions) type = IfAction.template(template_arg) action = Pvariable(action_id, rhs, type=type) if CONF_THEN in config: for actions in build_actions(config[CONF_THEN], arg_type): yield None add(action.add_then(actions)) if CONF_ELSE in config: for actions in build_actions(config[CONF_ELSE], arg_type): yield None add(action.add_else(actions)) yield action elif key == CONF_DEEP_SLEEP_ENTER: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_enter_deep_sleep_action(template_arg) type = deep_sleep.EnterDeepSleepAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) elif key == CONF_DEEP_SLEEP_PREVENT: for var in get_variable(config[CONF_ID]): yield None rhs = var.make_prevent_deep_sleep_action(template_arg) type = deep_sleep.PreventDeepSleepAction.template(arg_type) yield Pvariable(action_id, rhs, type=type) else: raise ESPHomeYAMLError(u"Unsupported action {}".format(config))