|
10 | 10 | import logging |
11 | 11 | import struct |
12 | 12 | import codecs |
13 | | -from datetime import datetime, timedelta, time |
| 13 | +from datetime import datetime, timedelta |
| 14 | +from construct import Byte |
14 | 15 | from enum import IntEnum |
15 | 16 |
|
16 | 17 | from .connection import BTLEConnection |
17 | | -from .structures import * |
| 18 | +from .structures import AwayDataAdapter, DeviceId, Schedule, Status |
18 | 19 |
|
19 | 20 | _LOGGER = logging.getLogger(__name__) |
20 | 21 |
|
@@ -80,6 +81,12 @@ def __init__(self, _mac, connection_cls=BTLEConnection): |
80 | 81 |
|
81 | 82 | self._schedule = {} |
82 | 83 |
|
| 84 | + self._window_open_temperature = None |
| 85 | + self._window_open_time = None |
| 86 | + self._comfort_temperature = None |
| 87 | + self._eco_temperature = None |
| 88 | + self._temperature_offset = None |
| 89 | + |
83 | 90 | self._away_temp = EQ3BT_AWAY_TEMP |
84 | 91 | self._away_duration = timedelta(days=30) |
85 | 92 | self._away_end = None |
@@ -143,10 +150,30 @@ def handle_notification(self, data): |
143 | 150 | else: |
144 | 151 | self._mode = Mode.Auto |
145 | 152 |
|
146 | | - _LOGGER.debug("Valve state: %s", self._valve_state) |
147 | | - _LOGGER.debug("Mode: %s", self.mode_readable) |
148 | | - _LOGGER.debug("Target temp: %s", self._target_temperature) |
149 | | - _LOGGER.debug("Away end: %s", self._away_end) |
| 153 | + presets = status.presets |
| 154 | + if presets: |
| 155 | + self._window_open_temperature = presets.window_open_temp |
| 156 | + self._window_open_time = presets.window_open_time |
| 157 | + self._comfort_temperature = presets.comfort_temp |
| 158 | + self._eco_temperature = presets.eco_temp |
| 159 | + self._temperature_offset = presets.offset |
| 160 | + else: |
| 161 | + self._window_open_temperature = None |
| 162 | + self._window_open_time = None |
| 163 | + self._comfort_temperature = None |
| 164 | + self._eco_temperature = None |
| 165 | + self._temperature_offset = None |
| 166 | + |
| 167 | + _LOGGER.debug("Valve state: %s", self._valve_state) |
| 168 | + _LOGGER.debug("Mode: %s", self.mode_readable) |
| 169 | + _LOGGER.debug("Target temp: %s", self._target_temperature) |
| 170 | + _LOGGER.debug("Away end: %s", self._away_end) |
| 171 | + _LOGGER.debug("Window open temp: %s", |
| 172 | + self._window_open_temperature) |
| 173 | + _LOGGER.debug("Window open time: %s", self._window_open_time) |
| 174 | + _LOGGER.debug("Comfort temp: %s", self._comfort_temperature) |
| 175 | + _LOGGER.debug("Eco temp: %s", self._eco_temperature) |
| 176 | + _LOGGER.debug("Temp offset: %s", self._temperature_offset) |
150 | 177 |
|
151 | 178 | elif data[0] == PROP_SCHEDULE_RETURN: |
152 | 179 | parsed = self.parse_schedule(data) |
@@ -338,6 +365,16 @@ def window_open_config(self, temperature, duration): |
338 | 365 | int(temperature * 2), int(duration.seconds / 300)) |
339 | 366 | self._conn.make_request(PROP_WRITE_HANDLE, value) |
340 | 367 |
|
| 368 | + @property |
| 369 | + def window_open_temperature(self): |
| 370 | + """The temperature to set when an open window is detected.""" |
| 371 | + return self._window_open_temperature |
| 372 | + |
| 373 | + @property |
| 374 | + def window_open_time(self): |
| 375 | + """Timeout to reset the thermostat after an open window is detected.""" |
| 376 | + return self._window_open_time |
| 377 | + |
341 | 378 | @property |
342 | 379 | def locked(self): |
343 | 380 | """Returns True if the thermostat is locked.""" |
@@ -365,6 +402,22 @@ def temperature_presets(self, comfort, eco): |
365 | 402 | int(eco * 2)) |
366 | 403 | self._conn.make_request(PROP_WRITE_HANDLE, value) |
367 | 404 |
|
| 405 | + @property |
| 406 | + def comfort_temperature(self): |
| 407 | + """Returns the comfort temperature preset of the thermostat.""" |
| 408 | + return self._comfort_temperature |
| 409 | + |
| 410 | + @property |
| 411 | + def eco_temperature(self): |
| 412 | + """Returns the eco temperature preset of the thermostat.""" |
| 413 | + return self._eco_temperature |
| 414 | + |
| 415 | + @property |
| 416 | + def temperature_offset(self): |
| 417 | + """Returns the thermostat's temperature offset.""" |
| 418 | + return self._temperature_offset |
| 419 | + |
| 420 | + @temperature_offset.setter |
368 | 421 | def temperature_offset(self, offset): |
369 | 422 | """Sets the thermostat's temperature offset.""" |
370 | 423 | _LOGGER.debug("Setting offset: %s", offset) |
|
0 commit comments