From 5e47dda21029588d5db86bffb921d6d2693dcc9b Mon Sep 17 00:00:00 2001 From: crankyoldgit Date: Sun, 19 Sep 2021 22:15:38 +1000 Subject: [PATCH] Re-work "Fan Only" strings & matching. * Improve compatiblity and human clarity. * Add note about why it exists in the first place. Replaces PR #1604 --- src/IRac.cpp | 10 ++++++++-- src/IRtext.cpp | 11 +++++++++-- src/IRtext.h | 3 +++ src/locale/defaults.h | 14 +++++++++++++- 4 files changed, 33 insertions(+), 5 deletions(-) diff --git a/src/IRac.cpp b/src/IRac.cpp index 60559634c..a4eb8af33 100644 --- a/src/IRac.cpp +++ b/src/IRac.cpp @@ -3076,8 +3076,14 @@ stdAc::opmode_t IRac::strToOpmode(const char *str, !strcasecmp(str, "DEHUMIDIFY")) return stdAc::opmode_t::kDry; else if (!strcasecmp(str, kFanStr) || - !strcasecmp(str, "FANONLY") || - !strcasecmp(str, kFanOnlyStr)) + // The following Fans strings with "only" are required to help with + // HomeAssistant & Google Home Climate integration. + // For compatibility only. + // Ref: https://www.home-assistant.io/integrations/google_assistant/#climate-operation-modes + !strcasecmp(str, kFanOnlyStr) || + !strcasecmp(str, kFan_OnlyStr) || + !strcasecmp(str, kFanOnlyWithSpaceStr) || + !strcasecmp(str, kFanOnlyNoSpaceStr)) return stdAc::opmode_t::kFan; else return def; diff --git a/src/IRtext.cpp b/src/IRtext.cpp index 008b102b5..a8959d43e 100644 --- a/src/IRtext.cpp +++ b/src/IRtext.cpp @@ -107,9 +107,16 @@ const PROGMEM char* kAutomaticStr = D_STR_AUTOMATIC; ///< "Automatic" const PROGMEM char* kManualStr = D_STR_MANUAL; ///< "Manual" const PROGMEM char* kCoolStr = D_STR_COOL; ///< "Cool" const PROGMEM char* kHeatStr = D_STR_HEAT; ///< "Heat" -const PROGMEM char* kFanStr = D_STR_FAN; ///< "Fan" const PROGMEM char* kDryStr = D_STR_DRY; ///< "Dry" -const PROGMEM char* kFanOnlyStr = D_STR_FANONLY; ///< "fan_only" +const PROGMEM char* kFanStr = D_STR_FAN; ///< "Fan" +// The following Fans strings with "only" are required to help with +// HomeAssistant & Google Home Climate integration. For compatibility only. +// Ref: https://www.home-assistant.io/integrations/google_assistant/#climate-operation-modes +const PROGMEM char* kFanOnlyStr = D_STR_FANONLY; ///< "fan-only" +const PROGMEM char* kFan_OnlyStr = D_STR_FAN_ONLY; ///< "fan_only" (legacy use) +const PROGMEM char* kFanOnlyWithSpaceStr = D_STR_FANSPACEONLY; ///< "Fan Only" +const PROGMEM char* kFanOnlyNoSpaceStr = D_STR_FANONLYNOSPACE; ///< "FanOnly" + const PROGMEM char* kRecycleStr = D_STR_RECYCLE; ///< "Recycle" const PROGMEM char* kMaxStr = D_STR_MAX; ///< "Max" diff --git a/src/IRtext.h b/src/IRtext.h index 55840688d..20d1a958a 100644 --- a/src/IRtext.h +++ b/src/IRtext.h @@ -51,7 +51,10 @@ extern const char* kEconoToggleStr; extern const char* kEyeAutoStr; extern const char* kEyeStr; extern const char* kFalseStr; +extern const char* kFanOnlyNoSpaceStr; +extern const char* kFan_OnlyStr; extern const char* kFanOnlyStr; +extern const char* kFanOnlyWithSpaceStr; extern const char* kFanStr; extern const char* kFastStr; extern const char* kFilterStr; diff --git a/src/locale/defaults.h b/src/locale/defaults.h index bae02265a..0bdfefbc4 100644 --- a/src/locale/defaults.h +++ b/src/locale/defaults.h @@ -305,8 +305,20 @@ #define D_STR_FAN "Fan" #endif // D_STR_FAN #ifndef D_STR_FANONLY -#define D_STR_FANONLY "fan_only" +#define D_STR_FANONLY "fan-only" #endif // D_STR_FANONLY +#ifndef D_STR_FAN_ONLY +#define D_STR_FAN_ONLY "fan_only" +#endif // D_STR_FAN_ONLY +#ifndef D_STR_ONLY +#define D_STR_ONLY "Only" +#endif // D_STR_ONLY +#ifndef D_STR_FANSPACEONLY +#define D_STR_FANSPACEONLY D_STR_FAN " " D_STR_ONLY +#endif // D_STR_FANSPACEONLY +#ifndef D_STR_FANONLYNOSPACE +#define D_STR_FANONLYNOSPACE D_STR_FAN D_STR_ONLY +#endif // D_STR_FANONLYNOSPACE #ifndef D_STR_DRY #define D_STR_DRY "Dry" #endif // D_STR_DRY