Mercurial > templog
diff py/fridge.py @ 144:482d7852b511
a bit more, and some tests
author | Matt Johnston <matt@ucc.asn.au> |
---|---|
date | Mon, 26 Nov 2012 23:21:03 +0800 |
parents | 0895f5ad7731 |
children | 6517ddee3187 |
line wrap: on
line diff
--- a/py/fridge.py Tue Nov 20 22:03:10 2012 +0800 +++ b/py/fridge.py Mon Nov 26 23:21:03 2012 +0800 @@ -1,14 +1,17 @@ # -*- coding: utf-8 -*- -from utils import L,W,E +from utils import L,W,E,EX import config +import gevent -class Fridge(object): +class Fridge(gevent.Greenlet): OVERSHOOT_MAX_DIV = 1800.0 # 30 mins FRIDGE_AIR_MIN_RANGE = 4 # ÂșC FRIDGE_AIR_MAX_RANGE = 4 - def __init__(self): + def __init__(self, server): + gevent.Greenlet.__init__(self) + self.server = server self.setup_gpio() self.wort_valid_clock = 0 self.fridge_on_clock = 0 @@ -45,22 +48,22 @@ % (self.value_file.name, buf)) return True - def run(self, server): - + # greenlet subclassed + def _run(self): while True: - self.do(server) + self.do() gevent.sleep(config.FRIDGE_SLEEP) - def do(self, server): + def do(self) """ this is the main fridge control logic """ - wort, fridge, ambient = server.current_temps() + wort, fridge = self.server.current_temps() fridge_min = params.fridge_setpoint - self.FRIDGE_AIR_MIN_RANGE fridge_max = params.fridge_setpoint + self.FRIDGE_AIR_MAX_RANGE wort_max = params.fridge_setpoint + params.fridge_difference - off_time = server.now() - self.fridge_off_clock + off_time = self.server.now() - self.fridge_off_clock if off_time < config.FRIDGE_DELAY: L("fridge skipping, too early") @@ -68,10 +71,10 @@ # handle broken wort sensor if wort is not None: - self.wort_valid_clock = server.now() + self.wort_valid_clock = self.server.now() else: W("Invalid wort sensor") - invalid_time = server.now() - self.wort_valid_clock + invalid_time = self.server.now() - self.wort_valid_clock if invalid_time < config.FRIDGE_WORT_INVALID_TIME: W("Has only been invalid for %d, waiting" % invalid_time) return @@ -81,7 +84,7 @@ if self.is_on(): turn_off = False - on_time = server.now() - self.fridge_on_clock + on_time = self.server.now() - self.fridge_on_clock overshoot = 0 if on_time > params.overshoot_delay: @@ -96,14 +99,14 @@ turn_off = True else: # wort sensor is broken - if fridge is not None and last_fridge < fridge_min: + if fridge is not None and fridge < fridge_min: W("fridge off fallback") turn_off = True if turn_off: L("Turning fridge off") self.off() - self.fridge_off_clock = server.now() + self.fridge_off_clock = self.server.now() else: # fridge is off @@ -121,4 +124,4 @@ if turn_on: L("Turning fridge on") self.on() - fridge_on_clock = server.now() + fridge_on_clock = self.server.now()