comparison py/fridge.py @ 305:6087c692d381

turn the fridge off if both sensors are broken
author Matt Johnston <matt@ucc.asn.au>
date Wed, 24 Jul 2019 23:24:51 +0800
parents 6848907f85be
children
comparison
equal deleted inserted replaced
304:02aff9ff8d24 305:6087c692d381
14 def __init__(self, server, nowait = False): 14 def __init__(self, server, nowait = False):
15 self.server = server 15 self.server = server
16 self.gpio = gpio.Gpio(config.FRIDGE_GPIO_PIN, "fridge") 16 self.gpio = gpio.Gpio(config.FRIDGE_GPIO_PIN, "fridge")
17 self.integrator = utils.StepIntegrator(self.server.now, self.server.params.overshoot_delay) 17 self.integrator = utils.StepIntegrator(self.server.now, self.server.params.overshoot_delay)
18 self.wort_valid_clock = 0 18 self.wort_valid_clock = 0
19 self.fridge_valid_clock = 0
19 self.fridge_on_clock = 0 20 self.fridge_on_clock = 0
20 self.off() 21 self.off()
21 if nowait: 22 if nowait:
22 self.fridge_off_clock = 0 23 self.fridge_off_clock = 0
23 24
60 61
61 off_time = self.server.now() - self.fridge_off_clock 62 off_time = self.server.now() - self.fridge_off_clock
62 63
63 if wort is not None: 64 if wort is not None:
64 self.wort_valid_clock = self.server.now() 65 self.wort_valid_clock = self.server.now()
66
67 if fridge is not None:
68 self.fridge_valid_clock = self.server.now()
65 69
66 self.integrator.set_limit(params.overshoot_delay) 70 self.integrator.set_limit(params.overshoot_delay)
67 71
68 # Safety to avoid bad things happening to the fridge motor (?) 72 # Safety to avoid bad things happening to the fridge motor (?)
69 # When it turns off don't start up again for at least FRIDGE_DELAY 73 # When it turns off don't start up again for at least FRIDGE_DELAY
108 W("fridge off fallback, fridge %(fridge)f, min %(fridge_min)f" % locals()) 112 W("fridge off fallback, fridge %(fridge)f, min %(fridge_min)f" % locals())
109 if wort is None: 113 if wort is None:
110 W("wort has been invalid for %d" % (self.server.now() - self.wort_valid_clock)) 114 W("wort has been invalid for %d" % (self.server.now() - self.wort_valid_clock))
111 turn_off = True 115 turn_off = True
112 116
117 if wort is None and fridge is None:
118 invalid_time = self.server.now() - max(self.wort_valid_clock, self.fridge_valid_clock)
119 D("both sensors broken, invalid_time %(invalid_time)f" % locals())
120 if invalid_time > config.ALL_INVALID_TIME:
121 L("Both sensors broken for %(invalid_time)f seconds" % locals())
122 turn_off = True
123
113 if turn_off: 124 if turn_off:
114 L("Turning fridge off") 125 L("Turning fridge off")
115 self.off() 126 self.off()
116 127
117 else: 128 else: