ESPHome 2026.8.0b4
Loading...
Searching...
No Matches
mitsubishi_cn105.h
Go to the documentation of this file.
1#pragma once
2
5
6#include <cmath>
7#include <optional>
8#include <span>
9
11
13
15 public:
16 enum class Mode : uint8_t {
17 HEAT,
18 DRY,
19 COOL,
21 AUTO,
22 UNKNOWN,
23 };
24
25 enum class FanMode : uint8_t {
26 AUTO,
27 QUIET,
28 SPEED_1,
29 SPEED_2,
30 SPEED_3,
31 SPEED_4,
32 UNKNOWN,
33 };
34
35 enum class VaneMode : uint8_t {
36 AUTO,
42 SWING,
43 UNKNOWN,
44 };
45
46 enum class WideVaneMode : uint8_t {
48 LEFT,
49 CENTER,
50 RIGHT,
53 SWING,
54 UNKNOWN,
55 };
56
66
67 explicit MitsubishiCN105(uart::UARTDevice &device) : device_(device) {}
68
69 void initialize();
70 bool update();
71
73 void set_update_interval(uint32_t interval_ms) { this->update_interval_ms_ = interval_ms; }
74
78 this->telemetry_request_min_interval_ms_ = interval_ms;
79 }
80
81 const Status &status() const { return this->status_; }
82 bool is_status_initialized() const {
83 return this->is_telemetry_polling_enabled() ? !std::isnan(this->status_.room_temperature)
84 : !std::isnan(this->status_.target_temperature);
85 }
86
87 void set_power(bool power_on);
89 void set_mode(Mode mode);
91 void set_vane_mode(VaneMode vane_mode);
95
96 protected:
109
111 public:
112 template<typename Callback> bool read_and_parse(uart::UARTDevice &device, Callback &&callback);
113 void reset() { read_pos_ = 0; }
114 static void dump_buffer_vv(const char *prefix, const uint8_t *data, size_t len);
115
116 protected:
117 void reset_and_dump_buffer_(const char *prefix);
118
119 private:
120 static constexpr size_t READ_BUFFER_SIZE = 32;
121 uint8_t read_buffer_[READ_BUFFER_SIZE];
122 uint8_t read_pos_{0};
123 };
124
125 enum class PropertyId : uint8_t {
126 TEMPERATURE = 0,
127 POWER = 1,
128 MODE = 2,
129 FAN = 3,
130 VANE = 4,
131 WIDE_VANE = 5,
133 };
134
135 struct UpdateFlags {
136 void set(PropertyId id) { this->mask_.insert(id); }
137 void clear(PropertyId id) { this->mask_.erase(id); }
138 bool any() const { return !this->mask_.empty(); }
139 bool contains(PropertyId id) const { return this->mask_.count(id); }
140 bool contains_only(PropertyId id) const { return this->mask_.get_mask() == Mask{id}.get_mask(); }
141
142 protected:
143 using Mask =
146 };
147
152
153 friend struct Property;
154
155 void set_state_(State new_state);
156 void did_transition_(State to);
157 bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len);
158 bool process_status_packet_(const uint8_t *payload, size_t len);
159 bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len);
160 void send_packet_(std::span<const uint8_t> packet);
161 void update_status_();
162 bool should_request_telemetry_() const;
163 void apply_settings_();
164 bool has_timed_out_(uint32_t timeout) const { return ((get_loop_time_ms() - this->operation_start_ms_) >= timeout); }
165 void set_remote_temperature_half_deg_(uint8_t temperature_half_deg);
166 static bool should_transition(State from, State to);
167 static const LogString *state_to_string(State state);
168
170 // Default 1s; legacy climate-owned hub compatibility relies on this when update_interval is omitted.
171 // Remove legacy note in 2027.2.0.
175 // Default 60s; legacy climate-owned hub compatibility relies on this when current_temperature_min_interval is
176 // omitted. Remove legacy note in 2027.2.0.
178 std::optional<uint32_t> last_telemetry_update_ms_;
185
186 static constexpr uint8_t REMOTE_TEMPERATURE_DISABLED = 0;
188};
189
190} // 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)
void set_telemetry_request_min_interval(uint32_t interval_ms)
bool process_status_packet_(const uint8_t *payload, size_t len)
static bool should_transition(State from, State to)
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
std::optional< uint32_t > last_telemetry_update_ms_
void send_packet_(std::span< const uint8_t > packet)
static const LogString * state_to_string(State state)
void set_target_temperature(float target_temperature)
bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len)
void set_update_interval(uint32_t interval_ms)
float target_temperature
Definition climate.h:0
ClimateFanMode fan_mode
Definition climate.h:3
uint16_t type
bool state
Definition fan.h:2
const void size_t len
Definition hal.h:64
constexpr uint32_t SCHEDULER_DONT_RUN
Definition component.h:63
static void uint32_t
Lightweight type-erased callback (8 bytes on 32-bit) that avoids std::function overhead.
Definition helpers.h:1670
uint16_t temperature
Definition sun_gtil2.cpp:12