mirror of
https://github.com/esphome/esphome.git
synced 2025-04-07 03:10:27 +01:00
51 lines
1.3 KiB
C++
51 lines
1.3 KiB
C++
#include "mopeka_ble.h"
|
|
#include "esphome/core/log.h"
|
|
|
|
#ifdef USE_ESP32
|
|
|
|
namespace esphome {
|
|
namespace mopeka_ble {
|
|
|
|
static const char *const TAG = "mopeka_ble";
|
|
static const uint8_t MANUFACTURER_DATA_LENGTH = 10;
|
|
static const uint16_t MANUFACTURER_ID = 0x0059;
|
|
|
|
/**
|
|
* Parse all incoming BLE payloads to see if it is a Mopeka BLE advertisement.
|
|
* Currently this supports the following products:
|
|
*
|
|
* Mopeka Pro Check.
|
|
* If the sync button is pressed, report the MAC so a user can add this as a sensor.
|
|
*/
|
|
|
|
bool MopekaListener::parse_device(const esp32_ble_tracker::ESPBTDevice &device) {
|
|
const auto &manu_datas = device.get_manufacturer_datas();
|
|
|
|
if (manu_datas.size() != 1) {
|
|
return false;
|
|
}
|
|
|
|
const auto &manu_data = manu_datas[0];
|
|
|
|
if (manu_data.data.size() != MANUFACTURER_DATA_LENGTH) {
|
|
return false;
|
|
}
|
|
|
|
if (manu_data.uuid != esp32_ble_tracker::ESPBTUUID::from_uint16(MANUFACTURER_ID)) {
|
|
return false;
|
|
}
|
|
|
|
if (this->parse_sync_button_(manu_data.data)) {
|
|
// button pressed
|
|
ESP_LOGI(TAG, "SENSOR FOUND: %s", device.address_str().c_str());
|
|
}
|
|
return false;
|
|
}
|
|
|
|
bool MopekaListener::parse_sync_button_(const std::vector<uint8_t> &message) { return (message[2] & 0x80) != 0; }
|
|
|
|
} // namespace mopeka_ble
|
|
} // namespace esphome
|
|
|
|
#endif
|