From 81569f10c0bfb3ede3c8dd386b8a08c19ea1e4f8 Mon Sep 17 00:00:00 2001 From: "J. Nick Koston" Date: Tue, 7 Apr 2020 12:16:31 -0500 Subject: [PATCH] Fix nuheat reverting to auto mode after setting temp hold (#33772) * Fix nuheat reverting to auto mode after setting temp hold * clamp temp --- homeassistant/components/nuheat/climate.py | 31 +++++++++++++++++++--- homeassistant/components/nuheat/const.py | 9 ++++++- 2 files changed, 35 insertions(+), 5 deletions(-) diff --git a/homeassistant/components/nuheat/climate.py b/homeassistant/components/nuheat/climate.py index f8d6bf1d8df..c1d591c03eb 100644 --- a/homeassistant/components/nuheat/climate.py +++ b/homeassistant/components/nuheat/climate.py @@ -1,6 +1,7 @@ """Support for NuHeat thermostats.""" -from datetime import timedelta +from datetime import datetime, timedelta import logging +import time from nuheat.config import SCHEDULE_HOLD, SCHEDULE_RUN, SCHEDULE_TEMPORARY_HOLD from nuheat.util import ( @@ -24,7 +25,16 @@ from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS, TEMP_FAHRENHEIT from homeassistant.helpers import event as event_helper from homeassistant.util import Throttle -from .const import DOMAIN, MANUFACTURER, NUHEAT_API_STATE_SHIFT_DELAY +from .const import ( + DOMAIN, + MANUFACTURER, + NUHEAT_API_STATE_SHIFT_DELAY, + NUHEAT_DATETIME_FORMAT, + NUHEAT_KEY_HOLD_SET_POINT_DATE_TIME, + NUHEAT_KEY_SCHEDULE_MODE, + NUHEAT_KEY_SET_POINT_TEMP, + TEMP_HOLD_TIME_SEC, +) _LOGGER = logging.getLogger(__name__) @@ -218,9 +228,22 @@ class NuHeatThermostat(ClimateDevice): target_schedule_mode, ) - self._thermostat.set_target_temperature( - target_temperature, target_schedule_mode + target_temperature = max( + min(self._thermostat.max_temperature, target_temperature), + self._thermostat.min_temperature, ) + + request = { + NUHEAT_KEY_SET_POINT_TEMP: target_temperature, + NUHEAT_KEY_SCHEDULE_MODE: target_schedule_mode, + } + + if target_schedule_mode == SCHEDULE_TEMPORARY_HOLD: + request[NUHEAT_KEY_HOLD_SET_POINT_DATE_TIME] = datetime.fromtimestamp( + time.time() + TEMP_HOLD_TIME_SEC + ).strftime(NUHEAT_DATETIME_FORMAT) + + self._thermostat.set_data(request) self._schedule_mode = target_schedule_mode self._target_temperature = target_temperature self._schedule_update() diff --git a/homeassistant/components/nuheat/const.py b/homeassistant/components/nuheat/const.py index 1bb6c3825e7..bd44dcb1711 100644 --- a/homeassistant/components/nuheat/const.py +++ b/homeassistant/components/nuheat/const.py @@ -8,4 +8,11 @@ CONF_SERIAL_NUMBER = "serial_number" MANUFACTURER = "NuHeat" -NUHEAT_API_STATE_SHIFT_DELAY = 4 +NUHEAT_API_STATE_SHIFT_DELAY = 1 + +TEMP_HOLD_TIME_SEC = 43200 + +NUHEAT_KEY_SET_POINT_TEMP = "SetPointTemp" +NUHEAT_KEY_SCHEDULE_MODE = "ScheduleMode" +NUHEAT_KEY_HOLD_SET_POINT_DATE_TIME = "HoldSetPointDateTime" +NUHEAT_DATETIME_FORMAT = "%a, %d %b %Y %H:%M:%S GMT"