コード例 #1
0
ファイル: sensors.py プロジェクト: iduque/UHCore
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
										}
コード例 #2
0
 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 = []
コード例 #3
0
ファイル: sensors.py プロジェクト: ninghang/accompany
	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 = []
コード例 #4
0
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
            }