-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathesp32_midea_RS485.h
More file actions
130 lines (116 loc) · 3.63 KB
/
Copy pathesp32_midea_RS485.h
File metadata and controls
130 lines (116 loc) · 3.63 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
/*
ESP32 library to control/monitor Midea air conditioner via XYE (RS485) bus
*/
#ifndef _esp32_midea_rs485_h
#define _esp32_midea_rs485_h
#include "Arduino.h"
typedef enum{
MIDEA_AC_OPMODE_OFF=0,
MIDEA_AC_OPMODE_AUTO,
MIDEA_AC_OPMODE_AUTO_HEAT,
MIDEA_AC_OPMODE_AUTO_COOL,
MIDEA_AC_OPMODE_COOL,
MIDEA_AC_OPMODE_DRY,
MIDEA_AC_OPMODE_HEAT,
MIDEA_AC_OPMODE_FAN,
MIDEA_AC_OPMODE_UNKOWN
}MideaACOpModeType;
typedef enum{
MIDEA_AC_FANMODE_AUTO=0,
MIDEA_AC_FANMODE_HIGH,
MIDEA_AC_FANMODE_MEDIUM,
MIDEA_AC_FANMODE_LOW,
MIDEA_AC_FANMODE_UNKNOWN
}MideaACFanModeType;
typedef enum{
MIDEA_AC_ACTIVE=0,
MIDEA_AC_INACTIVE=1,
}MideaACOpFeatureStateType;
typedef enum{
MIDEA_SWING_OFF=0,
MIDEA_SWING_ON=71
} MideaACOpFeatureSwingType;
typedef enum{
MIDEA_SWING1_OFF=0,
MIDEA_SWING1_OFF1=64,
MIDEA_SWING1_OFF2=70,
MIDEA_SWING_1=65,
MIDEA_SWING_2=66,
MIDEA_SWING_3=67,
MIDEA_SWING_4=68,
MIDEA_SWING_5=69,
MIDEA_SWING_AUTO=71
}MideaACOpFeatureSwingPosType;
typedef struct{
uint8_t Unknown1;
uint8_t Capabilities;
MideaACOpModeType OpMode;
MideaACFanModeType FanMode;
uint8_t SetTemp;
int T1Temp;
int T2ATemp;
//int T2BTemp;
//int T3Temp;
uint8_t Current;
uint8_t Unknown2;
uint32_t TimerStart;
uint32_t TimerStop;
uint8_t Unknown3;
uint8_t ModeFlags;
uint8_t OperatingFlags;
uint16_t ErrorFlags;
uint16_t ProtectFlags;
uint8_t CCMComErrorFlags;
uint8_t Unknown4;
uint8_t Unknown5;
uint8_t ACNotResponding;
}MideaACPropertiesType;
typedef struct{
MideaACOpModeType OpMode;
MideaACFanModeType FanMode;
uint8_t SetTemp;
MideaACOpFeatureStateType AuxHeat_Turbo;
MideaACOpFeatureStateType Echo_Sleep;
MideaACOpFeatureSwingType Swing;
MideaACOpFeatureSwingPosType SwingPos;
MideaACOpFeatureStateType Vent;
uint32_t TimerStart;
uint32_t TimerStop;
}MideaACCommandType;
class ESP32_Midea_RS485Class {
public:
ESP32_Midea_RS485Class(HardwareSerial *hwSerial, uint8_t ro_pin, uint8_t di_pin, /*uint8_t re_de_pin,*/ uint8_t master_id, uint8_t slave_id, uint8_t command_time, uint8_t response_timeout);
virtual void begin(HardwareSerial *hwSerial, uint8_t ro_pin, uint8_t di_pin, /*uint8_t re_de_pin,*/ uint8_t master_id, uint8_t slave_id, uint8_t command_time, uint8_t response_timeout);
uint8_t SetMode(MideaACOpModeType mode);
uint8_t SetFanMode(MideaACFanModeType fan_mode);
uint8_t SetTemp(uint8_t temp);
uint8_t SetAuxHeat_Turbo(MideaACOpFeatureStateType value);
uint8_t SetEcho_Sleep(MideaACOpFeatureStateType value);
uint8_t SetSwing(MideaACOpFeatureSwingType value);
uint8_t SetSwingPos(MideaACOpFeatureSwingPosType value);
uint8_t SetVent(MideaACOpFeatureStateType value);
void Update();
void Lock();
void Unlock();
MideaACPropertiesType State;
uint8_t SentData[16];
uint8_t ReceivedData[40];
MideaACCommandType DesiredState;
private:
HardwareSerial *SerialBus;
uint8_t datain_pin;
uint8_t dataout_pin;
uint8_t SlaveId;
uint8_t MasterId;
uint8_t Master_Send_Time;
uint8_t Slave_Resp_Time;
uint8_t UpdateNextCycle;
protected:
uint8_t CalculateCRC(uint8_t len);
void ClearResponseBuffer();
uint8_t ParseResponse();
uint8_t CalculateSetTime(uint32_t time);
uint32_t CalculateGetTime(uint8_t time);
};
extern ESP32_Midea_RS485Class ESP32_Midea_RS485;
#endif