Esempio n. 1
0
async def canbus_action_to_code(config, action_id, template_arg, args):
    var = cg.new_Pvariable(action_id, template_arg)
    await cg.register_parented(var, config[CONF_CANBUS_ID])

    if CONF_CAN_ID in config:
        can_id = await cg.templatable(config[CONF_CAN_ID], args, cg.uint32)
        cg.add(var.set_can_id(can_id))
    use_extended_id = await cg.templatable(config[CONF_USE_EXTENDED_ID], args,
                                           cg.uint32)
    cg.add(var.set_use_extended_id(use_extended_id))

    remote_transmission_request = await cg.templatable(
        config[CONF_REMOTE_TRANSMISSION_REQUEST], args, bool)
    cg.add(var.set_remote_transmission_request(remote_transmission_request))

    data = config[CONF_DATA]
    if isinstance(data, bytes):
        data = [int(x) for x in data]
    if cg.is_template(data):
        templ = await cg.templatable(data, args,
                                     cg.std_vector.template(cg.uint8))
        cg.add(var.set_data_template(templ))
    else:
        cg.add(var.set_data_static(data))
    return var
Esempio n. 2
0
def register_rs485_device(var, config):
    paren = yield cg.get_variable(config[CONF_RS485_ID])
    cg.add(paren.register_listener(var))
    yield var

    device = yield state_hex_expression(config[CONF_DEVICE])
    cg.add(var.set_device(device))

    if CONF_SUB_DEVICE in config:
        sub_device = yield state_hex_expression(config[CONF_SUB_DEVICE])
        cg.add(var.set_sub_device(sub_device))

    if CONF_STATE_ON in config:
        state_on = yield state_hex_expression(config[CONF_STATE_ON])
        cg.add(var.set_state_on(state_on))

    if CONF_STATE_OFF in config:
        state_off = yield state_hex_expression(config[CONF_STATE_OFF])
        cg.add(var.set_state_off(state_off))

    if CONF_COMMAND_ON in config:
        data = config[CONF_COMMAND_ON]
        if cg.is_template(data):
            command_on = yield cg.templatable(data, [], cmd_hex_t)
            cg.add(var.set_command_on(command_on))
        else:
            command_on = yield command_hex_expression(config[CONF_COMMAND_ON])
            cg.add(var.set_command_on(command_on))

    if CONF_COMMAND_OFF in config:
        data = config[CONF_COMMAND_OFF]
        if cg.is_template(data):
            command_off = yield cg.templatable(data, [], cmd_hex_t)
            cg.add(var.set_command_off(command_off))
        else:
            command_off = yield command_hex_expression(
                config[CONF_COMMAND_OFF])
            cg.add(var.set_command_off(command_off))

    if CONF_COMMAND_STATE in config:
        command_state = yield command_hex_expression(
            config[CONF_COMMAND_STATE])
        cg.add(var.set_command_state(command_state))
Esempio n. 3
0
async def raw_action(var, config, args):
    code_ = config[CONF_CODE]
    if cg.is_template(code_):
        template_ = await cg.templatable(code_, args, cg.std_vector.template(cg.int32))
        cg.add(var.set_code_template(template_))
    else:
        code_ = config[CONF_CODE]
        arr = cg.progmem_array(config[CONF_CODE_STORAGE_ID], code_)
        cg.add(var.set_code_static(arr, len(code_)))
    templ = await cg.templatable(config[CONF_CARRIER_FREQUENCY], args, cg.uint32)
    cg.add(var.set_carrier_frequency(templ))
Esempio n. 4
0
async def rs485_write_to_code(config, action_id, template_arg, args):
    var = cg.new_Pvariable(action_id, template_arg)
    await cg.register_parented(var, config[CONF_ID])
    data = config[CONF_DATA]

    if cg.is_template(data):
        templ = await cg.templatable(data, args, cmd_hex_t)
        cg.add(var.set_data_template(templ))
    else:
        cmd = await command_hex_expression(config)
        cg.add(var.set_data_static(cmd))
    return var
