Skip to content

Commit 5c63401

Browse files
Bram KragtenBram Kragten
authored andcommitted
update
1 parent e54290e commit 5c63401

File tree

1 file changed

+84
-11
lines changed

1 file changed

+84
-11
lines changed

lyric/lyric.py

Lines changed: 84 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -3,6 +3,7 @@
33
import os
44
import time
55
import requests
6+
#import json
67
from requests.compat import json
78
from requests_oauthlib import OAuth2Session
89
import urllib.parse
@@ -23,6 +24,7 @@ def __repr__(self):
2324
return '<%s: %s>' % (self.__class__.__name__, self._repr_name)
2425

2526
def _set(self, endpoint, data, **params):
27+
params['locationId'] = self._locationId
2628
self._lyric_api._post(endpoint, data, **params)
2729
self._lyric_api._bust_cache_all()
2830

@@ -301,7 +303,7 @@ def id(self):
301303
@property
302304
def name(self):
303305
return self.username
304-
306+
305307
@property
306308
def _repr_name(self):
307309
return self.username
@@ -411,6 +413,40 @@ class Thermostat(lyricDevice):
411413
# scheduleType.scheduleType String Currently selected schedule type. Would follow the values in scheduleCapabilities.availableScheduleTypes.
412414
# scheduleType.scheduleSubType String Currently selected schedule subtype.
413415

416+
def updateThermostat(self, mode=None, heatSetpoint=None, coolSetpoint=None, AutoChangeover=None, thermostatSetpointStatus=None):
417+
if mode is None:
418+
mode = self.operationMode
419+
if heatSetpoint is None:
420+
heatSetpoint = self.heatSetpoint
421+
if coolSetpoint is None:
422+
coolSetpoint = self.coolSetpoint
423+
424+
if 'thermostatSetpointStatus' in self.changeableValues:
425+
if thermostatSetpointStatus is None:
426+
thermostatSetpointStatus = self.thermostatSetpointStatus
427+
428+
if 'AutoChangeover' in self.changeableValues:
429+
if AutoChangeover is None:
430+
AutoChangeover = self.changeableValues['AutoChangeover']
431+
432+
data = [
433+
'mode' = mode,
434+
'heatSetpoint' = heatSetpoint,
435+
'coolSetpoint' = coolSetpoint
436+
]
437+
438+
if 'thermostatSetpointStatus' in self.changeableValues:
439+
data['thermostatSetpointStatus'] = thermostatSetpointStatus
440+
if 'AutoChangeover' in self.changeableValues:
441+
data['AutoChangeover'] = AutoChangeover
442+
443+
data = json.dump(data)
444+
self._set('devices/thermostats/' + self._deviceId, data)
445+
446+
@property
447+
def where(self):
448+
return self._lyric_api._location(self._locationId)['name']
449+
414450
@property
415451
def units(self):
416452
return self._lyric_api._device(self._locationId, self._deviceId)['units']
@@ -420,28 +456,65 @@ def indoorTemperature(self):
420456
if 'indoorTemperature' in self._lyric_api._device(self._locationId, self._deviceId):
421457
return self._lyric_api._device(self._locationId, self._deviceId)['indoorTemperature']
422458

459+
@property
460+
def heatSetpoint(self):
461+
return self.changeableValues['heatSetpoint']
462+
463+
@property
464+
def coolSetpoint(self):
465+
return self.changeableValues['coolSetpoint']
466+
467+
@property
468+
def thermostatSetpointStatus(self):
469+
if 'thermostatSetpointStatus' in self.changeableValues:
470+
return self.changeableValues['thermostatSetpointStatus']
471+
472+
@property
473+
def nextPeriodTime(self):
474+
if 'nextPeriodTime' in self.changeableValues:
475+
return self.changeableValues['nextPeriodTime']
476+
477+
@property
478+
def AutoChangeover(self):
479+
if 'AutoChangeover' in self.changeableValues:
480+
return self.changeableValues['AutoChangeover']
481+
482+
@property
483+
def operationMode(self):
484+
return self.operationStatus['mode']
485+
486+
@operationMode.setter
487+
def operationMode(self, mode):
488+
updateThermostat(mode=mode)
489+
423490
@property
424491
def temperatureSetpoint(self):
425-
if self.changeableValues['mode'] == 'Heat':
492+
if self.operationMode == 'Heat':
426493
return self.changeableValues['heatSetpoint']
427494
else:
428495
return self.changeableValues['coolSetpoint']
429-
496+
430497
@temperatureSetpoint.setter
431498
def temperatureSetpoint(self, setpoint, mode=None):
432499
if mode is None:
433-
if setpoint > self.indoorTemperature:
434-
mode = 'Heat';
435-
else:
500+
if setpoint < self.indoorTemperature and self.can_cool:
436501
mode = 'Cool';
502+
else:
503+
mode = 'Heat';
437504

438505
if mode=='Cool':
439-
data = '{"mode": %s,"coolSetpoint": %s}' % (mode, setpoint)
506+
updateThermostat(mode=mode, coolSetpoint=setpoint)
440507

441508
if mode=='Heat':
442-
data = '{"mode": %s, "heatSetpoint": %s}' % (mode, setpoint)
509+
updateThermostat(mode=mode, heatSetpoint=setpoint)
510+
511+
@property
512+
def can_heat(self):
513+
return ("Heat" in self.allowedModes)
443514

444-
self._set('devices/thermostats/' + self._deviceId, data, locationId=self._locationId)
515+
@property
516+
def can_cool(self):
517+
return ("Cool" in self.allowedModes)
445518

446519
@property
447520
def outdoorTemperature(self):
@@ -923,12 +996,12 @@ def _device_type(self, locationId, deviceType, deviceId):
923996
for device in self._devices_type(deviceType, locationId):
924997
if device['deviceID'] == deviceId:
925998
return device
926-
999+
9271000
def _devices_type(self, deviceType, locationId):
9281001
cache_key = 'devices_type-%s_%s' % (locationId, deviceType)
9291002
value, last_update = self._checkCache(cache_key)
9301003
now = time.time()
931-
1004+
9321005
if not value or now - last_update > self._cache_ttl:
9331006
value = self._get('devices/' + deviceType, locationId=locationId)
9341007
self._cache[cache_key] = (value, now)

0 commit comments

Comments
 (0)