IRremoteIDF
Infrared send & receive for ESP-IDF
Loading...
Searching...
No Matches
ir_Ecoclim.h
Go to the documentation of this file.
1// Copyright 2021 David Conran
2
6
7// Supports:
8// Brand: EcoClim, Model: HYSFR-P348 remote
9// Brand: EcoClim, Model: ZC200DPO A/C
10
11#ifndef IR_ECOCLIM_H_
12#define IR_ECOCLIM_H_
13
14#define __STDC_LIMIT_MACROS
15#include <stdint.h>
16#include "IRplatform.h"
17#include "IRremoteESP8266.h"
18#include "IRsend.h"
19#ifdef UNIT_TEST
20#include "IRsend_test.h"
21#endif
22
23// Constants
24// Modes
25const uint8_t kEcoclimAuto = 0b000;
26const uint8_t kEcoclimCool = 0b001;
27const uint8_t kEcoclimDry = 0b010;
28const uint8_t kEcoclimRecycle = 0b011;
29const uint8_t kEcoclimFan = 0b100;
30const uint8_t kEcoclimHeat = 0b101;
31const uint8_t kEcoclimSleep = 0b111;
32// Fan Control
33const uint8_t kEcoclimFanMin = 0b00;
34const uint8_t kEcoclimFanMed = 0b01;
35const uint8_t kEcoclimFanMax = 0b10;
36const uint8_t kEcoclimFanAuto = 0b11;
37// DIP settings
38const uint8_t kEcoclimDipMaster = 0b0000;
39const uint8_t kEcoclimDipSlave = 0b0111;
40// Temperature
41const uint8_t kEcoclimTempMin = 5; // Celsius
42const uint8_t kEcoclimTempMax = kEcoclimTempMin + 31; // Celsius
43// Timer
44const uint16_t kEcoclimTimerDisable = 0x1F * 60 + 7 * 10; // 4774
45
46// Power: Off, Mode: Auto, Temp: 11C, Sensor: 22C, Fan: Auto, Clock: 00:00
47const uint64_t kEcoclimDefaultState = 0x11063000FFFF0A;
48
51 uint64_t raw;
52 struct { // Only 56 bits (7 bytes are used.
53 // Byte
54 uint64_t :3;
55 uint64_t Sum :1;
56 uint64_t DipConfig :4;
57 // Byte
58 uint64_t OffTenMins :3;
59 uint64_t OffHours :5;
60 // Byte
61 uint64_t OnTenMins :3;
62 uint64_t OnHours :5;
63 // Byte+Byte
64 uint64_t Clock :11;
65 uint64_t :1;
66 uint64_t Fan :2;
67 uint64_t Power :1;
68 uint64_t Clear :1; // Not sure what this is
69 // Byte
70 uint64_t Temp :5;
71 uint64_t Mode :3;
72 // Byte
73 uint64_t SensorTemp :5;
74 uint64_t :3;
75 };
76};
77
78// Classes
79
83 public:
84 explicit IREcoclimAc(const uint16_t pin, const bool inverted = false,
85 const bool use_modulation = true);
86 void stateReset(void);
87#if SEND_ECOCLIM
88 void send(const uint16_t repeat = kNoRepeat);
93 int8_t calibrate(void) { return _irsend.calibrate(); }
94#endif // SEND_ECOCLIM
95 void begin(void);
96 void on(void);
97 void off(void);
98 void setPower(const bool on);
99 bool getPower(void) const;
100 void setTemp(const uint8_t celsius);
101 uint8_t getTemp(void) const;
102 void setSensorTemp(const uint8_t celsius);
103 uint8_t getSensorTemp(void) const;
104 void setFan(const uint8_t speed);
105 uint8_t getFan(void) const;
106 void setMode(const uint8_t mode);
107 uint8_t getMode(void) const;
108 void setClock(const uint16_t nr_of_mins);
109 uint16_t getClock(void) const;
110 uint64_t getRaw(void);
111 void setRaw(const uint64_t new_code);
112 static uint8_t calcChecksum(const uint64_t state);
113 static bool validChecksum(const uint64_t state);
114 void setType(const uint8_t code);
115 uint8_t getType(void) const;
116 static uint8_t convertMode(const stdAc::opmode_t mode);
117 static uint8_t convertFan(const stdAc::fanspeed_t speed);
118 static stdAc::opmode_t toCommonMode(const uint8_t mode);
119 static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed);
120 stdAc::state_t toCommon(void) const;
121 void setOnTimer(const uint16_t nr_of_mins);
122 uint16_t getOnTimer(void) const;
123 bool isOnTimerEnabled(void) const;
124 void disableOnTimer(void);
125 void setOffTimer(const uint16_t nr_of_mins);
126 uint16_t getOffTimer(void) const;
127 bool isOffTimerEnabled(void) const;
128 void disableOffTimer(void);
129 String toString(void) const;
130#ifndef UNIT_TEST
131
132 private:
134#else // UNIT_TEST
136 IRsendTest _irsend;
138#endif // UNIT_TEST
140 void checksum(void);
141};
142
143#endif // IR_ECOCLIM_H_
std::string String
The protocol code builds human readable output with String. On ESP-IDF that is just std::string.
Definition IRplatform.h:21
const uint16_t kNoRepeat
Definition IRremoteESP8266.h:1171
Class for handling detailed EcoClim A/C 56 bit messages.
Definition ir_Ecoclim.h:82
static stdAc::opmode_t toCommonMode(const uint8_t mode)
Convert a native mode to it's common stdAc::opmode_t equivalent.
Definition ir_Ecoclim.cpp:295
void setType(const uint8_t code)
Set the Unit type/DIP switch settings for the remote.
Definition ir_Ecoclim.cpp:321
void setMode(const uint8_t mode)
Set the operating mode of the A/C.
Definition ir_Ecoclim.cpp:263
int8_t calibrate(void)
Run the calibration to calculate uSec timing offsets for this platform.
Definition ir_Ecoclim.h:93
uint16_t getClock(void) const
Get the clock time of the A/C unit.
Definition ir_Ecoclim.cpp:307
stdAc::state_t toCommon(void) const
Convert the current internal state into its stdAc::state_t equivalent.
Definition ir_Ecoclim.cpp:388
void stateReset(void)
Reset the internal state to a fixed known good state.
Definition ir_Ecoclim.cpp:131
String toString(void) const
Convert the internal state into a human readable string.
Definition ir_Ecoclim.cpp:415
static uint8_t convertFan(const stdAc::fanspeed_t speed)
Convert a stdAc::fanspeed_t enum into it's native speed.
Definition ir_Ecoclim.cpp:234
void on(void)
Change the power setting to On.
Definition ir_Ecoclim.cpp:216
void setSensorTemp(const uint8_t celsius)
Set the sensor temperature.
Definition ir_Ecoclim.cpp:194
uint8_t getType(void) const
Get the Unit type/DIP switch settings of the remote.
Definition ir_Ecoclim.cpp:317
uint8_t getTemp(void) const
Get the current temperature setting.
Definition ir_Ecoclim.cpp:190
void setTemp(const uint8_t celsius)
Set the temperature.
Definition ir_Ecoclim.cpp:181
void setFan(const uint8_t speed)
Set the speed of the fan.
Definition ir_Ecoclim.cpp:227
uint8_t getFan(void) const
Get the current fan speed setting.
Definition ir_Ecoclim.cpp:223
static uint8_t calcChecksum(const uint64_t state)
Calculate the checksum (parity) for a given state.
Definition ir_Ecoclim.cpp:160
void disableOffTimer(void)
Disable & clear the Off Timer.
Definition ir_Ecoclim.cpp:381
void begin(void)
Set up hardware to be able to send a message.
Definition ir_Ecoclim.cpp:134
EcoclimProtocol _
The state of the IR remote in IR code form.
Definition ir_Ecoclim.h:139
void send(const uint16_t repeat=kNoRepeat)
Send the current internal state as an IR message.
Definition ir_Ecoclim.cpp:139
uint8_t getMode(void) const
Get the operating mode setting of the A/C.
Definition ir_Ecoclim.cpp:259
void off(void)
Change the power setting to Off.
Definition ir_Ecoclim.cpp:219
void setOffTimer(const uint16_t nr_of_mins)
Set & enable the Off Timer for the A/C.
Definition ir_Ecoclim.cpp:361
IRsend _irsend
Instance of the IR send class.
Definition ir_Ecoclim.h:133
static uint8_t convertMode(const stdAc::opmode_t mode)
Convert a standard A/C mode into its native mode.
Definition ir_Ecoclim.cpp:282
static bool validChecksum(const uint64_t state)
Verify the checksum is valid for a given state.
Definition ir_Ecoclim.cpp:170
bool isOffTimerEnabled(void) const
Check if the Off Timer is enabled.
Definition ir_Ecoclim.cpp:376
uint8_t getSensorTemp(void) const
Get the sensor temperature setting.
Definition ir_Ecoclim.cpp:203
void setRaw(const uint64_t new_code)
Set the internal state from a valid code for this protocol.
Definition ir_Ecoclim.cpp:153
void setPower(const bool on)
Change the power setting.
Definition ir_Ecoclim.cpp:213
bool getPower(void) const
Get the value of the current power setting.
Definition ir_Ecoclim.cpp:209
bool isOnTimerEnabled(void) const
Check if the On Timer is enabled.
Definition ir_Ecoclim.cpp:349
void checksum(void)
Update the parity bit for the internal state.
Definition ir_Ecoclim.cpp:177
void disableOnTimer(void)
Disable & clear the On Timer.
Definition ir_Ecoclim.cpp:354
void setOnTimer(const uint16_t nr_of_mins)
Set & enable the On Timer for the A/C.
Definition ir_Ecoclim.cpp:334
uint64_t getRaw(void)
Get a copy of the internal state as a valid code for this protocol.
Definition ir_Ecoclim.cpp:146
uint16_t getOffTimer(void) const
Get the Off Timer for the A/C.
Definition ir_Ecoclim.cpp:370
static stdAc::fanspeed_t toCommonFanSpeed(const uint8_t speed)
Convert a native fan speed into its stdAc equivalent.
Definition ir_Ecoclim.cpp:248
void setClock(const uint16_t nr_of_mins)
Set the clock time on the A/C unit.
Definition ir_Ecoclim.cpp:311
uint16_t getOnTimer(void) const
Get the On Timer for the A/C.
Definition ir_Ecoclim.cpp:343
Class for sending all basic IR protocols.
Definition IRsend.h:256
int8_t calibrate(uint16_t hz=38000U)
Calculate & set any offsets to account for execution times during sending.
Definition IRsend.cpp:286
const uint8_t kEcoclimFanAuto
3
Definition ir_Ecoclim.h:36
const uint8_t kEcoclimDipSlave
Definition ir_Ecoclim.h:39
const uint8_t kEcoclimFanMax
2
Definition ir_Ecoclim.h:35
const uint8_t kEcoclimFanMin
0
Definition ir_Ecoclim.h:33
const uint8_t kEcoclimHeat
5
Definition ir_Ecoclim.h:30
const uint8_t kEcoclimDry
2
Definition ir_Ecoclim.h:27
const uint8_t kEcoclimTempMin
Definition ir_Ecoclim.h:41
const uint8_t kEcoclimDipMaster
Definition ir_Ecoclim.h:38
const uint8_t kEcoclimFanMed
1
Definition ir_Ecoclim.h:34
const uint8_t kEcoclimTempMax
Definition ir_Ecoclim.h:42
const uint64_t kEcoclimDefaultState
Definition ir_Ecoclim.h:47
const uint8_t kEcoclimFan
4
Definition ir_Ecoclim.h:29
const uint16_t kEcoclimTimerDisable
Definition ir_Ecoclim.h:44
const uint8_t kEcoclimRecycle
3
Definition ir_Ecoclim.h:28
const uint8_t kEcoclimCool
1
Definition ir_Ecoclim.h:26
const uint8_t kEcoclimSleep
7
Definition ir_Ecoclim.h:31
const uint8_t kEcoclimAuto
0. a.k.a Slave
Definition ir_Ecoclim.h:25
fanspeed_t
Common A/C settings for Fan Speeds.
Definition IRsend.h:67
opmode_t
Common A/C settings for A/C operating modes.
Definition IRsend.h:55
Structure to hold a common A/C state.
Definition IRsend.h:120
Native representation of a Ecoclim A/C message.
Definition ir_Ecoclim.h:50
uint64_t Mode
Operating Mode.
Definition ir_Ecoclim.h:71
uint64_t SensorTemp
Sensed Temperature (Celsius)
Definition ir_Ecoclim.h:73
uint64_t Clear
Definition ir_Ecoclim.h:68
uint64_t OffTenMins
Off Timer minutes (in tens of mins)
Definition ir_Ecoclim.h:58
uint64_t Clock
Definition ir_Ecoclim.h:64
uint64_t DipConfig
0b0000 = Master, 0b0111 = Slave
Definition ir_Ecoclim.h:56
uint64_t Sum
Checksum (even parity over the whole frame)
Definition ir_Ecoclim.h:55
uint64_t OffHours
Off Timer nr of Hours.
Definition ir_Ecoclim.h:59
uint64_t Fan
Fan Speed.
Definition ir_Ecoclim.h:66
uint64_t Power
Power control.
Definition ir_Ecoclim.h:67
uint64_t OnHours
On Timer nr of Hours.
Definition ir_Ecoclim.h:62
uint64_t raw
The state in IR code form.
Definition ir_Ecoclim.h:51
uint64_t Temp
Desired Temperature (Celsius)
Definition ir_Ecoclim.h:70
uint64_t OnTenMins
On Timer minutes (in tens of mins)
Definition ir_Ecoclim.h:61