Esempio n. 5
0
def uart_write_to_code(config, action_id, template_arg, args):
    var = cg.new_Pvariable(action_id, template_arg)
    yield cg.register_parented(var, config[CONF_ID])
    data = config[CONF_DATA]
    if isinstance(data, binary_type):
        data = [char_to_byte(x) for x in data]

    if cg.is_template(data):
        templ = yield cg.templatable(data, args, cg.std_vector.template(cg.uint8))
        cg.add(var.set_data_template(templ))
    else:
        cg.add(var.set_data_static(data))
    yield var
Esempio n. 6
0
async def uart_write_to_code(config, action_id, template_arg, args):
    var = cg.new_Pvariable(action_id, template_arg)
    await cg.register_parented(var, config[CONF_ID])
    data = config[CONF_DATA]
    if isinstance(data, bytes):
        data = list(data)

    if cg.is_template(data):
        templ = await cg.templatable(data, args,
                                     cg.std_vector.template(cg.uint8))
        cg.add(var.set_data_template(templ))
    else:
        cg.add(var.set_data_static(data))
    return var
Esempio n. 7
0
def canbus_action_to_code(config, action_id, template_arg, args):
    validate_id(config[CONF_CAN_ID], config[CONF_USE_EXTENDED_ID])
    var = cg.new_Pvariable(action_id, template_arg)
    yield cg.register_parented(var, config[CONF_CANBUS_ID])

    if CONF_CAN_ID in config:
        can_id = yield cg.templatable(config[CONF_CAN_ID], args, cg.uint32)
        cg.add(var.set_can_id(can_id))

    use_extended_id = yield cg.templatable(config[CONF_USE_EXTENDED_ID], args,
                                           cg.uint32)
    cg.add(var.set_use_extended_id(use_extended_id))

    data = config[CONF_DATA]
    if isinstance(data, bytes):
        data = [int(x) for x in data]
    if cg.is_template(data):
        templ = yield cg.templatable(data, args,
                                     cg.std_vector.template(cg.uint8))
        cg.add(var.set_data_template(templ))
    else:
        cg.add(var.set_data_static(data))
    yield var
Esempio n. 8
0
async def to_code(config):
    var = cg.new_Pvariable(config[CONF_ID])
    await cg.register_component(var, config)
    await climate.register_climate(var, config)
    await rs485.register_rs485_device(var, config)

    templ = await cg.templatable(config[CONF_COMMAND_TEMPERATURE],
                                 [(cg.float_.operator('const'), 'x')],
                                 cmd_hex_t)
    cg.add(var.set_command_temperature(templ))

    state = config[CONF_STATE_TARGET]
    if cg.is_template(state):
        templ = await cg.templatable(state, [(uint8_ptr_const, 'data'),
                                             (num_t_const, 'len')], cg.float_)
        cg.add(var.set_state_target(templ))
    else:
        args = state[CONF_OFFSET], state[CONF_LENGTH], state[CONF_PRECISION]
        cg.add(var.set_state_target(args))

    if CONF_SENSOR in config:
        sens = await cg.get_variable(config[CONF_SENSOR])
        cg.add(var.set_sensor(sens))

    if CONF_STATE_CURRENT in config:
        state = config[CONF_STATE_CURRENT]
        if cg.is_template(state):
            templ = await cg.templatable(state, [(uint8_ptr_const, 'data'),
                                                 (num_t_const, 'len')],
                                         cg.float_)
            cg.add(var.set_state_current(templ))
        else:
            args = state[CONF_OFFSET], state[CONF_LENGTH], state[
                CONF_PRECISION]
            cg.add(var.set_state_current(args))

    if CONF_STATE_AUTO in config:
        args = await state_hex_expression(config[CONF_STATE_AUTO])
        cg.add(var.set_state_auto(args))

    if CONF_STATE_HEAT in config:
        args = await state_hex_expression(config[CONF_STATE_HEAT])
        cg.add(var.set_state_heat(args))

    if CONF_STATE_COOL in config:
        args = await state_hex_expression(config[CONF_STATE_COOL])
        cg.add(var.set_state_cool(args))

    if CONF_STATE_AWAY in config:
        args = await state_hex_expression(config[CONF_STATE_AWAY])
        cg.add(var.set_state_away(args))

    if CONF_COMMAND_AUTO in config:
        args = await command_hex_expression(config[CONF_COMMAND_AUTO])
        cg.add(var.set_command_auto(args))

    if CONF_COMMAND_HEAT in config:
        args = await command_hex_expression(config[CONF_COMMAND_HEAT])
        cg.add(var.set_command_heat(args))

    if CONF_COMMAND_COOL in config:
        args = await command_hex_expression(config[CONF_COMMAND_COOL])
        cg.add(var.set_command_cool(args))

    if CONF_COMMAND_AWAY in config:
        args = await command_hex_expression(config[CONF_COMMAND_AWAY])
        cg.add(var.set_command_away(args))
