6static const char *
const TAG =
"mopeka_pro_check";
7static const uint8_t MANUFACTURER_DATA_LENGTH = 10;
8static const uint16_t MANUFACTURER_ID = 0x0059;
9static const double MOPEKA_LPG_COEF[] = {0.573045, -0.002822, -0.00000535};
12 ESP_LOGCONFIG(TAG,
"Mopeka Pro Check");
13 LOG_SENSOR(
" ",
"Level", this->
level_);
16 LOG_SENSOR(
" ",
"Reading Distance", this->
distance_);
31 char addr_buf[MAC_ADDRESS_PRETTY_BUFFER_SIZE];
32 ESP_LOGVV(TAG,
"parse_device(): MAC address %s found.", device.
address_str_to(addr_buf));
36 if (manu_datas.size() != 1) {
37 ESP_LOGE(TAG,
"Unexpected manu_datas size (%d)", manu_datas.size());
41 const auto &manu_data = manu_datas[0];
43 ESP_LOGVV(TAG,
"Manufacturer data:");
44 for (
const uint8_t
byte : manu_data.data) {
45 ESP_LOGVV(TAG,
"0x%02x",
byte);
48 if (manu_data.data.size() != MANUFACTURER_DATA_LENGTH) {
49 ESP_LOGE(TAG,
"Unexpected manu_data size (%d)", manu_data.data.size());
59 ESP_LOGE(TAG,
"Unsupported Sensor Type (0x%X)", manu_data.data[0]);
78 ESP_LOGW(TAG,
"Read Quality too low to report distance or level");
92 ESP_LOGD(TAG,
"Distance Sensor: Quality (0x%X) Distance (%" PRId32
"mm)", quality_value, distance_value);
103 if (this->
level_ !=
nullptr) {
104 uint8_t tank_level = 0;
105 if (distance_value >= this->
full_mm_) {
107 }
else if (distance_value > this->
empty_mm_) {
125 float v = (float) ((
message[1] & 0x7F) / 32.0f);
127 float percent = (v - 2.2f) / 0.65f * 100.0f;
128 if (percent < 0.0f) {
131 if (percent > 100.0f) {
134 return (uint8_t) percent;
139 double raw_level =
raw & 0x3FFF;
140 double raw_t = (
message[2] & 0x7F);
143 (MOPEKA_LPG_COEF[0] + MOPEKA_LPG_COEF[1] * raw_t + MOPEKA_LPG_COEF[2] * raw_t * raw_t));
ESPDEPRECATED("Use address_str_to() instead. Removed in 2027.2.0.", "2026.8.0") std const char * address_str_to(char *buf) const
Return MAC as "XX:XX:XX:XX:XX:XX" string.
uint64_t address_uint64() const
Return MAC as packed uint64 (byte 0 in LSB — matches esp32's address_uint64).
const std::vector< ServiceData > & get_manufacturer_datas() const
SensorReadQuality min_signal_quality_
SensorReadQuality parse_read_quality_(const std::vector< uint8_t > &message)
void dump_config() override
sensor::Sensor * read_quality_
sensor::Sensor * ignored_reads_
int8_t parse_temperature_(const std::vector< uint8_t > &message)
uint32_t ignored_read_count_
sensor::Sensor * battery_level_
uint8_t parse_battery_level_(const std::vector< uint8_t > &message)
sensor::Sensor * distance_
sensor::Sensor * temperature_
uint32_t parse_distance_(const std::vector< uint8_t > &message)
bool parse_device(const ble_device_base::ESPBTDevice &device) override
Main parse function that gets called for all ble advertisements.
void publish_state(float state)
Publish a new state to the front-end.
const LogString * message