ESPHome 2026.6.2
Loading...
Searching...
No Matches
mitsubishi_cn105.h
Go to the documentation of this file.
1#pragma once
2
3#include <cmath>
4#include <optional>
7
9
11
13 public:
14 enum class Mode : uint8_t {
15 HEAT,
16 DRY,
17 COOL,
19 AUTO,
20 UNKNOWN,
21 };
22
23 enum class FanMode : uint8_t {
24 AUTO,
25 QUIET,
26 SPEED_1,
27 SPEED_2,
28 SPEED_3,
29 SPEED_4,
30 UNKNOWN,
31 };
32
33 enum class VaneMode : uint8_t {
34 AUTO,
40 SWING,
41 UNKNOWN,
42 };
43
44 enum class WideVaneMode : uint8_t {
46 LEFT,
47 CENTER,
48 RIGHT,
51 SWING,
52 UNKNOWN,
53 };
54
64
65 explicit MitsubishiCN105(uart::UARTDevice &device) : device_(device) {}
66
67 void initialize();
68 bool update();
69
71 void set_update_interval(uint32_t interval_ms) { this->update_interval_ms_ = interval_ms; }
72
76 this->room_temperature_min_interval_ms_ = interval_ms;
77 }
78
79 const Status &status() const { return this->status_; }
80 bool is_status_initialized() const {
81 return this->is_room_temperature_enabled() ? !std::isnan(this->status_.room_temperature)
82 : !std::isnan(this->status_.target_temperature);
83 }
84
85 void set_power(bool power_on);
87 void set_mode(Mode mode);
89 void set_vane_mode(VaneMode vane_mode);
93
94 protected:
107
109 public:
110 template<typename Callback> bool read_and_parse(uart::UARTDevice &device, Callback &&callback);
111 void reset() { read_pos_ = 0; }
112 static void dump_buffer_vv(const char *prefix, const uint8_t *data, size_t len);
113
114 protected:
115 void reset_and_dump_buffer_(const char *prefix);
116
117 private:
118 static constexpr size_t READ_BUFFER_SIZE = 32;
119 uint8_t read_buffer_[READ_BUFFER_SIZE];
120 uint8_t read_pos_{0};
121 };
122
123 enum class UpdateFlag : uint8_t {
124 TEMPERATURE = 0,
125 POWER = 1,
126 MODE = 2,
127 FAN = 3,
128 VANE = 4,
129 WIDE_VANE = 5,
131 };
132
133 struct UpdateFlags {
134 template<typename... Flags> void set(Flags... flags) { (this->mask_.insert(flags), ...); }
135 template<typename... Flags> void clear(Flags... flags) { (this->mask_.erase(flags), ...); }
136 bool any() const { return !this->mask_.empty(); }
137 bool contains(UpdateFlag flag) const { return this->mask_.count(flag); }
138 bool contains_only(UpdateFlag flag) const { return this->mask_.get_mask() == Mask{flag}.get_mask(); }
139
140 protected:
141 using Mask =
143
145 };
146
147 void set_state_(State new_state);
148 void did_transition_(State to);
149 bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len);
150 bool process_status_packet_(const uint8_t *payload, size_t len);
151 bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len);
152 bool parse_status_settings_(const uint8_t *payload, size_t len);
153 bool parse_status_room_temperature_(const uint8_t *payload, size_t len);
154 void send_packet_(const uint8_t *packet, size_t len);
155 void update_status_();
157 void apply_settings_();
158 bool has_timed_out_(uint32_t timeout) const { return ((get_loop_time_ms() - this->operation_start_ms_) >= timeout); }
159 void set_remote_temperature_half_deg_(uint8_t temperature_half_deg);
160 template<typename T> void send_packet_(const T &packet) { this->send_packet_(packet.data(), packet.size()); }
161 static bool should_transition(State from, State to);
162 static const LogString *state_to_string(State state);
163
169 std::optional<uint32_t> last_room_temperature_update_ms_;
177
178 static constexpr uint8_t REMOTE_TEMPERATURE_DISABLED = 0;
180};
181
182} // 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