mirror of
https://github.com/esphome/esphome.git
synced 2024-11-28 12:46:22 +01:00
Allow multiple MAC addresses for 'on_ble_advertise' filter (#4773)
This commit is contained in:
parent
302dea4169
commit
5f0892dec4
@ -167,7 +167,7 @@ CONFIG_SCHEMA = cv.Schema(
|
|||||||
cv.Optional(CONF_ON_BLE_ADVERTISE): automation.validate_automation(
|
cv.Optional(CONF_ON_BLE_ADVERTISE): automation.validate_automation(
|
||||||
{
|
{
|
||||||
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ESPBTAdvertiseTrigger),
|
cv.GenerateID(CONF_TRIGGER_ID): cv.declare_id(ESPBTAdvertiseTrigger),
|
||||||
cv.Optional(CONF_MAC_ADDRESS): cv.mac_address,
|
cv.Optional(CONF_MAC_ADDRESS): cv.ensure_list(cv.mac_address),
|
||||||
}
|
}
|
||||||
),
|
),
|
||||||
cv.Optional(CONF_ON_BLE_SERVICE_DATA_ADVERTISE): automation.validate_automation(
|
cv.Optional(CONF_ON_BLE_SERVICE_DATA_ADVERTISE): automation.validate_automation(
|
||||||
@ -223,7 +223,10 @@ async def to_code(config):
|
|||||||
for conf in config.get(CONF_ON_BLE_ADVERTISE, []):
|
for conf in config.get(CONF_ON_BLE_ADVERTISE, []):
|
||||||
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||||
if CONF_MAC_ADDRESS in conf:
|
if CONF_MAC_ADDRESS in conf:
|
||||||
cg.add(trigger.set_address(conf[CONF_MAC_ADDRESS].as_hex))
|
addr_list = []
|
||||||
|
for it in conf[CONF_MAC_ADDRESS]:
|
||||||
|
addr_list.append(it.as_hex)
|
||||||
|
cg.add(trigger.set_addresses(addr_list))
|
||||||
await automation.build_automation(trigger, [(ESPBTDeviceConstRef, "x")], conf)
|
await automation.build_automation(trigger, [(ESPBTDeviceConstRef, "x")], conf)
|
||||||
for conf in config.get(CONF_ON_BLE_SERVICE_DATA_ADVERTISE, []):
|
for conf in config.get(CONF_ON_BLE_SERVICE_DATA_ADVERTISE, []):
|
||||||
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
trigger = cg.new_Pvariable(conf[CONF_TRIGGER_ID], var)
|
||||||
|
@ -10,18 +10,22 @@ namespace esp32_ble_tracker {
|
|||||||
class ESPBTAdvertiseTrigger : public Trigger<const ESPBTDevice &>, public ESPBTDeviceListener {
|
class ESPBTAdvertiseTrigger : public Trigger<const ESPBTDevice &>, public ESPBTDeviceListener {
|
||||||
public:
|
public:
|
||||||
explicit ESPBTAdvertiseTrigger(ESP32BLETracker *parent) { parent->register_listener(this); }
|
explicit ESPBTAdvertiseTrigger(ESP32BLETracker *parent) { parent->register_listener(this); }
|
||||||
void set_address(uint64_t address) { this->address_ = address; }
|
void set_addresses(const std::vector<uint64_t> &addresses) { this->address_vec_ = addresses; }
|
||||||
|
|
||||||
bool parse_device(const ESPBTDevice &device) override {
|
bool parse_device(const ESPBTDevice &device) override {
|
||||||
if (this->address_ && device.address_uint64() != this->address_) {
|
uint64_t u64_addr = device.address_uint64();
|
||||||
|
if (!address_vec_.empty()) {
|
||||||
|
if (std::find(address_vec_.begin(), address_vec_.end(), u64_addr) == address_vec_.end()) {
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
this->trigger(device);
|
this->trigger(device);
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
uint64_t address_ = 0;
|
std::vector<uint64_t> address_vec_;
|
||||||
};
|
};
|
||||||
|
|
||||||
class BLEServiceDataAdvertiseTrigger : public Trigger<const adv_data_t &>, public ESPBTDeviceListener {
|
class BLEServiceDataAdvertiseTrigger : public Trigger<const adv_data_t &>, public ESPBTDeviceListener {
|
||||||
|
@ -488,6 +488,14 @@ binary_sensor:
|
|||||||
|
|
||||||
esp32_ble_tracker:
|
esp32_ble_tracker:
|
||||||
on_ble_advertise:
|
on_ble_advertise:
|
||||||
|
- mac_address:
|
||||||
|
- AA:BB:CC:DD:EE:FF
|
||||||
|
- FF:EE:DD:CC:BB:AA
|
||||||
|
then:
|
||||||
|
# yamllint disable rule:line-length
|
||||||
|
- lambda: !lambda |-
|
||||||
|
ESP_LOGD("main", "The device address (%s) exists in list", x.address_str().c_str());
|
||||||
|
# yamllint enable rule:line-length
|
||||||
- mac_address: AC:37:43:77:5F:4C
|
- mac_address: AC:37:43:77:5F:4C
|
||||||
then:
|
then:
|
||||||
# yamllint disable rule:line-length
|
# yamllint disable rule:line-length
|
||||||
|
Loading…
Reference in New Issue
Block a user