Esempio n. 9
0
async def to_code(config):
    cg.add_global(rs485_ns.using)
    var = cg.new_Pvariable(config[CONF_ID], config[CONF_BAUD_RATE],
                           config[CONF_DATA_BITS], config[CONF_PARITY],
                           config[CONF_STOP_BITS], config[CONF_RX_WAIT])
    await cg.register_component(var, config)

    if CONF_TX_INTERVAL in config:
        cg.add(var.set_tx_interval(config[CONF_TX_INTERVAL]))
    if CONF_TX_WAIT in config:
        cg.add(var.set_tx_wait(config[CONF_TX_WAIT]))
    if CONF_TX_RETRY_CNT in config:
        cg.add(var.set_tx_retry_cnt(config[CONF_TX_RETRY_CNT]))

    if CONF_CTRL_PIN in config:
        pin = await cg.gpio_pin_expression(config[CONF_CTRL_PIN])
        cg.add(var.set_ctrl_pin(pin))

    if CONF_PREFIX in config:
        cg.add(var.set_prefix(config[CONF_PREFIX]))
    if CONF_SUFFIX in config:
        cg.add(var.set_suffix(config[CONF_SUFFIX]))

    if CONF_CHECKSUM_LAMBDA in config:
        _LOGGER.warning(
            CONF_CHECKSUM_LAMBDA +
            " is deprecated and will be removed in a future version.")
        template_ = await cg.process_lambda(config[CONF_CHECKSUM_LAMBDA],
                                            [(uint8_ptr_const, 'data'),
                                             (num_t_const, 'len')],
                                            return_type=cg.uint8)
        cg.add(var.set_checksum_lambda(template_))
    if CONF_CHECKSUM in config:
        data = config[CONF_CHECKSUM]
        if cg.is_template(data):
            template_ = await cg.process_lambda(data,
                                                [(uint8_ptr_const, 'data'),
                                                 (num_t_const, 'len')],
                                                return_type=cg.uint8)
            cg.add(var.set_checksum_lambda(template_))
        else:
            cg.add(var.set_checksum(data))

    if CONF_CHECKSUM2 in config:
        data = config[CONF_CHECKSUM2]
        if cg.is_template(data):
            template_ = await cg.process_lambda(data,
                                                [(uint8_ptr_const, 'data'),
                                                 (num_t_const, 'len'),
                                                 (uint8_const, 'checksum1')],
                                                return_type=cg.uint8)
            cg.add(var.set_checksum2_lambda(template_))
        else:
            cg.add(var.set_checksum2(data))

    if CONF_STATE_RESPONSE in config:
        state_response = await state_hex_expression(config[CONF_STATE_RESPONSE]
                                                    )
        cg.add(var.set_state_response(state_response))

    if CONF_PACKET_MONITOR in config:
        sm = cg.new_Pvariable(config[CONF_PACKET_MONITOR_ID])
        await sm
        for conf in config[CONF_PACKET_MONITOR]:
            data = conf[CONF_DATA]
            and_operator = conf[CONF_AND_OPERATOR]
            inverted = conf[CONF_INVERTED]
            offset = conf[CONF_OFFSET]
            cg.add(sm.add_filter([offset, and_operator, inverted, data]))
        cg.add(var.register_listener(sm))