ESPHome  2023.5.5
mopeka_std_check.h
Go to the documentation of this file.
1 #pragma once
2 
3 #include <vector>
4 
8 
9 #ifdef USE_ESP32
10 
11 namespace esphome {
12 namespace mopeka_std_check {
13 
14 enum SensorType {
15  STANDARD = 0x02,
16  XL = 0x03,
17 };
18 
19 // 4 values in one struct so it aligns to 8 byte. One `mopeka_std_values` is 40 bit long.
20 struct mopeka_std_values { // NOLINT(readability-identifier-naming,altera-struct-pack-align)
21  u_int16_t time_0 : 5;
22  u_int16_t value_0 : 5;
23  u_int16_t time_1 : 5;
24  u_int16_t value_1 : 5;
25  u_int16_t time_2 : 5;
26  u_int16_t value_2 : 5;
27  u_int16_t time_3 : 5;
28  u_int16_t value_3 : 5;
29 } __attribute__((packed));
30 
31 struct mopeka_std_package { // NOLINT(readability-identifier-naming,altera-struct-pack-align)
32  u_int8_t data_0 : 8;
33  u_int8_t data_1 : 8;
34  u_int8_t raw_voltage : 8;
35 
36  u_int8_t raw_temp : 6;
37  bool slow_update_rate : 1;
38  bool sync_pressed : 1;
39 
41 } __attribute__((packed));
42 
44  public:
45  void set_address(uint64_t address) { address_ = address; };
46 
47  bool parse_device(const esp32_ble_tracker::ESPBTDevice &device) override;
48  void dump_config() override;
49  float get_setup_priority() const override { return setup_priority::DATA; }
50 
51  void set_level(sensor::Sensor *level) { this->level_ = level; };
52  void set_temperature(sensor::Sensor *temperature) { this->temperature_ = temperature; };
53  void set_battery_level(sensor::Sensor *bat) { this->battery_level_ = bat; };
54  void set_distance(sensor::Sensor *distance) { this->distance_ = distance; };
55  void set_propane_butane_mix(float val) { this->propane_butane_mix_ = val; };
56  void set_tank_full(float full) { this->full_mm_ = full; };
57  void set_tank_empty(float empty) { this->empty_mm_ = empty; };
58 
59  protected:
60  uint64_t address_;
61  sensor::Sensor *level_{nullptr};
62  sensor::Sensor *temperature_{nullptr};
63  sensor::Sensor *distance_{nullptr};
64  sensor::Sensor *battery_level_{nullptr};
65 
67  uint32_t full_mm_;
68  uint32_t empty_mm_;
69 
70  float get_lpg_speed_of_sound_(float temperature);
71  uint8_t parse_battery_level_(const mopeka_std_package *message);
72  uint8_t parse_temperature_(const mopeka_std_package *message);
73 };
74 
75 } // namespace mopeka_std_check
76 } // namespace esphome
77 
78 #endif
void set_battery_level(sensor::Sensor *bat)
const float DATA
For components that import data from directly connected sensors like DHT.
Definition: component.cpp:18
esphome::mopeka_std_check::MopekaStdCheck __attribute__
float temperature
Definition: qmp6988.h:71
mopeka_std_values val[4]
void set_temperature(sensor::Sensor *temperature)
void set_level(sensor::Sensor *level)
void set_distance(sensor::Sensor *distance)
Definition: a4988.cpp:4
Base-class for all sensors.
Definition: sensor.h:57