Skip to content

Commit

Permalink
Merge remote-tracking branch 'origin/room'
Browse files Browse the repository at this point in the history
  • Loading branch information
mickeprag committed May 8, 2019
2 parents eed2737 + d2bc7c0 commit 8b5361d
Show file tree
Hide file tree
Showing 10 changed files with 438 additions and 42 deletions.
2 changes: 1 addition & 1 deletion events/src/events/base/EventManager.py
Original file line number Diff line number Diff line change
Expand Up @@ -40,7 +40,7 @@ def loadEvent(self, eventId, data, storeddata):
event.loadTriggers(data['triggers'])
self.events[eventId] = event

def liveRegistered(self, msg):
def liveRegistered(self, msg, refreshRequired):
changed = False
if 'latitude' in msg and msg['latitude'] != self.latitude:
changed = True
Expand Down
2 changes: 1 addition & 1 deletion led/src/led/Led.py
Original file line number Diff line number Diff line change
Expand Up @@ -20,7 +20,7 @@ def __init__(self):
def liveConnected(self):
self.setNetworkLed()

def liveRegistered(self, msg):
def liveRegistered(self, msg, refreshRequired):
self.setNetworkLed()

def liveDisconnected(self):
Expand Down
13 changes: 9 additions & 4 deletions live/src/tellduslive/base/TelldusLive.py
Original file line number Diff line number Diff line change
Expand Up @@ -37,7 +37,7 @@ class ITelldusLiveObserver(IInterface):
"""
def liveConnected():
"""This method is called when we have succesfully connected to a Live! server"""
def liveRegistered(params):
def liveRegistered(params, refreshRequired):
"""This method is called when we have succesfully registered with a Live! server"""
def liveDisconnected():
"""This method is call when we are disconnected"""
Expand All @@ -51,6 +51,7 @@ def __init__(self):
self.email = ''
self.supportedMethods = 0
self.connected = False
self.refreshRequired = True
self.registered = False
self.running = False
self.serverList = ServerList()
Expand Down Expand Up @@ -108,7 +109,8 @@ def handleMessage(self, message):
if 'uuid' in data and data['uuid'] != self.uuid:
self.uuid = data['uuid']
self.settings['uuid'] = self.uuid
self.liveRegistered(data)
self.liveRegistered(data, self.refreshRequired)
self.refreshRequired = False
return

if (message.name() == "command"):
Expand Down Expand Up @@ -155,9 +157,9 @@ def liveDisconnected(self):
self.observers.liveDisconnected()

@signal
def liveRegistered(self, options):
def liveRegistered(self, options, refreshRequired):
"""This signal is sent when we have succesfully registered with a Live! server"""
self.observers.liveRegistered(options)
self.observers.liveRegistered(options, refreshRequired)

def run(self):
self.running = True
Expand All @@ -181,6 +183,9 @@ def run(self):
logging.warning("Could not connect, retry in %i seconds", wait)

elif state == ServerConnection.CONNECTED:
if (pongTimer + 43200) < time.time():
# 12 hours since last online
self.refreshRequired = True
pongTimer, self.pingTimer = (time.time(), time.time())
self.__sendRegisterMessage()

Expand Down
6 changes: 6 additions & 0 deletions rf433/src/rf433/RF433.py
Original file line number Diff line number Diff line change
Expand Up @@ -193,6 +193,12 @@ def parameters(self):
def protocol(self):
return self._protocol

def setParameter(self, name, value):
if name not in ('code', 'fade', 'house', 'system', 'unit', 'units'):
return
self._protocolParams[name] = value
self.paramUpdated(name)

def setParams(self, params):
self._protocol = params.setdefault('protocol', '')
self._model = params.setdefault('model', '')
Expand Down
6 changes: 2 additions & 4 deletions scheduler/src/scheduler/base/Scheduler.py
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,6 @@ def __init__(self):
self.latitude = self.settings.get('latitude', '55.699592')
self.longitude = self.settings.get('longitude', '13.187836')
self.jobs = []
self.jobsFetchedFromServer = False
self.fetchLocalJobs()
self.live = TelldusLive(self.context)
self.deviceManager = DeviceManager(self.context)
Expand Down Expand Up @@ -227,15 +226,15 @@ def fetchLocalJobs(self):
print("WARNING: Could not fetch schedules from local storage")
self.calculateJobs(jobs)

def liveRegistered(self, msg):
def liveRegistered(self, msg, refreshRequired):
if 'latitude' in msg:
self.latitude = msg['latitude']
if 'longitude' in msg:
self.longitude = msg['longitude']
if 'tz' in msg:
self.timezone = msg['tz']

if not self.jobsFetchedFromServer:
if refreshRequired:
self.requestJobsFromServer()

@TelldusLive.handler('scheduler-remove')
Expand Down Expand Up @@ -279,7 +278,6 @@ def receiveOneJobFromServer(self, msg):
# self.live.pushToWeb('scheduler', 'updated', job['id'])

def requestJobsFromServer(self):
self.jobsFetchedFromServer = True
self.live.send(LiveMessage("scheduler-requestjob"))

def run(self):
Expand Down
71 changes: 63 additions & 8 deletions telldus/src/telldus/Device.py
Original file line number Diff line number Diff line change
Expand Up @@ -115,7 +115,9 @@ def __init__(self):
self._ignored = None
self._loadCount = 0
self._name = None
self._metadata = {}
self._manager = None
self._room = None
self._state = Device.TURNOFF
self._stateValues = {}
self._sensorValues = {}
Expand All @@ -129,7 +131,7 @@ def id(self):

def allParameters(self):
"""
Similar as parameters() but this returnes more values such as the device type
Similar as parameters() but this returnes more values such as the device type and the room
"""
params = self.parameters()
if isinstance(params, dict):
Expand All @@ -139,11 +141,21 @@ def allParameters(self):
# parameters() must return a dict
params = {}

try:
params['devicetype'] = self.deviceType()
except Exception as error:
params['devicetype'] = Device.TYPE_UNKNOWN
Application.printException(error)
devicetype = self.metadata('devicetype', None)
if devicetype is not None:
# Devicetype in metadata overrides the devicetype
params['devicetype'] = devicetype
else:
try:
params['devicetype'] = self.deviceType()
except Exception as error:
params['devicetype'] = Device.TYPE_UNKNOWN
Application.printException(error)
if self._room is None:
# Make sure it's removed
params.pop('room', None)
else:
params['room'] = self._room
return params

def battery(self): # pylint: disable=R0201
Expand Down Expand Up @@ -261,6 +273,8 @@ def loadCached(self, olddevice):
self._loadCount = 0
self.setParams(olddevice.params())
(state, __stateValue) = olddevice.state()
self._metadata = olddevice._metadata
self._room = olddevice._room
self._state = state
self._stateValues = olddevice.stateValues()
self._ignored = olddevice._ignored
Expand All @@ -272,10 +286,14 @@ def loadCount(self):
def load(self, settings):
if 'id' in settings:
self._id = settings['id']
if 'metadata' in settings:
self._metadata = settings['metadata']
if 'name' in settings:
self._name = settings['name']
if 'params' in settings:
self.setParams(settings['params'])
if 'room' in settings:
self._room = settings['room']
#if 'state' in settings and 'stateValue' in settings:
# self.setState(settings['state'], settings['stateValue'])

Expand Down Expand Up @@ -310,8 +328,8 @@ def metadata(self, key=None, default=None):
a dictionary.
"""
if key is None:
return {}
return default
return self._metadata.copy()
return self._metadata.get(key, default)

