Mercurial > templog
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: |