comparison py/tempserver.py @ 145:6517ddee3187

few more bits
author Matt Johnston <matt@ucc.asn.au>
date Thu, 29 Nov 2012 23:50:40 +0800
parents 482d7852b511
children b32e5a11a4cb
comparison
equal deleted inserted replaced
144:482d7852b511 145:6517ddee3187
1 #!/usr/bin/env python2.7 1 #!/usr/bin/env python2.7
2 2
3 import sys 3 import sys
4 import os 4 import os
5 import gevent 5 import gevent
6 import gevent.monkey
6 7
7 import utils 8 import utils
9 import fridge
10 import config
11 import sensor_ds18b20
12 import params
13
8 14
9 class Tempserver(object): 15 class Tempserver(object):
10 def __init__(self): 16 def __init__(self):
11 self.readings = [] 17 self.readings = []
12 self.current = (None, None, None) 18 self.current = (None, None)
13 19
14 self.start_time = utils.monotonic_time() 20 # don't patch os, fork() is used by daemonize
21 gevent.monkey.patch_all(os=False, thread=False)
22
23 self.start_time = self.now()
24
25 self.params = params.Params()
26 self.params.load()
15 27
16 self.fridge = fridge.Fridge(self) 28 self.fridge = fridge.Fridge(self)
17 self.fridge.start() 29 self.fridge.start()
18 30
19 self.set_sensors(sensor_ds18b20.DS18B20s(self)) 31 self.set_sensors(sensor_ds18b20.DS18B20s(self))
32
33 def run(self):
34 # won't return.
35 while True:
36 gevent.sleep(60)
37
38 def now(self):
39 return utils.monotonic_time()
20 40
21 def set_sensors(self, sensors): 41 def set_sensors(self, sensors):
22 if self.hasattr(self, 'sensors'): 42 if self.hasattr(self, 'sensors'):
23 self.sensors.kill() 43 self.sensors.kill()
24 self.sensors = sensors 44 self.sensors = sensors
25 self.wort_name = sensors.wort_name() 45 self.wort_name = sensors.wort_name()
26 self.fridge_name = sensors.fridge_name() 46 self.fridge_name = sensors.fridge_name()
27 self.sensor_names = sensors.sensor_names()
28 47
29 def take_readings(self): 48 def take_readings(self):
30 ret = self.readings 49 ret = self.readings
31 self.readings = [] 50 self.readings = []
32 return ret 51 return ret
37 56
38 # a reading is a map of {sensorname: value}. temperatures 57 # a reading is a map of {sensorname: value}. temperatures
39 # are float degrees 58 # are float degrees
40 def add_reading(self, reading): 59 def add_reading(self, reading):
41 """ adds a reading at the current time """ 60 """ adds a reading at the current time """
42 self.readings.append( (reading, utils.monotonic_time())) 61 self.readings.append( (reading, self.now()))
43 self.current = (reading.get(self.wort_name, None), 62 self.current = (reading.get(self.wort_name, None),
44 reading.get(self.fridge_name, None)) 63 reading.get(self.fridge_name, None))
45 64
46 def current_temps(self): 65 def current_temps(self):
47 """ returns (wort_temp, fridge_temp) tuple """ 66 """ returns (wort_temp, fridge_temp) tuple """
48 return current 67 return current
68
69 def setup_logging():
70 logging.basicConfig(format='%(asctime)s %(message)s',
71 datefmt='%m/%d/%Y %I:%M:%S %p',
72 level=logging.INFO)
73
74 def main():
75 server = Tempserver()
76
77 if '--daemon' in sys.argv:
78 utils.cheap_daemon()
79
80 server.run()
81
82 if __name__ == '__main__':
83 main()