def methods(self):
"""
Expand Down Expand Up @@ -350,6 +368,12 @@ def paramUpdated(self, param):
def protocol(self):
return self.typeString()

def room(self):
"""
:returns: The current room this device belongs to
"""
return self._room

def sensorElement(self, valueType, scale):
"""
:returns: a sensor value and lastUpdated-time, as a dict, of a the specified
Expand Down Expand Up @@ -394,13 +418,44 @@ def setIgnored(self, ignored):
def setManager(self, manager):
self._manager = manager

def setMetadata(self, name, value):
if self._metadata.get(name, None) == value:
# Identical, do nothing
return
if value is None or value == '':
# Remove it
self._metadata.pop(name, None)
else:
self._metadata[name] = value
if self._manager:
self._manager.deviceMetadataUpdated(self, name)

def setName(self, name):
self._name = name
self.paramUpdated('name')

def setParameter(self, name, value):
"""
Set a device specific parameter. What kind of paramters to set is dependent on the device
type
"""
pass

def setParams(self, params):
pass

def setRoom(self, room):
"""
Adds the device to a room.
Set to None or empty string to remove from room
"""
room = None if room == '' else room
if self._room == room:
# Don't fire update if not changed
return
self._room = room
self.paramUpdated('room')

def setSensorValue(self, valueType, value, scale):
self.setSensorValues([{'type': valueType, 'value':value, 'scale': scale}])

Expand Down

0 comments on commit 8b5361d

Please sign in to comment.