ESPHome 2026.11.0-dev
Loading...
Searching...
No Matches
xiaomi_mccgq02hl.h
Go to the documentation of this file.
1#pragma once
2
8
9#include <vector>
10
12
13// Xiaomi Mijia Door/Window Sensor 2 (MCCGQ02HL), MiBeacon product id 0x098b.
14//
15// Self-contained on purpose: xiaomi_ble's parse_xiaomi_header() does not know
16// this product id and parse_xiaomi_value() does not know the door object, so
17// this class does its own header and object parsing and decryption.
18class XiaomiMCCGQ02HL final : public Component,
21 public:
22 void set_address(uint64_t address) { this->address_ = address; }
23 void set_bindkey(const char *bindkey);
24 void set_light(binary_sensor::BinarySensor *light) { this->light_ = light; }
25 void set_battery_level(sensor::Sensor *battery_level) { this->battery_level_ = battery_level; }
26
27 bool parse_device(const ble_device_base::ESPBTDevice &device) override;
28 void dump_config() override;
29
30 protected:
31 struct Reading {
32 optional<bool> open;
33 optional<bool> light;
34 optional<float> battery_level;
35 };
36
37 bool decrypt_(const uint8_t *frame, size_t size, size_t offset, uint8_t *plaintext) const;
38 bool parse_service_data_(const std::vector<uint8_t> &data, Reading &reading);
39 bool parse_objects_(const uint8_t *payload, size_t length, Reading &reading);
40
41 uint64_t address_{0};
42 uint8_t bindkey_[16]{};
43 // Per instance, unlike xiaomi_ble's function-static counter which is shared
44 // by every Xiaomi device on the node.
45 optional<uint8_t> last_frame_count_;
48};
49
50} // namespace esphome::xiaomi_mccgq02hl
uint8_t address
Definition bl0906.h:4
Base class for all binary_sensor-type classes.
Base-class for all sensors.
Definition sensor.h:47
bool parse_device(const ble_device_base::ESPBTDevice &device) override
bool decrypt_(const uint8_t *frame, size_t size, size_t offset, uint8_t *plaintext) const
void set_light(binary_sensor::BinarySensor *light)
bool parse_objects_(const uint8_t *payload, size_t length, Reading &reading)
bool parse_service_data_(const std::vector< uint8_t > &data, Reading &reading)
void set_battery_level(sensor::Sensor *battery_level)
uint16_t size
Definition helpers.cpp:34