Mercurial > templog
annotate py/params.py @ 467:fa79666fb375
add nowort mode
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Wed, 20 Feb 2013 21:08:42 +0800 |
parents | f2cca8062128 |
children | 78255c49bf9a |
rev | line source |
---|---|
444 | 1 # -*- coding: utf-8 -*- |
2 import collections | |
3 import json | |
456 | 4 import signal |
459 | 5 import StringIO |
456 | 6 |
7 import gevent | |
8 | |
444 | 9 import config |
447 | 10 from utils import W,L,E,EX |
444 | 11 |
12 _FIELD_DEFAULTS = { | |
13 'fridge_setpoint': 16, | |
14 'fridge_difference': 0.2, | |
15 'overshoot_delay': 720, # 12 minutes | |
16 'overshoot_factor': 1, # ÂșC | |
461
1eb68df9f8ab
Add daemon mode with locking, add "disabled" parameter
Matt Johnston <matt@ucc.asn.au>
parents:
459
diff
changeset
|
17 'disabled': False, |
467 | 18 'nowort': False, |
444 | 19 } |
20 | |
21 class Params(dict): | |
22 class Error(Exception): | |
23 pass | |
24 | |
25 def __init__(self): | |
26 self.update(_FIELD_DEFAULTS) | |
456 | 27 gevent.signal(signal.SIGHUP, self.reload_signal) |
444 | 28 |
29 def __getattr__(self, k): | |
30 return self[k] | |
31 | |
32 def __setattr__(self, k, v): | |
33 # fail if we set a bad value | |
34 self[k] | |
35 self[k] = v | |
36 | |
37 def load(self, f = None): | |
38 if not f: | |
447 | 39 try: |
40 f = file(config.PARAMS_FILE, 'r') | |
41 except IOError, e: | |
42 W("Missing parameter file, using defaults. %s", e) | |
43 return | |
456 | 44 try: |
45 u = json.load(f) | |
46 except Exception, e: | |
47 raise self.Error(e) | |
48 | |
444 | 49 for k in u: |
463
f2cca8062128
- use the fridge temperature for control too, keep it in a 6deg band
Matt Johnston <matt@ucc.asn.au>
parents:
461
diff
changeset
|
50 if k.startswith('_'): |
f2cca8062128
- use the fridge temperature for control too, keep it in a 6deg band
Matt Johnston <matt@ucc.asn.au>
parents:
461
diff
changeset
|
51 continue |
444 | 52 if k not in self: |
53 raise self.Error("Unknown parameter %s=%s in file '%s'" % (str(k), str(u[k]), getattr(f, 'name', '???'))) | |
54 self.update(u) | |
55 | |
459 | 56 L("Loaded parameters") |
57 L(self.save_string()) | |
58 | |
59 | |
444 | 60 def save(self, f = None): |
61 if not f: | |
62 f = file(config.PARAMS_FILE, 'w') | |
63 json.dump(self, f, sort_keys=True, indent=4) | |
454 | 64 f.write('\n') |
444 | 65 f.flush() |
456 | 66 |
459 | 67 def save_string(self): |
68 s = StringIO.StringIO() | |
69 self.save(s) | |
70 return s.getvalue() | |
71 | |
456 | 72 def reload_signal(self): |
73 try: | |
74 self.load() | |
459 | 75 L("Reloaded.") |
456 | 76 except self.Error, e: |
77 W("Problem reloading: %s" % str(e)) |