コード例 #1
0
ファイル: __init__.py プロジェクト: zhiqiang-hu/esphome
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')
コード例 #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
コード例 #3
0
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)
コード例 #4
0
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)
コード例 #5
0
ファイル: __init__.py プロジェクト: iphong/hass-config
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
コード例 #6
0
ファイル: send_action.py プロジェクト: iphong/hass-config
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
コード例 #7
0
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
コード例 #8
0
ファイル: payload_getter.py プロジェクト: iphong/hass-config
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
コード例 #9
0
ファイル: automation.py プロジェクト: zhiqiang-hu/esphome
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
コード例 #10
0
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
コード例 #11
0
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]))
コード例 #12
0
ファイル: __init__.py プロジェクト: krahabb/esphome
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
コード例 #13
0
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]))
コード例 #14
0
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]))
コード例 #15
0
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
コード例 #16
0
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_))
コード例 #17
0
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')
コード例 #18
0
ファイル: light.py プロジェクト: ielbury/esphome
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")
コード例 #19
0
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