From 6d7863627903fae2b565e915609e48d8c2a0b44b Mon Sep 17 00:00:00 2001 From: Grzegorz Date: Mon, 28 Oct 2024 14:04:17 +0100 Subject: [PATCH] New feature Auto Clear Remote Temp for MiElHVAC (#22370) * Add prohibit function for MiElHVAC Add Prohibit functions: * Power * Temperature * Mode and all combinations of this functions Updated VaneV names for better identify * Fixed Compressor and Operation for MiElHVAC Changed Widevane position name from ISEE to AUTO sam as in MELCLoud * Revert "Fixed Compressor and Operation for MiElHVAC" This reverts commit f0973c84d4915e776f715c0749a593efc6f55953. * New feature for MiElHVAC * Added Compressor map * Added Operation Power in Watts * Added Operation Energy in kWh * Changed Widevane position name from ISEE to AUTO, displays sam as in * Changed all map value to lover case MELCloud * New feature for MiElHVAC * Add device operation time in minutes * New feature Outdoor Temperature for MiElHVAC * Add Outdoor Temperature * New feature Compressor Frequency for MiElHVAC * Added Outdoor Temperature * Renamed internal properties due typo operating and oprating to operation * New feature Auto Clear Remote Temp for MiElHVAC * This PR add auto clear remote temperature function * This funcion is call on first run and after 10 sec the remote temperature stop refresh its value * Send manually Clear command is also available * change function name, small corrections * added auto clear time configurable using cmnd --- .../tasmota_xdrv_driver/xdrv_44_miel_hvac.ino | 46 +++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino b/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino index 658796102a25..89de524cc91b 100644 --- a/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino +++ b/tasmota/tasmota_xdrv_driver/xdrv_44_miel_hvac.ino @@ -44,11 +44,15 @@ #define D_CMND_MIEL_HVAC_SETAIRDIRECTION "HVACSetAirDirection" #define D_CMND_MIEL_HVAC_SETPROHIBIT "HVACSetProhibit" #define D_CMND_MIEL_HVAC_REMOTETEMP "HVACRemoteTemp" +#define D_CMND_MIEL_HVAC_REMOTETEMP_AUTO_CLEAR_TIME "HVACRemoteTempClearTime" #include /* from hvac */ bool temp_type = false; +bool remotetemp_clear = true; +unsigned long remotetemp_auto_clear_time = 10000; +unsigned long remotetemp_last_call_time = 0; struct miel_hvac_header { uint8_t start; @@ -944,6 +948,39 @@ miel_hvac_remotetemp_degc2old(long degc) MIEL_HVAC_REMOTETEMP_OLD_FACTOR); } +static void +miel_hvac_auto_clear_remotetemp(void) +{ + struct miel_hvac_softc *sc = miel_hvac_sc; + struct miel_hvac_msg_remotetemp *rt = &sc->sc_remotetemp; + uint8_t control = MIEL_HVAC_REMOTETEMP_CLR; + long degc = 0; + + memset(rt, 0, sizeof(*rt)); + rt->seven = 0x7; + rt->control = control; + rt->temp_old = miel_hvac_remotetemp_degc2old(degc); + rt->temp = (degc + MIEL_HVAC_REMOTETEMP_OFFSET) * MIEL_HVAC_REMOTETEMP_OLD_FACTOR; + + remotetemp_clear = false; +} + +static void +miel_hvac_cmnd_remotetemp_auto_clear_time(void) +{ + if (XdrvMailbox.data_len == 0) + return; + + unsigned long clear_time = strtoul(XdrvMailbox.data, nullptr, 10); + if (clear_time == 0) { + miel_hvac_respond_unsupported(); + return; + } + remotetemp_auto_clear_time = clear_time; + + ResponseCmndNumber(remotetemp_auto_clear_time); +} + static void miel_hvac_cmnd_remotetemp(void) { @@ -960,6 +997,8 @@ miel_hvac_cmnd_remotetemp(void) degc = 0; ResponseCmndChar_P("clear"); + remotetemp_clear = false; + remotetemp_last_call_time = 0; } else { degc = strtol(XdrvMailbox.data, nullptr, 0); @@ -970,6 +1009,8 @@ miel_hvac_cmnd_remotetemp(void) degc = MIEL_HVAC_REMOTETEMP_MAX; ResponseCmndNumber(degc); + remotetemp_clear = true; + remotetemp_last_call_time = millis(); } memset(rt, 0, sizeof(*rt)); @@ -1539,6 +1580,7 @@ static const char miel_hvac_cmnd_names[] PROGMEM = "|" D_CMND_MIEL_HVAC_SETAIRDIRECTION "|" D_CMND_MIEL_HVAC_SETPROHIBIT "|" D_CMND_MIEL_HVAC_REMOTETEMP + "|" D_CMND_MIEL_HVAC_REMOTETEMP_AUTO_CLEAR_TIME #ifdef MIEL_HVAC_DEBUG "|" "HVACRequest" #endif @@ -1554,6 +1596,7 @@ static void (*const miel_hvac_cmnds[])(void) PROGMEM = { &miel_hvac_cmnd_setairdirection, &miel_hvac_cmnd_setprohibit, &miel_hvac_cmnd_remotetemp, + &miel_hvac_cmnd_remotetemp_auto_clear_time, #ifdef MIEL_HVAC_DEBUG &miel_hvac_cmnd_request, #endif @@ -1592,6 +1635,9 @@ bool Xdrv44(uint32_t function) { case FUNC_EVERY_100_MSECOND: case FUNC_EVERY_200_MSECOND: case FUNC_EVERY_SECOND: + if (remotetemp_clear && ((millis() - remotetemp_last_call_time) > remotetemp_auto_clear_time || remotetemp_last_call_time == 0)) { + miel_hvac_auto_clear_remotetemp(); + } break; case FUNC_JSON_APPEND: