ESPHome 2026.4.0
Loading...
Searching...
No Matches
mitsubishi_cn105.h
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
5
7
9
11 public:
12 enum class Mode : uint8_t {
13 HEAT,
14 DRY,
15 COOL,
17 AUTO,
18 UNKNOWN,
19 };
20
21 enum class FanMode : uint8_t {
22 AUTO,
23 QUIET,
24 SPEED_1,
25 SPEED_2,
26 SPEED_3,
27 SPEED_4,
28 UNKNOWN,
29 };
30
38
39 explicit MitsubishiCN105(uart::UARTDevice &device) : device_(device) {}
40
41 void initialize();
42 bool update();
43
45 void set_update_interval(uint32_t interval_ms) { this->update_interval_ms_ = interval_ms; }
46
50 this->room_temperature_min_interval_ms_ = interval_ms;
51 }
52
53 const Status &status() const { return this->status_; }
54 bool is_status_initialized() const {
55 return this->is_room_temperature_enabled() ? !std::isnan(this->status_.room_temperature)
56 : !std::isnan(this->status_.target_temperature);
57 }
58
59 void set_power(bool power_on);
61 void set_mode(Mode mode);
63
64 protected:
77
79 public:
80 template<typename Callback> bool read_and_parse(uart::UARTDevice &device, Callback &&callback);
81 void reset() { read_pos_ = 0; }
82 static void dump_buffer_vv(const char *prefix, const uint8_t *data, size_t len);
83
84 protected:
85 void reset_and_dump_buffer_(const char *prefix);
86
87 private:
88 static constexpr size_t READ_BUFFER_SIZE = 32;
89 uint8_t read_buffer_[READ_BUFFER_SIZE];
90 uint8_t read_pos_{0};
91 };
92
93 enum class UpdateFlag : uint8_t {
94 TEMPERATURE = 1 << 0,
95 POWER = 1 << 1,
96 MODE = 1 << 2,
97 FAN = 1 << 3,
98 };
99
100 struct UpdateFlags {
101 void set(UpdateFlag f) { flags_ |= static_cast<uint8_t>(f); }
102 void clear() { flags_ = 0; }
103 bool any() const { return flags_ != 0; }
104 bool has(UpdateFlag f) const { return (flags_ & static_cast<uint8_t>(f)) != 0; }
105
106 protected:
107 uint8_t flags_{0};
108 };
109
110 void set_state_(State new_state);
111 void did_transition_(State to);
112 bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len);
113 bool process_status_packet_(const uint8_t *payload, size_t len);
114 bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len);
115 bool parse_status_settings_(const uint8_t *payload, size_t len);
116 bool parse_status_room_temperature_(const uint8_t *payload, size_t len);
117 void send_packet_(const uint8_t *packet, size_t len);
118 void update_status_();
121 void apply_settings_();
122 template<typename T> void send_packet_(const T &packet) { this->send_packet_(packet.data(), packet.size()); }
123 static bool should_transition(State from, State to);
124 static const LogString *state_to_string(State state);
125
129 std::optional<uint32_t> write_timeout_start_ms_;
130 std::optional<uint32_t> status_update_start_ms_;
131 std::optional<uint32_t> last_room_temperature_update_ms_;
138};
139
140} // namespace esphome::mitsubishi_cn105
BedjetMode mode
BedJet operating mode.
bool read_and_parse(uart::UARTDevice &device, Callback &&callback)
static void dump_buffer_vv(const char *prefix, const uint8_t *data, size_t len)
std::optional< uint32_t > last_room_temperature_update_ms_
bool process_status_packet_(const uint8_t *payload, size_t len)
static bool should_transition(State from, State to)
void set_room_temperature_min_interval(uint32_t interval_ms)
bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len)
std::optional< uint32_t > status_update_start_ms_
std::optional< uint32_t > write_timeout_start_ms_
static const LogString * state_to_string(State state)
void set_target_temperature(float target_temperature)
bool parse_status_settings_(const uint8_t *payload, size_t len)
void send_packet_(const uint8_t *packet, size_t len)
bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len)
void set_update_interval(uint32_t interval_ms)
bool parse_status_room_temperature_(const uint8_t *payload, size_t len)
float target_temperature
Definition climate.h:0
ClimateFanMode fan_mode
Definition climate.h:3
uint16_t type
bool state
Definition fan.h:2
std::string size_t len
Definition helpers.h:1045
constexpr uint32_t SCHEDULER_DONT_RUN
Definition component.h:60
static void uint32_t
Lightweight type-erased callback (8 bytes on 32-bit) that avoids std::function overhead.
Definition helpers.h:1761