Skip to content

Commit

Permalink
Store multiple state values. One for each state
Browse files Browse the repository at this point in the history
  • Loading branch information
mickeprag committed May 3, 2019
1 parent b93808e commit eed2737
Show file tree
Hide file tree
Showing 2 changed files with 41 additions and 12 deletions.
42 changes: 33 additions & 9 deletions telldus/src/telldus/Device.py
Original file line number Diff line number Diff line change
Expand Up @@ -117,7 +117,7 @@ def __init__(self):
self._name = None
self._manager = None
self._state = Device.TURNOFF
self._stateValue = ''
self._stateValues = {}
self._sensorValues = {}
self._confirmed = True
self.valueChangedTime = {}
Expand Down Expand Up @@ -260,9 +260,9 @@ def loadCached(self, olddevice):
self._name = olddevice._name
self._loadCount = 0
self.setParams(olddevice.params())
(state, stateValue) = olddevice.state()
(state, __stateValue) = olddevice.state()
self._state = state
self._stateValue = stateValue
self._stateValues = olddevice.stateValues()
self._ignored = olddevice._ignored
self._sensorValues = olddevice._sensorValues

Expand Down Expand Up @@ -460,7 +460,7 @@ def setState(self, state, stateValue=None, ack=None, origin=None, onlyUpdateIfCh
"""
if stateValue is None:
stateValue = ''
if self._state == state and self._stateValue == stateValue:
if self._state == state and self._stateValues.get(state, None) == stateValue:
if self.lastUpdated and self.lastUpdated > int(time.time() - 1):
# Same state/statevalue and less than one second ago, most probably
# just the same value being resent, ignore
Expand All @@ -470,11 +470,13 @@ def setState(self, state, stateValue=None, ack=None, origin=None, onlyUpdateIfCh
return
self.lastUpdated = time.time()
self._state = state
self._stateValue = stateValue
if state in (Device.DIM, Device.RGB, Device.THERMOSTAT) \
and stateValue is not None and stateValue is not '':
self._stateValues[str(state)] = stateValue
if self._manager:
self._manager.stateUpdated(self, ackId=ack, origin=origin)

def setStateFailed(self, state, stateValue='', reason=0, origin=None):
def setStateFailed(self, state, stateValue=None, reason=0, origin=None):
if self._manager:
self._manager.stateUpdatedFail(self, state, stateValue, reason, origin)

Expand All @@ -488,7 +490,27 @@ def state(self):
state, stateValue = device.state()
"""
return (self._state, self._stateValue)
return (self._state, self.stateValue())

def stateValue(self, state=None):
"""
.. versionadded:: 1.2
:returns: The statevalue for the specified state.
:param state: The state to request the value for. If no state is specified the current state
is used
:type state: int or None
"""
state = state or self._state
return self._stateValues.get(str(state), '')

def stateValues(self):
"""
.. versionadded:: 1.2
:returns: a dict of all state values for the device
"""
return self._stateValues

def typeString(self):
"""
Expand Down Expand Up @@ -599,8 +621,10 @@ def __init__(self, settings):
self.storedmethods = settings['methods']
if 'state' in settings:
self._state = settings['state']
if 'stateValue' in settings:
self._stateValue = settings['stateValue']
if 'stateValues' in settings:
self._stateValues = settings['stateValues']
if 'stateValue' in settings and settings['stateValue'] is not None:
self._stateValues[str(self._state)] = settings['stateValue']
if 'battery' in settings:
self.batteryLevel = settings['battery']
if 'ignored' in settings:
Expand Down
11 changes: 8 additions & 3 deletions telldus/src/telldus/DeviceManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -103,6 +103,7 @@ def addDevice(self, device):
'methods': device.methods(),
'state': state,
'stateValue': stateValue,
'stateValues': device.stateValues(),
'protocol': device.protocol(),
'model': device.model(),
'parameters': parameters,
Expand Down Expand Up @@ -281,7 +282,9 @@ def sensorValuesUpdated(self, device, values):
def stateUpdated(self, device, ackId=None, origin=None):
if device.isDevice() is False:
return
extras = {}
extras = {
'stateValues': device.stateValues()
}
if ackId:
extras['ACK'] = ackId
if origin:
Expand Down Expand Up @@ -478,7 +481,8 @@ def __deviceStateChanged(self, device, state, stateValue, origin):
def save(self):
data = []
for device in self.devices:
(state, stateValue) = device.state()
(state, __stateValue) = device.state()
stateValues = device.stateValues()
dev = {
"id": device.id(),
"loadCount": device.loadCount(),
Expand All @@ -488,7 +492,7 @@ def save(self):
"params": device.params(),
"methods": device.methods(),
"state": state,
"stateValue": stateValue,
"stateValues": stateValues,
"ignored": device.ignored(),
"isSensor": device.isSensor()
}
Expand Down Expand Up @@ -528,6 +532,7 @@ def __sendDeviceReport(self):
'methods': device.methods(),
'state': state,
'stateValue': str(stateValue),
'stateValues': device.stateValues(),
'protocol': device.protocol(),
'model': device.model(),
'parametersHash': parametersHash.hexdigest(),
Expand Down

0 comments on commit eed2737

Please sign in to comment.