ESPHome 2025.10.0-dev
Loading...
Searching...
No Matches
automation.h
Go to the documentation of this file.
1#pragma once
2
5
6#ifdef USE_ESP32
7
9#ifdef USE_ESP32_BLE_DEVICE
10class ESPBTAdvertiseTrigger : public Trigger<const ESPBTDevice &>, public ESPBTDeviceListener {
11 public:
12 explicit ESPBTAdvertiseTrigger(ESP32BLETracker *parent) { parent->register_listener(this); }
13 void set_addresses(const std::vector<uint64_t> &addresses) { this->address_vec_ = addresses; }
14
15 bool parse_device(const ESPBTDevice &device) override {
16 uint64_t u64_addr = device.address_uint64();
17 if (!address_vec_.empty()) {
18 if (std::find(address_vec_.begin(), address_vec_.end(), u64_addr) == address_vec_.end()) {
19 return false;
20 }
21 }
22
23 this->trigger(device);
24 return true;
25 }
26
27 protected:
28 std::vector<uint64_t> address_vec_;
29};
30
31class BLEServiceDataAdvertiseTrigger : public Trigger<const adv_data_t &>, public ESPBTDeviceListener {
32 public:
34 void set_address(uint64_t address) { this->address_ = address; }
35 void set_service_uuid16(uint16_t uuid) { this->uuid_ = ESPBTUUID::from_uint16(uuid); }
36 void set_service_uuid32(uint32_t uuid) { this->uuid_ = ESPBTUUID::from_uint32(uuid); }
37 void set_service_uuid128(uint8_t *uuid) { this->uuid_ = ESPBTUUID::from_raw(uuid); }
38
39 bool parse_device(const ESPBTDevice &device) override {
40 if (this->address_ && device.address_uint64() != this->address_) {
41 return false;
42 }
43 for (auto &service_data : device.get_service_datas()) {
44 if (service_data.uuid == this->uuid_) {
45 this->trigger(service_data.data);
46 return true;
47 }
48 }
49 return false;
50 }
51
52 protected:
53 uint64_t address_ = 0;
55};
56
57class BLEManufacturerDataAdvertiseTrigger : public Trigger<const adv_data_t &>, public ESPBTDeviceListener {
58 public:
60 void set_address(uint64_t address) { this->address_ = address; }
61 void set_manufacturer_uuid16(uint16_t uuid) { this->uuid_ = ESPBTUUID::from_uint16(uuid); }
62 void set_manufacturer_uuid32(uint32_t uuid) { this->uuid_ = ESPBTUUID::from_uint32(uuid); }
63 void set_manufacturer_uuid128(uint8_t *uuid) { this->uuid_ = ESPBTUUID::from_raw(uuid); }
64
65 bool parse_device(const ESPBTDevice &device) override {
66 if (this->address_ && device.address_uint64() != this->address_) {
67 return false;
68 }
69 for (auto &manufacturer_data : device.get_manufacturer_datas()) {
70 if (manufacturer_data.uuid == this->uuid_) {
71 this->trigger(manufacturer_data.data);
72 return true;
73 }
74 }
75 return false;
76 }
77
78 protected:
79 uint64_t address_ = 0;
81};
82
83#endif // USE_ESP32_BLE_DEVICE
84
86 public:
87 explicit BLEEndOfScanTrigger(ESP32BLETracker *parent) { parent->register_listener(this); }
88
89#ifdef USE_ESP32_BLE_DEVICE
90 bool parse_device(const ESPBTDevice &device) override { return false; }
91#endif
92 void on_scan_end() override { this->trigger(); }
93};
94
95template<typename... Ts> class ESP32BLEStartScanAction : public Action<Ts...> {
96 public:
98 TEMPLATABLE_VALUE(bool, continuous)
99 void play(Ts... x) override {
100 this->parent_->set_scan_continuous(this->continuous_.value(x...));
101 this->parent_->start_scan();
102 }
103
104 protected:
106};
107
108template<typename... Ts> class ESP32BLEStopScanAction : public Action<Ts...>, public Parented<ESP32BLETracker> {
109 public:
110 void play(Ts... x) override { this->parent_->stop_scan(); }
111};
112
113} // namespace esphome::esp32_ble_tracker
114
115#endif
uint8_t address
Definition bl0906.h:4
virtual void play(Ts... x)=0
Helper class to easily give an object a parent of type T.
Definition helpers.h:697
static ESPBTUUID from_uint32(uint32_t uuid)
Definition ble_uuid.cpp:23
static ESPBTUUID from_uint16(uint16_t uuid)
Definition ble_uuid.cpp:17
static ESPBTUUID from_raw(const uint8_t *data)
Definition ble_uuid.cpp:29
bool parse_device(const ESPBTDevice &device) override
Definition automation.h:90
bool parse_device(const ESPBTDevice &device) override
Definition automation.h:65
bool parse_device(const ESPBTDevice &device) override
Definition automation.h:39
TEMPLATABLE_VALUE(bool, continuous) void play(Ts... x) override
Definition automation.h:98
void register_listener(ESPBTDeviceListener *listener)
void set_addresses(const std::vector< uint64_t > &addresses)
Definition automation.h:13
bool parse_device(const ESPBTDevice &device) override
Definition automation.h:15
const std::vector< ServiceData > & get_service_datas() const
const std::vector< ServiceData > & get_manufacturer_datas() const
uint16_t x
Definition tt21100.cpp:5