try add support mac
This commit is contained in:
parent
029df3d807
commit
c8d2c86908
@ -67,11 +67,13 @@ CONFIG_SCHEMA = cv.Schema(
|
|||||||
).extend(cv.COMPONENT_SCHEMA)
|
).extend(cv.COMPONENT_SCHEMA)
|
||||||
|
|
||||||
CONF_IRK = "irk"
|
CONF_IRK = "irk"
|
||||||
|
CONF_MAC = "mac"
|
||||||
|
|
||||||
NIMBLE_DEVICE_LISTENER_SCHEMA = cv.Schema(
|
NIMBLE_DEVICE_LISTENER_SCHEMA = cv.Schema(
|
||||||
{
|
{
|
||||||
cv.GenerateID(CONF_NIMBLE_ID): cv.use_id(NimbleTracker),
|
cv.GenerateID(CONF_NIMBLE_ID): cv.use_id(NimbleTracker),
|
||||||
cv.Optional(CONF_IRK): cv.string,
|
cv.Optional(CONF_IRK): cv.string,
|
||||||
|
cv.Optional(CONF_MAC): cv.string,
|
||||||
},
|
},
|
||||||
cv.has_exactly_one_key(CONF_IRK),
|
cv.has_exactly_one_key(CONF_IRK),
|
||||||
)
|
)
|
||||||
@ -108,3 +110,5 @@ async def register_ble_device(var, config):
|
|||||||
async def device_listener_to_code(var, config):
|
async def device_listener_to_code(var, config):
|
||||||
if CONF_IRK in config:
|
if CONF_IRK in config:
|
||||||
cg.add(var.set_irk(config[CONF_IRK]))
|
cg.add(var.set_irk(config[CONF_IRK]))
|
||||||
|
if CONF_MAC in config:
|
||||||
|
cg.add(var.set_irk(config[CONF_MAC]))
|
||||||
|
@ -19,8 +19,14 @@ namespace esphome
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void NimbleDeviceListener::set_address(std::string address) {
|
||||||
|
this->match_by_ = MATCH_BY_ADDRESS;
|
||||||
|
this->address_ = address;
|
||||||
|
}
|
||||||
|
|
||||||
bool NimbleDeviceListener::parse_event(NimbleTrackerEvent *tracker_event)
|
bool NimbleDeviceListener::parse_event(NimbleTrackerEvent *tracker_event)
|
||||||
{
|
{
|
||||||
|
if (this->match_by_ == MATCH_BY_IRK) {
|
||||||
if (tracker_event->getAddressType() != BLE_ADDR_RANDOM)
|
if (tracker_event->getAddressType() != BLE_ADDR_RANDOM)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
@ -38,6 +44,15 @@ namespace esphome
|
|||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
} else if (this->match_by_ == MATCH_BY_ADDRESS) {
|
||||||
|
auto address = tracker_event->getAddress();
|
||||||
|
|
||||||
|
if (this.address_ == address) {
|
||||||
|
return this->update_state(tracker_event);
|
||||||
|
} else {
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
} // namespace nimble_tracker
|
} // namespace nimble_tracker
|
||||||
|
|
||||||
|
@ -14,6 +14,7 @@ namespace esphome
|
|||||||
public:
|
public:
|
||||||
bool parse_event(NimbleTrackerEvent *tracker_event);
|
bool parse_event(NimbleTrackerEvent *tracker_event);
|
||||||
void set_irk(std::string irk_hex);
|
void set_irk(std::string irk_hex);
|
||||||
|
void set_address(std::stding address);
|
||||||
|
|
||||||
protected:
|
protected:
|
||||||
virtual bool update_state(NimbleTrackerEvent *tracker_event) = 0;
|
virtual bool update_state(NimbleTrackerEvent *tracker_event) = 0;
|
||||||
@ -21,10 +22,12 @@ namespace esphome
|
|||||||
enum MatchType
|
enum MatchType
|
||||||
{
|
{
|
||||||
MATCH_BY_IRK,
|
MATCH_BY_IRK,
|
||||||
|
MATCH_BY_ADDRESS;
|
||||||
};
|
};
|
||||||
MatchType match_by_;
|
MatchType match_by_;
|
||||||
|
|
||||||
uint8_t *irk_;
|
uint8_t *irk_;
|
||||||
|
std::string address_;
|
||||||
};
|
};
|
||||||
|
|
||||||
} // namespace nimble_tracker
|
} // namespace nimble_tracker
|
||||||
|
Loading…
Reference in New Issue
Block a user