mqtt-ir-remote/IRremoteESP8266/src/ir_Argo.h

125 lines
3.1 KiB
C++

/* Copyright 2017 Schmolders
// Adds support for Argo Ulisse 13 DCI Mobile Split ACs.
*/
#ifndef IR_ARGO_H_
#define IR_ARGO_H_
#include "IRremoteESP8266.h"
#include "IRsend.h"
// ARGO Ulisse DCI
/*
Protocol Description:
All in LSB first as it is sent. argo message array will be stored MSB first!
do LSB-MSB conversion in sendData
Byte 0: const 0 0 1 1 0 1 0 1
Byte 1: const 1 0 1 0 1 1 1 1
Byte 2: 0 0 0, 3bit Cool/Heat Mode, 2bit start SetTemp LSB first
Byte 3: 3bit End SetTemp, 2bit Fan Mode, 3bit RoomTemp LSB first
Byte 4: 2bit RoomTemp, 3bit Flap Mode, 3bit OnTimer
Byte 5: 8bit OnTimer
Byte 6: 8Bit OffTimer
Byte 7: 3bit OffTimer, 5bit Time
Byte 8: 6bit Time, 1bit Timer On/Off, 1bit Timer Program
Byte 9: 1bit Timer Program, 1bit Timer 1h, 1 bit Night Mode, 1bit Max Mode, 1bit Filter, 1bit on/off, 1bit const 0, 1bit iFeel
Byte 10: 2bit const 0 1, 6bit Checksum
Byte 11: 2bit Checksum
*/
// Constants. Store MSB left.
#define ARGO_COOL_ON 0U // 0b000
#define ARGO_COOL_OFF 3U // 0b110
#define ARGO_COOL_AUTO 2U // 0b010
#define ARGO_COOl_HUM 1U // 0b100
#define ARGO_HEAT_ON 0U // 0b001
#define ARGO_HEAT_AUTO 1U // 0b101
#define ARGO_HEAT_BLINK 2U // 0b011 // ??no idea what mode that is
#define ARGO_MIN_TEMP 10U // Celsius offset +4
#define ARGO_MAX_TEMP 32U // Celsius
#define ARGO_FAN_AUTO 0U // 0b00
#define ARGO_FAN_3 3U // 0b11
#define ARGO_FAN_2 2U // 0b01
#define ARGO_FAN_1 1U // 0b10
#define ARGO_FLAP_AUTO 0U // 0b000
#define ARGO_FLAP_1 1U // 0b100
#define ARGO_FLAP_2 2U // 0b010
#define ARGO_FLAP_3 3U // 0b110
#define ARGO_FLAP_4 4U // 0b001
#define ARGO_FLAP_5 5U // 0b101
#define ARGO_FLAP_6 6U // 0b011
#define ARGO_FLAP_FULL 7U // 0b111
class IRArgoAC {
public:
explicit IRArgoAC(uint16_t pin);
#if SEND_ARGO
void send();
#endif // SEND_ARGO
void begin();
void on();
void off();
void setPower(bool state);
uint8_t getPower();
void setTemp(uint8_t temp);
uint8_t getTemp();
void setFan(uint8_t fan);
uint8_t getFan();
void setFlap(uint8_t flap);
uint8_t getFlap();
void setCoolMode(uint8_t mode);
uint8_t getCoolMode();
void setHeatMode(uint8_t mode);
uint8_t getHeatMode();
uint8_t getMode();
void setMax(bool state);
bool getMax();
void setNight(bool state);
bool getNight();
void setiFeel(bool state);
bool getiFeel();
void setTime();
void setRoomTemp(uint8_t temp);
uint8_t* getRaw();
private:
// # of bytes per command
uint8_t argo[ARGO_COMMAND_LENGTH]; // Defined in IRremoteESP8266.h
void stateReset();
void checksum();
IRsend _irsend; // instance of the IR send class
// Attributes
uint8_t set_temp;
uint8_t fan_mode;
uint8_t flap_mode;
uint8_t ac_state;
uint8_t ac_mode; // heat 1, cool 0
uint8_t heat_mode;
uint8_t cool_mode;
uint8_t night_mode; // on/off
uint8_t max_mode; // on/off
uint8_t ifeel_mode; // on/off
};
#endif // IR_ARGO_H_