ESPHome  2024.12.2
daikin_brc.h
Go to the documentation of this file.
1 #pragma once
2 
4 
5 namespace esphome {
6 namespace daikin_brc {
7 
8 // Values for Daikin BRC4CXXX IR Controllers
9 // Temperature
10 const uint8_t DAIKIN_BRC_TEMP_MIN_F = 60; // fahrenheit
11 const uint8_t DAIKIN_BRC_TEMP_MAX_F = 90; // fahrenheit
12 const float DAIKIN_BRC_TEMP_MIN_C = (DAIKIN_BRC_TEMP_MIN_F - 32) / 1.8; // fahrenheit
13 const float DAIKIN_BRC_TEMP_MAX_C = (DAIKIN_BRC_TEMP_MAX_F - 32) / 1.8; // fahrenheit
14 
15 // Modes
16 const uint8_t DAIKIN_BRC_MODE_AUTO = 0x30;
17 const uint8_t DAIKIN_BRC_MODE_COOL = 0x20;
18 const uint8_t DAIKIN_BRC_MODE_HEAT = 0x10;
19 const uint8_t DAIKIN_BRC_MODE_DRY = 0x70;
20 const uint8_t DAIKIN_BRC_MODE_FAN = 0x00;
21 const uint8_t DAIKIN_BRC_MODE_OFF = 0x00;
22 const uint8_t DAIKIN_BRC_MODE_ON = 0x01;
23 
24 // Fan Speed
25 const uint8_t DAIKIN_BRC_FAN_1 = 0x10;
26 const uint8_t DAIKIN_BRC_FAN_2 = 0x30;
27 const uint8_t DAIKIN_BRC_FAN_3 = 0x50;
28 const uint8_t DAIKIN_BRC_FAN_AUTO = 0xA0;
29 
30 // IR Transmission
31 const uint32_t DAIKIN_BRC_IR_FREQUENCY = 38000;
32 const uint32_t DAIKIN_BRC_HEADER_MARK = 5070;
33 const uint32_t DAIKIN_BRC_HEADER_SPACE = 2140;
34 const uint32_t DAIKIN_BRC_BIT_MARK = 370;
35 const uint32_t DAIKIN_BRC_ONE_SPACE = 1780;
36 const uint32_t DAIKIN_BRC_ZERO_SPACE = 710;
37 const uint32_t DAIKIN_BRC_MESSAGE_SPACE = 29410;
38 
39 const uint8_t DAIKIN_BRC_IR_DRY_FAN_TEMP_F = 72; // Dry/Fan mode is always 17 Celsius.
40 const uint8_t DAIKIN_BRC_IR_DRY_FAN_TEMP_C = (17 - 9) * 2; // Dry/Fan mode is always 17 Celsius.
41 const uint8_t DAIKIN_BRC_IR_SWING_ON = 0x5;
42 const uint8_t DAIKIN_BRC_IR_SWING_OFF = 0x6;
43 const uint8_t DAIKIN_BRC_IR_MODE_BUTTON = 0x4; // This is set after a mode action
44 
45 // State Frame size
46 const uint8_t DAIKIN_BRC_STATE_FRAME_SIZE = 15;
47 // Preamble size
48 const uint8_t DAIKIN_BRC_PREAMBLE_SIZE = 7;
49 // Transmit Frame size - includes a preamble
50 const uint8_t DAIKIN_BRC_TRANSMIT_FRAME_SIZE = DAIKIN_BRC_PREAMBLE_SIZE + DAIKIN_BRC_STATE_FRAME_SIZE;
51 
53  public:
55  : climate_ir::ClimateIR(DAIKIN_BRC_TEMP_MIN_C, DAIKIN_BRC_TEMP_MAX_C, 0.5f, true, true,
58 
60  void set_fahrenheit(bool value) {
61  this->fahrenheit_ = value;
62  this->temperature_step_ = value ? 0.5f : 1.0f;
63  }
64 
65  protected:
66  uint8_t mode_button_ = 0x00;
67  // Capture if the MODE was changed
68  void control(const climate::ClimateCall &call) override;
69  // Transmit via IR the state of this climate controller.
70  void transmit_state() override;
71  uint8_t alt_mode_();
72  uint8_t operation_mode_();
73  uint8_t fan_speed_swing_();
74  uint8_t temperature_();
75  // Handle received IR Buffer
76  bool on_receive(remote_base::RemoteReceiveData data) override;
77  bool parse_state_frame_(const uint8_t frame[]);
78  bool fahrenheit_{false};
79 };
80 
81 } // namespace daikin_brc
82 } // namespace esphome
This class is used to encode all control actions on a climate device.
Definition: climate.h:33
The fan mode is set to Low.
Definition: climate_mode.h:54
The fan mode is set to Both.
Definition: climate_mode.h:74
const uint8_t DAIKIN_BRC_MODE_ON
Definition: daikin_brc.h:22
const uint32_t DAIKIN_BRC_IR_FREQUENCY
Definition: daikin_brc.h:31
const uint8_t DAIKIN_BRC_IR_SWING_OFF
Definition: daikin_brc.h:42
const uint32_t DAIKIN_BRC_HEADER_MARK
Definition: daikin_brc.h:32
const uint8_t DAIKIN_BRC_FAN_AUTO
Definition: daikin_brc.h:28
const uint8_t DAIKIN_BRC_TEMP_MAX_F
Definition: daikin_brc.h:11
const uint8_t DAIKIN_BRC_TEMP_MIN_F
Definition: daikin_brc.h:10
const uint8_t DAIKIN_BRC_MODE_COOL
Definition: daikin_brc.h:17
const uint8_t DAIKIN_BRC_MODE_DRY
Definition: daikin_brc.h:19
const float DAIKIN_BRC_TEMP_MIN_C
Definition: daikin_brc.h:12
bool on_receive(remote_base::RemoteReceiveData data) override
Definition: daikin_brc.cpp:232
const uint8_t DAIKIN_BRC_MODE_AUTO
Definition: daikin_brc.h:16
const uint8_t DAIKIN_BRC_FAN_3
Definition: daikin_brc.h:27
const uint8_t DAIKIN_BRC_STATE_FRAME_SIZE
Definition: daikin_brc.h:46
const uint32_t DAIKIN_BRC_BIT_MARK
Definition: daikin_brc.h:34
const uint8_t DAIKIN_BRC_IR_DRY_FAN_TEMP_F
Definition: daikin_brc.h:39
const uint8_t DAIKIN_BRC_IR_SWING_ON
Definition: daikin_brc.h:41
ClimateIR(float minimum_temperature, float maximum_temperature, float temperature_step=1.0f, bool supports_dry=false, bool supports_fan_only=false, std::set< climate::ClimateFanMode > fan_modes={}, std::set< climate::ClimateSwingMode > swing_modes={}, std::set< climate::ClimatePreset > presets={})
Definition: climate_ir.h:26
void control(const climate::ClimateCall &call) override
Definition: daikin_brc.cpp:9
const uint8_t DAIKIN_BRC_MODE_FAN
Definition: daikin_brc.h:20
const uint8_t DAIKIN_BRC_FAN_2
Definition: daikin_brc.h:26
The fan mode is set to High.
Definition: climate_mode.h:58
The swing mode is set to Off.
Definition: climate_mode.h:72
const uint32_t DAIKIN_BRC_ZERO_SPACE
Definition: daikin_brc.h:36
const float DAIKIN_BRC_TEMP_MAX_C
Definition: daikin_brc.h:13
const uint8_t DAIKIN_BRC_FAN_1
Definition: daikin_brc.h:25
bool parse_state_frame_(const uint8_t frame[])
Definition: daikin_brc.cpp:163
const uint8_t DAIKIN_BRC_PREAMBLE_SIZE
Definition: daikin_brc.h:48
const uint8_t DAIKIN_BRC_MODE_OFF
Definition: daikin_brc.h:21
const uint8_t DAIKIN_BRC_IR_DRY_FAN_TEMP_C
Definition: daikin_brc.h:40
Implementation of SPI Controller mode.
Definition: a01nyub.cpp:7
const uint32_t DAIKIN_BRC_ONE_SPACE
Definition: daikin_brc.h:35
const uint8_t DAIKIN_BRC_MODE_HEAT
Definition: daikin_brc.h:18
The fan mode is set to Medium.
Definition: climate_mode.h:56
const uint8_t DAIKIN_BRC_TRANSMIT_FRAME_SIZE
Definition: daikin_brc.h:50
const uint32_t DAIKIN_BRC_MESSAGE_SPACE
Definition: daikin_brc.h:37
const uint8_t DAIKIN_BRC_IR_MODE_BUTTON
Definition: daikin_brc.h:43
const uint32_t DAIKIN_BRC_HEADER_SPACE
Definition: daikin_brc.h:33
void set_fahrenheit(bool value)
Set use of Fahrenheit units.
Definition: daikin_brc.h:60