mirror of
https://github.com/esphome/esphome.git
synced 2026-06-01 09:25:09 +08:00
[cc1101] actions to change general and tuner settings (#14141)
Co-authored-by: Jonathan Swoboda <154711427+swoboda1337@users.noreply.github.com>
This commit is contained in:
@@ -9,6 +9,7 @@ from esphome.const import (
|
|||||||
CONF_DATA,
|
CONF_DATA,
|
||||||
CONF_FREQUENCY,
|
CONF_FREQUENCY,
|
||||||
CONF_ID,
|
CONF_ID,
|
||||||
|
CONF_VALUE,
|
||||||
CONF_WAIT_TIME,
|
CONF_WAIT_TIME,
|
||||||
)
|
)
|
||||||
from esphome.core import ID
|
from esphome.core import ID
|
||||||
@@ -333,3 +334,94 @@ async def send_packet_action_to_code(config, action_id, template_arg, args):
|
|||||||
arr = cg.static_const_array(arr_id, cg.ArrayInitializer(*data))
|
arr = cg.static_const_array(arr_id, cg.ArrayInitializer(*data))
|
||||||
cg.add(var.set_data_static(arr, len(data)))
|
cg.add(var.set_data_static(arr, len(data)))
|
||||||
return var
|
return var
|
||||||
|
|
||||||
|
|
||||||
|
# Setter action definitions: (setter_name, validator, template_type, enum_map)
|
||||||
|
_SETTER_ACTIONS = [
|
||||||
|
(
|
||||||
|
"set_frequency",
|
||||||
|
cv.All(cv.frequency, cv.float_range(min=300.0e6, max=928.0e6)),
|
||||||
|
float,
|
||||||
|
None,
|
||||||
|
),
|
||||||
|
("set_output_power", cv.float_range(min=-30.0, max=11.0), float, None),
|
||||||
|
("set_modulation_type", cv.enum(MODULATION, upper=False), Modulation, MODULATION),
|
||||||
|
("set_symbol_rate", cv.float_range(min=600, max=500000), float, None),
|
||||||
|
(
|
||||||
|
"set_rx_attenuation",
|
||||||
|
cv.enum(RX_ATTENUATION, upper=False),
|
||||||
|
RxAttenuation,
|
||||||
|
RX_ATTENUATION,
|
||||||
|
),
|
||||||
|
("set_dc_blocking_filter", cv.boolean, bool, None),
|
||||||
|
("set_manchester", cv.boolean, bool, None),
|
||||||
|
(
|
||||||
|
"set_filter_bandwidth",
|
||||||
|
cv.All(cv.frequency, cv.float_range(min=58000, max=812000)),
|
||||||
|
float,
|
||||||
|
None,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"set_fsk_deviation",
|
||||||
|
cv.All(cv.frequency, cv.float_range(min=1500, max=381000)),
|
||||||
|
float,
|
||||||
|
None,
|
||||||
|
),
|
||||||
|
("set_msk_deviation", cv.int_range(min=1, max=8), cg.uint8, None),
|
||||||
|
("set_channel", cv.uint8_t, cg.uint8, None),
|
||||||
|
(
|
||||||
|
"set_channel_spacing",
|
||||||
|
cv.All(cv.frequency, cv.float_range(min=25000, max=405000)),
|
||||||
|
float,
|
||||||
|
None,
|
||||||
|
),
|
||||||
|
(
|
||||||
|
"set_if_frequency",
|
||||||
|
cv.All(cv.frequency, cv.float_range(min=25000, max=788000)),
|
||||||
|
float,
|
||||||
|
None,
|
||||||
|
),
|
||||||
|
]
|
||||||
|
|
||||||
|
|
||||||
|
def _register_setter_actions():
|
||||||
|
for setter_name, validator, templ_type, enum_map in _SETTER_ACTIONS:
|
||||||
|
class_name = (
|
||||||
|
"".join(word.capitalize() for word in setter_name.split("_")) + "Action"
|
||||||
|
)
|
||||||
|
action_cls = ns.class_(
|
||||||
|
class_name, automation.Action, cg.Parented.template(CC1101Component)
|
||||||
|
)
|
||||||
|
schema = cv.maybe_simple_value(
|
||||||
|
{
|
||||||
|
cv.GenerateID(): cv.use_id(CC1101Component),
|
||||||
|
cv.Required(CONF_VALUE): cv.templatable(validator),
|
||||||
|
},
|
||||||
|
key=CONF_VALUE,
|
||||||
|
)
|
||||||
|
|
||||||
|
async def _setter_action_to_code(
|
||||||
|
config,
|
||||||
|
action_id,
|
||||||
|
template_arg,
|
||||||
|
args,
|
||||||
|
_setter=setter_name,
|
||||||
|
_type=templ_type,
|
||||||
|
_map=enum_map,
|
||||||
|
):
|
||||||
|
var = cg.new_Pvariable(action_id, template_arg)
|
||||||
|
await cg.register_parented(var, config[CONF_ID])
|
||||||
|
data = config[CONF_VALUE]
|
||||||
|
if cg.is_template(data):
|
||||||
|
templ_ = await cg.templatable(data, args, _type)
|
||||||
|
cg.add(getattr(var, _setter)(templ_))
|
||||||
|
else:
|
||||||
|
cg.add(getattr(var, _setter)(_map[data] if _map else data))
|
||||||
|
return var
|
||||||
|
|
||||||
|
automation.register_action(f"cc1101.{setter_name}", action_cls, schema)(
|
||||||
|
_setter_action_to_code
|
||||||
|
)
|
||||||
|
|
||||||
|
|
||||||
|
_register_setter_actions()
|
||||||
|
|||||||
@@ -161,4 +161,82 @@ template<typename... Ts> class SendPacketAction : public Action<Ts...>, public P
|
|||||||
size_t data_static_len_{0};
|
size_t data_static_len_{0};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetSymbolRateAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, symbol_rate)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_symbol_rate(this->symbol_rate_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetFrequencyAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, frequency)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_frequency(this->frequency_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetOutputPowerAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, output_power)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_output_power(this->output_power_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetModulationTypeAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(Modulation, modulation_type)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_modulation_type(this->modulation_type_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetRxAttenuationAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(RxAttenuation, rx_attenuation)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_rx_attenuation(this->rx_attenuation_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetDcBlockingFilterAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(bool, dc_blocking_filter)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_dc_blocking_filter(this->dc_blocking_filter_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetManchesterAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(bool, manchester)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_manchester(this->manchester_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetFilterBandwidthAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, filter_bandwidth)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_filter_bandwidth(this->filter_bandwidth_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetFskDeviationAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, fsk_deviation)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_fsk_deviation(this->fsk_deviation_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetMskDeviationAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(uint8_t, msk_deviation)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_msk_deviation(this->msk_deviation_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetChannelAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(uint8_t, channel)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_channel(this->channel_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetChannelSpacingAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, channel_spacing)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_channel_spacing(this->channel_spacing_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
|
template<typename... Ts> class SetIfFrequencyAction : public Action<Ts...>, public Parented<CC1101Component> {
|
||||||
|
public:
|
||||||
|
TEMPLATABLE_VALUE(float, if_frequency)
|
||||||
|
void play(const Ts &...x) override { this->parent_->set_if_frequency(this->if_frequency_.value(x...)); }
|
||||||
|
};
|
||||||
|
|
||||||
} // namespace esphome::cc1101
|
} // namespace esphome::cc1101
|
||||||
|
|||||||
@@ -35,3 +35,99 @@ button:
|
|||||||
data: [0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef]
|
data: [0x12, 0x34, 0x56, 0x78, 0x90, 0xab, 0xcd, 0xef]
|
||||||
- cc1101.send_packet: !lambda |-
|
- cc1101.send_packet: !lambda |-
|
||||||
return {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
|
return {0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08};
|
||||||
|
|
||||||
|
- cc1101.set_frequency: !lambda |-
|
||||||
|
return 433.91e6;
|
||||||
|
- cc1101.set_frequency:
|
||||||
|
value: "433.91MHz"
|
||||||
|
- cc1101.set_frequency:
|
||||||
|
value: 433911000
|
||||||
|
- cc1101.set_frequency: 433912000
|
||||||
|
|
||||||
|
- cc1101.set_output_power: !lambda |-
|
||||||
|
return -29.9;
|
||||||
|
- cc1101.set_output_power:
|
||||||
|
value: "-28"
|
||||||
|
- cc1101.set_output_power:
|
||||||
|
value: 10
|
||||||
|
- cc1101.set_output_power: 11
|
||||||
|
|
||||||
|
- cc1101.set_modulation_type: !lambda |-
|
||||||
|
return cc1101::Modulation::MODULATION_2_FSK;
|
||||||
|
- cc1101.set_modulation_type:
|
||||||
|
value: "4-FSK"
|
||||||
|
- cc1101.set_modulation_type: "GFSK"
|
||||||
|
|
||||||
|
- cc1101.set_symbol_rate: !lambda |-
|
||||||
|
return 6000.0;
|
||||||
|
- cc1101.set_symbol_rate:
|
||||||
|
value: "7000.0"
|
||||||
|
- cc1101.set_symbol_rate:
|
||||||
|
value: 8000.0
|
||||||
|
- cc1101.set_symbol_rate: 9000
|
||||||
|
|
||||||
|
- cc1101.set_rx_attenuation: !lambda |-
|
||||||
|
return cc1101::RxAttenuation::RX_ATTENUATION_0DB;
|
||||||
|
- cc1101.set_rx_attenuation:
|
||||||
|
value: "6dB"
|
||||||
|
- cc1101.set_rx_attenuation: "12dB"
|
||||||
|
|
||||||
|
- cc1101.set_dc_blocking_filter: !lambda |-
|
||||||
|
return false;
|
||||||
|
- cc1101.set_dc_blocking_filter:
|
||||||
|
value: true
|
||||||
|
- cc1101.set_dc_blocking_filter: false
|
||||||
|
|
||||||
|
- cc1101.set_manchester: !lambda |-
|
||||||
|
return false;
|
||||||
|
- cc1101.set_manchester:
|
||||||
|
value: true
|
||||||
|
- cc1101.set_manchester: false
|
||||||
|
|
||||||
|
- cc1101.set_filter_bandwidth: !lambda |-
|
||||||
|
return 58e3;
|
||||||
|
- cc1101.set_filter_bandwidth:
|
||||||
|
value: "59kHz"
|
||||||
|
- cc1101.set_filter_bandwidth:
|
||||||
|
value: 60000
|
||||||
|
- cc1101.set_filter_bandwidth: "61kHz"
|
||||||
|
|
||||||
|
- cc1101.set_fsk_deviation: !lambda |-
|
||||||
|
return 1.5e3;
|
||||||
|
- cc1101.set_fsk_deviation:
|
||||||
|
value: "1.6kHz"
|
||||||
|
- cc1101.set_fsk_deviation:
|
||||||
|
value: 1700
|
||||||
|
- cc1101.set_fsk_deviation: "1.8kHz"
|
||||||
|
|
||||||
|
- cc1101.set_msk_deviation: !lambda |-
|
||||||
|
return 1;
|
||||||
|
- cc1101.set_msk_deviation:
|
||||||
|
value: "2"
|
||||||
|
- cc1101.set_msk_deviation:
|
||||||
|
value: 3
|
||||||
|
- cc1101.set_msk_deviation: "4"
|
||||||
|
|
||||||
|
- cc1101.set_channel: !lambda |-
|
||||||
|
return 0;
|
||||||
|
- cc1101.set_channel:
|
||||||
|
value: "1"
|
||||||
|
- cc1101.set_channel:
|
||||||
|
value: 3
|
||||||
|
- cc1101.set_channel: 3
|
||||||
|
|
||||||
|
- cc1101.set_channel_spacing: !lambda |-
|
||||||
|
return 25e3;
|
||||||
|
- cc1101.set_channel_spacing:
|
||||||
|
value: "26kHz"
|
||||||
|
- cc1101.set_channel_spacing:
|
||||||
|
value: 27000
|
||||||
|
- cc1101.set_channel_spacing: "28kHz"
|
||||||
|
|
||||||
|
- cc1101.set_if_frequency: !lambda |-
|
||||||
|
return 25e3;
|
||||||
|
- cc1101.set_if_frequency:
|
||||||
|
value: "26kHz"
|
||||||
|
- cc1101.set_if_frequency:
|
||||||
|
value: 27000
|
||||||
|
- cc1101.set_if_frequency: "28kHz"
|
||||||
|
|||||||
Reference in New Issue
Block a user