ESPHome 2026.9.0-dev
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 }
87
88 void set_power(bool power_on);
90 void set_mode(Mode mode);
92 void set_vane_mode(VaneMode vane_mode);
96
97 protected:
111
113 public:
114 template<typename Callback> bool read_and_parse(uart::UARTDevice &device, Callback &&callback);
115 void reset() { read_pos_ = 0; }
116 static void dump_buffer_vv(const char *prefix, const uint8_t *data, size_t len);
117
118 protected:
119 void reset_and_dump_buffer_(const char *prefix);
120
121 private:
122 static constexpr size_t READ_BUFFER_SIZE = 32;
123 uint8_t read_buffer_[READ_BUFFER_SIZE];
124 uint8_t read_pos_{0};
125 };
126
127 enum class PropertyId : uint8_t {
128 TEMPERATURE = 0,
129 POWER = 1,
130 MODE = 2,
131 FAN = 3,
132 VANE = 4,
133 WIDE_VANE = 5,
135 };
136
137 struct UpdateFlags {
138 void set(PropertyId id) { this->mask_.insert(id); }
139 void clear(PropertyId id) { this->mask_.erase(id); }
140 bool any() const { return !this->mask_.empty(); }
141 bool contains(PropertyId id) const { return this->mask_.count(id); }
142 bool contains_only(PropertyId id) const { return this->mask_.get_mask() == Mask{id}.get_mask(); }
143
144 protected:
145 using Mask =
148 };
149
154
155 friend struct Property;
156
157 void set_state_(State new_state);
158 void did_transition_(State to);
159 bool process_rx_packet_(uint8_t type, const uint8_t *payload, size_t len);
160 bool process_status_packet_(const uint8_t *payload, size_t len);
161 bool parse_status_payload_(uint8_t msg_type, const uint8_t *payload, size_t len);
162 void send_packet_(std::span<const uint8_t> packet);
163 void update_status_();
164 bool should_request_telemetry_() const;
165 void apply_settings_();
166 bool has_timed_out_(uint32_t timeout) const { return ((get_loop_time_ms() - this->operation_start_ms_) >= timeout); }
167 void set_remote_temperature_half_deg_(uint8_t temperature_half_deg);
168 static bool should_transition(State from, State to);
169 static const LogString *state_to_string(State state);
170
172 // Default 1s; legacy climate-owned hub compatibility relies on this when update_interval is omitted.
173 // Remove legacy note in 2027.2.0.
177 // Default 60s; legacy climate-owned hub compatibility relies on this when current_temperature_min_interval is
178 // omitted. Remove legacy note in 2027.2.0.
180 std::optional<uint32_t> last_telemetry_update_ms_;
187
188 static constexpr uint8_t REMOTE_TEMPERATURE_DISABLED = 0;
190};
191
192} // 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:1673
uint16_t temperature
Definition sun_gtil2.cpp:12