class GEOSystem(PollingProcessor): def __init__ (self, hostName, userName, password, database, query): super(GEOSystem, self).__init__() self._geoDao = SQLDao(hostName, userName, password, database) self._geoQuery = query self._sensorDao = Sensors() self._sensors = self._sensorDao.findSensors() self._sr = StateResolver() self._channels = {} self._warned = [] @property def channels(self): return self._channels def start(self): print "Started polling geo sensors" self._addPollingProcessor('geoSensors', self.pollGeoSystem, None, 0.1) def stop(self): print "Stopped polling geo sensors" self._removePollingProcessor('geoSensors') def pollGeoSystem(self): rows = self._geoDao.getData(self._geoQuery) # This appears to be needed or 'CALL exppower' doesn't update the power values, # oddly, it updates the timestamp field though... self._geoDao.close() for row in rows: try: sensor = next(s for s in self._sensors if s['ChannelDescriptor'] == str(row['ID'])) except StopIteration: # Only warn once, or we'll flood the console if row['ID'] not in self._warned: print >> sys.stderr, "Warning: Unable to locate sensor record for geo sensor %s. ID: %s" % (row['Description'], row['ID']) self._warned.append(row['ID']) continue _device = sensor['locationName'] _name = sensor['name'] _id = sensor['sensorId'] _type = sensor['sensorTypeName'] # Only warn once, or we'll flood the console if _name != row['Description'] and row['ID'] not in self._warned: print >> sys.stderr, 'Warning: Channel name differs from Geo-System description: %s / %s' % (_name, row['Description']) self._warned.append(row['ID']) _status = self._sr.getDisplayState({'sensorTypeName': _type, 'value': row['Power'], 'sensorId': _id }) self._channels[row['ID']] = { 'id': _id, 'room': _device, 'channel': _name, 'value': '%.1f' % row['Power'], 'status': _status }
def __init__(self, hostName, userName, password, database, query): super(GEOSystem, self).__init__() self._geoDao = SQLDao(hostName, userName, password, database) self._geoQuery = query self._sensorDao = Sensors() self._sensors = self._sensorDao.findSensors() self._sr = StateResolver() self._channels = {} self._warned = []
def __init__ (self, hostName, userName, password, database, query): super(GEOSystem, self).__init__() self._geoDao = SQLDao(hostName, userName, password, database) self._geoQuery = query self._sensorDao = Sensors() self._sensors = self._sensorDao.findSensors() self._sr = StateResolver() self._channels = {} self._warned = []
class GEOSystem(PollingProcessor): def __init__(self, hostName, userName, password, database, query): super(GEOSystem, self).__init__() self._geoDao = SQLDao(hostName, userName, password, database) self._geoQuery = query self._sensorDao = Sensors() self._sensors = self._sensorDao.findSensors() self._sr = StateResolver() self._channels = {} self._warned = [] @property def channels(self): return self._channels def start(self): print "Started polling geo sensors" self._addPollingProcessor('geoSensors', self.pollGeoSystem, None, 0.1) def stop(self): print "Stopped polling geo sensors" self._removePollingProcessor('geoSensors') def pollGeoSystem(self): rows = self._geoDao.getData(self._geoQuery) #This appears to be needed or 'CALL exppower' doesn't update the power values, # oddly, it updates the timestamp field though... self._geoDao.close() for row in rows: try: sensor = next(s for s in self._sensors if s['ChannelDescriptor'] == str(row['ID'])) except StopIteration: #Only warn once, or we'll flood the console if row['ID'] not in self._warned: print >> sys.stderr, "Warning: Unable to locate sensor record for geo sensor %s. ID: %s" % ( row['Description'], row['ID']) self._warned.append(row['ID']) continue _device = sensor['locationName'] _name = sensor['name'] _id = sensor['sensorId'] #Only warn once, or we'll flood the console if _name != row['Description'] and row['ID'] not in self._warned: print >> sys.stderr, 'Warning: Channel name differs from Geo-System description: %s / %s' % ( _name, row['Description']) self._warned.append(row['ID']) _state = self._sr.evaluateRule(sensor['sensorRule'], row['Power']) if _state: _state = 'On' else: _state = 'Off' self._channels[row['ID']] = { 'id': _id, 'room': _device, 'channel': _name, 'value': '%.1f' % row['Power'], 'status': _state }