コード例 #1
0
ファイル: controller.py プロジェクト: emanuele/21at7
class Controller(Daemon):
	def run(self):
		if lacrosse_serial:
			self.lacrosse_cleaner=lacrosse.Cleaner(mainDB,debug=False,dbdebug=False)
			self.lacrosse_cleaner.start()
		else:
			log('no lacrosse sensors')

		if ciseco_serial:
			self.ciseco_cleaner=ciseco.Cleaner(mainDB,debug=False,dbdebug=False)
			self.ciseco_cleaner.start()
		else:
			log('no ciseco sensors')

		self.scheduler=Scheduler(mainDB,debug=False)
		self.session_maker=SessionMaker(mainDB,debug=False)

		log('CONTROLLER STARTED')
		while True:
			
			zones=None
			try:
				session = self.session_maker.get_session()
				zones=session.query(Zone)
				for zone in zones.filter(Zone.desc!='outside'):
					#log('zone id: %d'%(zone.id))
					desired=self.scheduler.desired(zone_id=zone.id)
					#log('desired temp in "%s": %.1f'%(zone.desc,desired))
					sensors=session.query(Sensor).filter(Sensor.zone_id==zone.id)
					min=None
					for sensor in zone.sensors:
						log('sensor %s in %s'%(sensor.desc,zone.desc))
					'''
						for measure in sensor.measurements:
							if measure.what=='temp':
								#log('%s: %.1f'%(measure.what,measure.howmuch))
								if min==None or measure.howmuch<min:
									min=measure.howmuch
					'''
					#measurements=session.query(Measure).filter(Measure.what='temp',Measure.sensor.in(sensors.subquery()))
					#for measure in measurements:
					#	log('%s: %.1f'%(measure.what,measure.howmuch))
					if min: 
						log('min: %.1f'%min)
						if min<(desired-0.5):
							log('heating ON in "%s"'%zone.desc)
						elif min>(desired+0.5):
							log('heating OFF in "%s"'%zone.desc)
					#latest=zone.sensors.measurements.order_by(Measure.when.desc(),Measure.howmuch).first()
					#print 'latest measurement:',latest
			except:
				e = sys.exc_info()[0]
				log('zones query error: %s'%e)
				traceback.print_exc()
			finally:
				try:
					session.close()
				except:
					zones=None
					log('db (zones) session close error')

			time.sleep(5)
		log('CONTROLLER ENDED')
コード例 #2
0
ファイル: test_scheduling.py プロジェクト: emanuele/21at7
		schedules=session.query(Schedule).filter_by(what='temp')

	if schedules and schedules.count()>0:
		weekly=schedules.filter_by(date=None)
		if weekly and weekly.count()>0:
			print 'saved weekly schedule:'
			for schedule in weekly:
				print '  - on %s: %.1f from %s to %s'%(schedule.day,schedule.howmuch,schedule.start.strftime('%H:%M'),schedule.stop.strftime('%H:%M'))

		dates=schedules.filter_by(day=None)
		if dates and dates.count()>0:
			print 'specific dates schedule:'
			for schedule in dates:
				print '  - on %s: %.1f from %s to %s'%(schedule.date.strftime('%d/%m/%Y'),schedule.howmuch,schedule.start.strftime('%H:%M'),schedule.stop.strftime('%H:%M'))

		sched=Scheduler(mainDB,debug=True)
		temp=sched.desired(zone1.id)
		if temp:
			print 'desired temperature in "%s": %.1f'%(zone1.desc,temp)
		else:
			print 'unknown desired temperature... will fall back to minimum!'

	else:
		print 'no schedule configured: exiting...'

	try:
		session.close()
	except:
		schedules=None
		log(self,'db (schedule) session close error')