Skip to content

Commit

Permalink
#3 Added support for climate presets
Browse files Browse the repository at this point in the history
  • Loading branch information
asev committed Feb 2, 2021
1 parent 1180097 commit 80b4c33
Show file tree
Hide file tree
Showing 3 changed files with 37 additions and 5 deletions.
2 changes: 1 addition & 1 deletion README.md
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ Thermostat names can be changed in Uponor Smatrix app or via configuration.

`switch.uponor_away` controls away mode. It activates ECO mode for all thermostat.

`switch.uponor_cooling_mode` activates cooling when switched on and heating mode when it's switched off.
`switch.uponor_cooling_mode` activates cooling mode when switched on and heating mode when it's switched off.
This switch will be added only if cooling is available in your system.

## Configuration
Expand Down
21 changes: 18 additions & 3 deletions custom_components/uponor/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -127,13 +127,23 @@ def get_humidity(self, thermostat):
# Temperature setpoint

def get_setpoint(self, thermostat):
setback = 0
var_setback = thermostat + '_eco_offset'
if var_setback in self._data and (self.is_eco(thermostat) or self.is_away()):
setback = int(self._data[var_setback])

var = thermostat + '_setpoint'
if var in self._data:
return math.floor((int(self._data[var]) - 320) / 1.8) / 10
return math.floor((int(self._data[var]) - setback - 320) / 1.8) / 10

def set_setpoint(self, thermostat, temp):
setback = 0
var_setback = thermostat + '_eco_offset'
if var_setback in self._data and (self.is_eco(thermostat) or self.is_away()):
setback = int(self._data[var_setback])

var = thermostat + '_setpoint'
setpoint = int(temp * 18 + 320)
setpoint = int(temp * 18 + setback + 320)
self._client.send_data({var: setpoint})
self._data[var] = setpoint
async_dispatcher_send(self._hass, SIGNAL_UPONOR_STATE_UPDATE)
Expand Down Expand Up @@ -221,7 +231,7 @@ def is_cool_enabled(self):
if var in self._data:
return self._data[var] == "1"

# Away mode
# Away & Eco

def is_away(self):
var = 'sys_forced_eco_mode'
Expand All @@ -234,6 +244,11 @@ async def async_set_away(self, is_away):
self._data[var] = data
async_dispatcher_send(self._hass, SIGNAL_UPONOR_STATE_UPDATE)

def is_eco(self, thermostat):
var = thermostat + '_stat_cb_comfort_eco_mode'
var_temp = 'cust_Temporary_ECO_Activation'
return (var in self._data and self._data[var] == "1") or (var_temp in self._data and self._data[var_temp] == "1")

# Rest

async def async_update(self, event_time):
Expand Down
19 changes: 18 additions & 1 deletion custom_components/uponor/climate.py
Original file line number Diff line number Diff line change
Expand Up @@ -11,7 +11,12 @@
CURRENT_HVAC_HEAT,
CURRENT_HVAC_COOL,
CURRENT_HVAC_IDLE,
PRESET_AWAY,
PRESET_COMFORT,
PRESET_ECO,
SUPPORT_TARGET_TEMPERATURE,
SUPPORT_PRESET_MODE

)
from homeassistant.const import ATTR_TEMPERATURE, TEMP_CELSIUS

Expand Down Expand Up @@ -69,7 +74,7 @@ def _update_callback(self):
@property
def supported_features(self):
if self._is_on:
return SUPPORT_TARGET_TEMPERATURE
return SUPPORT_TARGET_TEMPERATURE | SUPPORT_PRESET_MODE
return 0

@property
Expand Down Expand Up @@ -102,6 +107,18 @@ def hvac_modes(self):
return [HVAC_MODE_COOL, HVAC_MODE_OFF]
return [HVAC_MODE_HEAT, HVAC_MODE_OFF]

@property
def preset_mode(self):
if self._state_proxy.is_eco(self._thermostat):
return PRESET_ECO
if self._state_proxy.is_away():
return PRESET_AWAY
return PRESET_COMFORT

@property
def preset_modes(self):
return [self.preset_mode]

@property
def temperature_unit(self):
return TEMP_CELSIUS
Expand Down

0 comments on commit 80b4c33

Please sign in to comment.