def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) yield cg.register_component(var, config) cg.add(var.set_port(config[CONF_PORT])) cg.add(var.set_password(config[CONF_PASSWORD])) cg.add(var.set_reboot_timeout(config[CONF_REBOOT_TIMEOUT])) for conf in config.get(CONF_SERVICES, []): template_args = [] func_args = [] service_type_args = [] for name, var_ in conf[CONF_VARIABLES].items(): native = SERVICE_ARG_NATIVE_TYPES[var_] template_args.append(native) func_args.append((native, name)) service_type_args.append( ServiceTypeArgument(name, SERVICE_ARG_TYPES[var_])) templ = cg.TemplateArguments(*template_args) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], templ, conf[CONF_SERVICE], service_type_args) cg.add(var.register_user_service(trigger)) yield automation.build_automation(trigger, func_args, conf) cg.add_define('USE_API') if CORE.is_esp32: cg.add_library('AsyncTCP', '1.0.3') elif CORE.is_esp8266: cg.add_library('ESPAsyncTCP', '1.2.0')
async def build_automation(trigger, args, config): arg_types = [arg[0] for arg in args] templ = cg.TemplateArguments(*arg_types) obj = cg.new_Pvariable(config[CONF_AUTOMATION_ID], templ, trigger) actions = await build_action_list(config[CONF_THEN], templ, args) cg.add(obj.add_actions(actions)) return obj
async def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) await cg.register_component(var, config) cg.add(var.set_port(config[CONF_PORT])) cg.add(var.set_password(config[CONF_PASSWORD])) cg.add(var.set_reboot_timeout(config[CONF_REBOOT_TIMEOUT])) for conf in config.get(CONF_SERVICES, []): template_args = [] func_args = [] service_arg_names = [] for name, var_ in conf[CONF_VARIABLES].items(): native = SERVICE_ARG_NATIVE_TYPES[var_] template_args.append(native) func_args.append((native, name)) service_arg_names.append(name) templ = cg.TemplateArguments(*template_args) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], templ, conf[CONF_SERVICE], service_arg_names) cg.add(var.register_user_service(trigger)) await automation.build_automation(trigger, func_args, conf) if CONF_ENCRYPTION in config: conf = config[CONF_ENCRYPTION] decoded = base64.b64decode(conf[CONF_KEY]) cg.add(var.set_noise_psk(list(decoded))) cg.add_define("USE_API_NOISE") cg.add_library("esphome/noise-c", "0.1.4") else: cg.add_define("USE_API_PLAINTEXT") cg.add_define("USE_API") cg.add_global(api_ns.using)
def to_code(config): var = cg.new_Pvariable(config[CONF_ID]) yield cg.register_component(var, config) cg.add(var.set_port(config[CONF_PORT])) cg.add(var.set_password(config[CONF_PASSWORD])) cg.add(var.set_reboot_timeout(config[CONF_REBOOT_TIMEOUT])) for conf in config.get(CONF_SERVICES, []): template_args = [] func_args = [] service_arg_names = [] for name, var_ in conf[CONF_VARIABLES].items(): native = SERVICE_ARG_NATIVE_TYPES[var_] template_args.append(native) func_args.append((native, name)) service_arg_names.append(name) templ = cg.TemplateArguments(*template_args) trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], templ, conf[CONF_SERVICE], service_arg_names) cg.add(var.register_user_service(trigger)) yield automation.build_automation(trigger, func_args, conf) cg.add_define('USE_API') cg.add_global(api_ns.using)
def publish_to_code(config, action_id, template_arg, args): component = yield cg.get_variable(CORE.config["esp_net"][ehc.CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, component) ActionPtr = Publish.template(template_arg).operator('ptr') args = args + [(ActionPtr, 'publish')] template_arg = cg.TemplateArguments(*[arg[0] for arg in args]) yield var
def send_action_to_code(config, action_id, template_arg, args): component = yield cg.get_variable(CORE.config[c.CONF_WIFI_NOW][ehc.CONF_ID]) var = cg.new_Pvariable(action_id, template_arg, component) if c.CONF_PEERID in config: peer = yield cg.get_variable(config[c.CONF_PEERID]) cg.add(var.set_peer(peer)) if ehc.CONF_SERVICE in config: cg.add(var.set_servicekey(get_md5sum_hexint(config[ehc.CONF_SERVICE], 7))) if c.CONF_SERVICEKEY in config: cg.add(var.set_servicekey(*config[c.CONF_SERVICEKEY].to_hex_int())) if config.get(c.CONF_PAYLOADS): payload_getters = yield build_payload_getter_list( config[c.CONF_PAYLOADS], template_arg, args ) cg.add(var.set_payload_getters(payload_getters)) ActionPtr = t.SendAction.template(template_arg).operator('ptr') args = args + [(ActionPtr, 'sendaction')] template_arg = cg.TemplateArguments(*[arg[0] for arg in args]) if c.CONF_ON_FAIL in config: actions = yield automation.build_action_list(config[c.CONF_ON_FAIL], template_arg, args) cg.add(var.add_on_fail(actions)) if c.CONF_ON_SUCCESS in config: actions = yield automation.build_action_list(config[c.CONF_ON_SUCCESS], template_arg, args) cg.add(var.add_on_success(actions)) yield var
def globals_set_to_code(config, action_id, template_arg, args): full_id, paren = yield cg.get_variable_with_full_id(config[CONF_ID]) template_arg = cg.TemplateArguments(full_id.type, *template_arg) var = cg.new_Pvariable(action_id, template_arg, paren) templ = yield cg.templatable(config[CONF_VALUE], args, None) cg.add(var.set_value(templ)) yield var
def templated_payload_getter_to_code(type, config, payload_id, template_arg, args): template_arg = cg.TemplateArguments(type, *[arg[0] for arg in args]) var = cg.new_Pvariable(payload_id, template_arg, args) template = yield cg.templatable(config[ehc.CONF_VALUE], args, type) cg.add(var.set_value(template)) yield var
def for_condition_to_code(config, condition_id, template_arg, args): condition = yield build_condition(config[CONF_CONDITION], cg.TemplateArguments(), []) var = cg.new_Pvariable(condition_id, template_arg, condition) yield cg.register_component(var, config) templ = yield cg.templatable(config[CONF_TIME], args, cg.uint32) cg.add(var.set_time(templ)) yield var
def exp_mqtt_message(config): if config is None: return cg.optional(cg.TemplateArguments(MQTTMessage)) exp = cg.StructInitializer(MQTTMessage, ('topic', config[CONF_TOPIC]), ('payload', config.get(CONF_PAYLOAD, "")), ('qos', config[CONF_QOS]), ('retain', config[CONF_RETAIN])) return exp
async def to_code(config): var = await fastled_base.new_fastled_light(config) rgb_order = None if CONF_RGB_ORDER in config: rgb_order = cg.RawExpression(config[CONF_RGB_ORDER]) template_args = cg.TemplateArguments( cg.RawExpression(config[CONF_CHIPSET]), config[CONF_PIN], rgb_order) cg.add(var.add_leds(template_args, config[CONF_NUM_LEDS]))
async def globals_set_to_code(config, action_id, template_arg, args): full_id, paren = await cg.get_variable_with_full_id(config[CONF_ID]) template_arg = cg.TemplateArguments(full_id.type, *template_arg) var = cg.new_Pvariable(action_id, template_arg, paren) templ = await cg.templatable( config[CONF_VALUE], args, None, to_exp=cg.RawExpression ) cg.add(var.set_value(templ)) return var
def to_code(config): var = yield new_fastled_matrix(config) rgb_order = None if CONF_RGB_ORDER in config: rgb_order = cg.RawExpression(config[CONF_RGB_ORDER]) template_args = cg.TemplateArguments( cg.RawExpression(config[CONF_CHIPSET]), config[CONF_PIN], rgb_order) cg.add(var.add_leds(template_args, config[CONF_NUM_LEDS])) cg.add( var.set_matrix(config[CONF_WIDTH], config[CONF_HEIGHT], sum([MATRIX_TYPE[i] for i in config[CONF_TYPE]]))) cg.add(var.set_max_current(config[CONF_MAX_CURRENT])) cg.add(var.set_max_brightness(config[CONF_MAX_BRIGHTNESS])) cg.add(var.set_rotation(config[CONF_ROTATION]))
def to_code(config): var = yield fastled_base.new_fastled_light(config) rgb_order = cg.RawExpression(config[CONF_RGB_ORDER] if CONF_RGB_ORDER in config else "RGB") data_rate = None if CONF_DATA_RATE in config: data_rate_khz = int(config[CONF_DATA_RATE] / 1000) if data_rate_khz < 1000: data_rate = cg.RawExpression(f"DATA_RATE_KHZ({data_rate_khz})") else: data_rate_mhz = int(data_rate_khz / 1000) data_rate = cg.RawExpression(f"DATA_RATE_MHZ({data_rate_mhz})") template_args = cg.TemplateArguments(cg.RawExpression(config[CONF_CHIPSET]), config[CONF_DATA_PIN], config[CONF_CLOCK_PIN], rgb_order, data_rate) cg.add(var.add_leds(template_args, config[CONF_NUM_LEDS]))
def receive_trigger_to_code(component, config): var = cg.new_Pvariable(config[ehc.CONF_TRIGGER_ID], component) if c.CONF_PEERID in config: peer = yield cg.get_variable(config[c.CONF_PEERID]) cg.add(var.set_peer(peer)) if ehc.CONF_SERVICE in config: cg.add( var.set_servicekey(get_md5sum_hexint(config[ehc.CONF_SERVICE], 7))) if c.CONF_SERVICEKEY in config: cg.add(var.set_servicekey(*config[c.CONF_SERVICEKEY].to_hex_int())) payload_setters = yield build_payload_setter_list(config[c.CONF_PAYLOADS], cg.TemplateArguments([]), []) cg.add(var.set_payload_setters(payload_setters)) yield automation.build_automation(var, [], config) yield cg.register_component(var, config) yield var
def to_code(config): type_ = cg.RawExpression(config[CONF_TYPE]) template_args = cg.TemplateArguments(type_) res_type = GlobalsComponent.template(template_args) initial_value = None if CONF_INITIAL_VALUE in config: initial_value = cg.RawExpression(config[CONF_INITIAL_VALUE]) rhs = GlobalsComponent.new(template_args, initial_value) glob = cg.Pvariable(config[CONF_ID], rhs, res_type) yield cg.register_component(glob, config) if config[CONF_RESTORE_VALUE]: value = config[CONF_ID].id if isinstance(value, str): value = value.encode() hash_ = int(hashlib.md5(value).hexdigest()[:8], 16) cg.add(glob.set_restore_value(hash_))
def to_code(config): has_white = 'W' in config[CONF_TYPE] template = cg.TemplateArguments(getattr(cg.global_ns, format_method(config))) if has_white: out_type = NeoPixelRGBWLightOutput.template(template) else: out_type = NeoPixelRGBLightOutput.template(template) rhs = out_type.new() var = cg.Pvariable(config[CONF_OUTPUT_ID], rhs, type=out_type) yield light.register_light(var, config) yield cg.register_component(var, config) if CONF_PIN in config: cg.add(var.add_leds(config[CONF_NUM_LEDS], config[CONF_PIN])) else: cg.add(var.add_leds(config[CONF_NUM_LEDS], config[CONF_CLOCK_PIN], config[CONF_DATA_PIN])) cg.add(var.set_pixel_order(getattr(ESPNeoPixelOrder, config[CONF_TYPE]))) cg.add_library('NeoPixelBus', '2.4.1')
async def to_code(config): has_white = "W" in config[CONF_TYPE] template = cg.TemplateArguments( getattr(cg.global_ns, format_method(config))) if has_white: out_type = NeoPixelRGBWLightOutput.template(template) else: out_type = NeoPixelRGBLightOutput.template(template) rhs = out_type.new() var = cg.Pvariable(config[CONF_OUTPUT_ID], rhs, out_type) await light.register_light(var, config) await cg.register_component(var, config) if CONF_PIN in config: cg.add(var.add_leds(config[CONF_NUM_LEDS], config[CONF_PIN])) else: cg.add( var.add_leds(config[CONF_NUM_LEDS], config[CONF_CLOCK_PIN], config[CONF_DATA_PIN])) cg.add(var.set_pixel_order(getattr(ESPNeoPixelOrder, config[CONF_TYPE]))) # https://github.com/Makuna/NeoPixelBus/blob/master/library.json cg.add_library("NeoPixelBus-esphome", "2.6.2")
def templated_payload_setter_to_code(type, config, payload_id, template_arg, args): template_arg = cg.TemplateArguments(type, *[arg[0] for arg in args]) var = cg.new_Pvariable(payload_id, template_arg, args) yield var