ESPHome 2026.6.0-dev
Loading...
Searching...
No Matches
mitsubishi_cn105.h
Go to the documentation of this file.
1#pragma once
2
3#include <optional>
6
8
10
12 public:
13 enum class Mode : uint8_t {
14 HEAT,
15 DRY,
16 COOL,
18 AUTO,
19 UNKNOWN,
20 };
21
22 enum class FanMode : uint8_t {
23 AUTO,
24 QUIET,
25 SPEED_1,
26 SPEED_2,
27 SPEED_3,
28 SPEED_4,
29 UNKNOWN,
30 };
31
32 enum class VaneMode : uint8_t {
33 AUTO,
39 SWING,
40 UNKNOWN,
41 };
42
43 enum class WideVaneMode : uint8_t {
45 LEFT,
46 CENTER,
47 RIGHT,
50 SWING,
51 UNKNOWN,
52 };
53
63
64 explicit MitsubishiCN105(uart::UARTDevice &device) : device_(device) {}
65
66 void initialize();
67 bool update();
68
70 void set_update_interval(uint32_t interval_ms) { this->update_interval_ms_ = interval_ms; }
71
75 this->room_temperature_min_interval_ms_ = interval_ms;
76 }
77
78 const Status &status() const { return this->status_; }
79 bool is_status_initialized() const {
80 return this->is_room_temperature_enabled() ? !std::isnan(this->status_.room_temperature)
81 : !std::isnan(this->status_.target_temperature);
82 }
83
84 void set_power(bool power_on);
86 void set_mode(Mode mode);
88 void set_vane_mode(VaneMode vane_mode);
92
93 protected:
106
108 public:
109 template<typename Callback> bool read_and_parse(uart::UARTDevice &device, Callback &&callback);
110 void reset() { read_pos_ = 0; }
111 static void dump_buffer_vv(const char *prefix, const uint8_t *data, size_t len);
112
113 protected:
114 void reset_and_dump_buffer_(const char *prefix);
115
116 private:
117 static constexpr size_t READ_BUFFER_SIZE = 32;
118 uint8_t read_buffer_[READ_BUFFER_SIZE];
119 uint8_t read_pos_{0};
120 };
121
122 enum class UpdateFlag : uint8_t {
123 TEMPERATURE = 0,
124 POWER = 1,
125 MODE = 2,
126 FAN = 3,
127 VANE = 4,
128 WIDE_VANE = 5,
130 };
131
132 struct UpdateFlags {
133 template<typename... Flags> void set(Flags... flags) { (this->mask_.insert(flags), ...); }
134 template<typename... Flags> void clear(Flags... flags) { (this->mask_.erase(flags), ...); }
135 bool any() const { return !this->mask_.empty(); }
136 bool contains(UpdateFlag flag) const { return this->mask_.count(flag); }
137 bool contains_only(UpdateFlag flag) const { return this->mask_.get_mask() == Mask{flag}.get_mask(); }
138
139 protected:
140 using Mask =
142
144 };
145
146 void set_state_(State new_state);
147 void did_transition_(State to);
148 bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len);
149 bool process_status_packet_(const uint8_t *payload, size_t len);
150 bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len);
151 bool parse_status_settings_(const uint8_t *payload, size_t len);
152 bool parse_status_room_temperature_(const uint8_t *payload, size_t len);
153 void send_packet_(const uint8_t *packet, size_t len);
154 void update_status_();
156 void apply_settings_();
157 bool has_timed_out_(uint32_t timeout) const { return ((get_loop_time_ms() - this->operation_start_ms_) >= timeout); }
158 void set_remote_temperature_half_deg_(uint8_t temperature_half_deg);
159 template<typename T> void send_packet_(const T &packet) { this->send_packet_(packet.data(), packet.size()); }
160 static bool should_transition(State from, State to);
161 static const LogString *state_to_string(State state);
162
168 std::optional<uint32_t> last_room_temperature_update_ms_;
176
177 static constexpr uint8_t REMOTE_TEMPERATURE_DISABLED = 0;
179};
180
181} // namespace esphome::mitsubishi_cn105
BedjetMode mode
BedJet operating mode.
constexpr size_t count(ValueType value) const
Check if the set contains a specific value (std::set compatibility) Returns 1 if present,...
constexpr bitmask_t get_mask() const
Get the raw bitmask value for optimized operations.
constexpr void insert(ValueType value)
Add a single value to the set (std::set compatibility)
constexpr void erase(ValueType value)
Remove a value from the set (std::set compatibility)
constexpr bool empty() const
Check if the set is empty.
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)
void set_remote_temperature_half_deg_(uint8_t temperature_half_deg)
bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len)
bool has_timed_out_(uint32_t timeout) const
static constexpr uint8_t REMOTE_TEMPERATURE_DISABLED
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
uint16_t flags
bool state
Definition fan.h:2
const void size_t len
Definition hal.h:64
constexpr uint32_t SCHEDULER_DONT_RUN
Definition component.h:61
static void uint32_t
Lightweight type-erased callback (8 bytes on 32-bit) that avoids std::function overhead.
Definition helpers.h:1624
uint16_t temperature
Definition sun_gtil2.cpp:12