Daikin: Support setting temperature in 0.5 C unit (#2036)

However, IRDaikinESP didn't support it.
This PR allows to set and get the temperature in 0.5 C unit.

It looks like some other Daikin protocols also support setting the
temperature in 0.5 C unit:
* Daikin2
* Daikin216
* Daikin160
* Daikin176
* Daikin152

However, they are not implemented in this PR, because I cannot test them.
This commit is contained in:
K.Takata
2023-12-11 15:45:41 +09:00
committed by GitHub
parent 089ca898d0
commit f67948f6c8
2 changed files with 11 additions and 11 deletions

View File

@@ -46,6 +46,7 @@ using irutils::addModeToString;
using irutils::addSwingHToString;
using irutils::addSwingVToString;
using irutils::addTempToString;
using irutils::addTempFloatToString;
using irutils::addFanToString;
using irutils::bcdToUint8;
using irutils::minsToString;
@@ -221,15 +222,15 @@ bool IRDaikinESP::getPower(void) const {
/// Set the temperature.
/// @param[in] temp The temperature in degrees celsius.
void IRDaikinESP::setTemp(const uint8_t temp) {
uint8_t degrees = std::max(temp, kDaikinMinTemp);
degrees = std::min(degrees, kDaikinMaxTemp);
_.Temp = degrees;
void IRDaikinESP::setTemp(const float temp) {
float degrees = std::max(temp, static_cast<float>(kDaikinMinTemp));
degrees = std::min(degrees, static_cast<float>(kDaikinMaxTemp));
_.Temp = degrees * 2.0f;
}
/// Get the current temperature setting.
/// @return The current setting for temp. in degrees celsius.
uint8_t IRDaikinESP::getTemp(void) const { return _.Temp; }
float IRDaikinESP::getTemp(void) const { return _.Temp / 2.0f; }
/// Set the speed of the fan.
/// @param[in] fan The desired setting.
@@ -536,7 +537,7 @@ stdAc::state_t IRDaikinESP::toCommon(void) const {
result.power = _.Power;
result.mode = toCommonMode(_.Mode);
result.celsius = true;
result.degrees = _.Temp;
result.degrees = getTemp();
result.fanspeed = toCommonFanSpeed(getFan());
result.swingv = _.SwingV ? stdAc::swingv_t::kAuto :
stdAc::swingv_t::kOff;
@@ -563,7 +564,7 @@ String IRDaikinESP::toString(void) const {
result += addBoolToString(_.Power, kPowerStr, false);
result += addModeToString(_.Mode, kDaikinAuto, kDaikinCool, kDaikinHeat,
kDaikinDry, kDaikinFan);
result += addTempToString(_.Temp);
result += addTempFloatToString(getTemp());
result += addFanToString(getFan(), kDaikinFanMax, kDaikinFanMin,
kDaikinFanAuto, kDaikinFanQuiet, kDaikinFanMed);
result += addBoolToString(_.Powerful, kPowerfulStr);

View File

@@ -99,8 +99,7 @@ union DaikinESPProtocol{
uint64_t Mode :3;
uint64_t :1;
// Byte 22
uint64_t :1;
uint64_t Temp :7; // Temp should be between 10 - 32
uint64_t Temp :8; // Temp should be between 20 - 64 (10 C - 32 C)
// Byte 23
uint64_t :8;
@@ -738,8 +737,8 @@ class IRDaikinESP {
void off(void);
void setPower(const bool on);
bool getPower(void) const;
void setTemp(const uint8_t temp);
uint8_t getTemp(void) const;
void setTemp(const float temp);
float getTemp(void) const;
void setFan(const uint8_t fan);
uint8_t getFan(void) const;
void setMode(const uint8_t mode);