Skip to content

Commit a0a0ca2

Browse files
committed
add checks to Bang-bang Functions
1 parent 5681814 commit a0a0ca2

File tree

3 files changed

+35
-34
lines changed

3 files changed

+35
-34
lines changed

mycodo/functions/bang_bang.py

Lines changed: 13 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -109,7 +109,7 @@
109109

110110
class CustomModule(AbstractFunction):
111111
"""
112-
Class to operate custom controller
112+
Class to operate the bang-bang controller
113113
"""
114114
def __init__(self, function, testing=False):
115115
super().__init__(function, testing=testing, name=__name__)
@@ -142,8 +142,7 @@ def __init__(self, function, testing=False):
142142
self.try_initialize()
143143

144144
def initialize(self):
145-
self.output_channel = self.get_output_channel_from_channel_id(
146-
self.output_channel_id)
145+
self.output_channel = self.get_output_channel_from_channel_id(self.output_channel_id)
147146

148147
self.logger.info(
149148
"Bang-Bang controller started with options: "
@@ -175,34 +174,35 @@ def loop(self):
175174
self.measurement_measurement_id,
176175
max_age=self.measurement_max_age)
177176

178-
if not last_measurement:
179-
self.logger.error("Could not acquire a measurement")
180-
return
181-
182177
output_state = self.control.output_state(self.output_device_id, self.output_channel)
183178

184-
self.logger.debug(
185-
f"Input: {last_measurement[1]}, output: {output_state}, target: {self.setpoint}, hyst: {self.hysteresis}")
179+
self.logger.debug(f"measurement: {last_measurement[1]}, output state: {output_state}, "
180+
f"setpoint: {self.setpoint}, hysteresis: {self.hysteresis}")
181+
182+
if not last_measurement or last_measurement[1] is None:
183+
self.logger.error("No measurement available. Cannot operate without measurement. Turning output Off.")
184+
self.control.output_off(self.output_device_id, output_channel=self.output_channel)
185+
return
186186

187187
if self.direction == 'raise':
188-
if last_measurement[1] > (self.setpoint + self.hysteresis):
188+
if last_measurement[1] > self.setpoint + self.hysteresis:
189189
if output_state == 'on':
190190
self.control.output_off(
191191
self.output_device_id,
192192
output_channel=self.output_channel)
193193
else:
194-
if last_measurement[1] < (self.setpoint - self.hysteresis):
194+
if last_measurement[1] < self.setpoint - self.hysteresis:
195195
self.control.output_on(
196196
self.output_device_id,
197197
output_channel=self.output_channel)
198198
elif self.direction == 'lower':
199-
if last_measurement[1] < (self.setpoint - self.hysteresis):
199+
if last_measurement[1] < self.setpoint - self.hysteresis:
200200
if output_state == 'on':
201201
self.control.output_off(
202202
self.output_device_id,
203203
output_channel=self.output_channel)
204204
else:
205-
if last_measurement[1] > (self.setpoint + self.hysteresis):
205+
if last_measurement[1] > self.setpoint + self.hysteresis:
206206
self.control.output_on(
207207
self.output_device_id,
208208
output_channel=self.output_channel)

mycodo/functions/bang_bang_on_off.py

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -196,54 +196,54 @@ def loop(self):
196196
self.measurement_measurement_id,
197197
max_age=self.measurement_max_age)
198198

199-
if not last_measurement:
200-
self.logger.error("Could not acquire a measurement")
199+
if not last_measurement or last_measurement[1] is None:
200+
self.logger.error("No measurement available. Cannot operate without measurement. Turning output Off.")
201+
self.control.output_off(self.output_device_id, output_channel=self.output_channel)
201202
return
202203

203204
if self.direction == 'raise':
204-
if last_measurement[1] > (self.setpoint + self.hysteresis):
205+
if last_measurement[1] > self.setpoint + self.hysteresis:
205206
self.logger.debug("Raise: Off")
206207
self.control.output_off(
207208
self.output_raise_device_id, output_channel=self.output_raise_channel)
208-
elif last_measurement[1] < (self.setpoint - self.hysteresis):
209+
elif last_measurement[1] < self.setpoint - self.hysteresis:
209210
self.logger.debug("Raise: On")
210211
self.control.output_on(
211212
self.output_raise_device_id, output_channel=self.output_raise_channel)
212213

213214
elif self.direction == 'lower':
214-
if last_measurement[1] < (self.setpoint - self.hysteresis):
215+
if last_measurement[1] < self.setpoint - self.hysteresis:
215216
self.logger.debug("Lower: Off")
216217
self.control.output_off(
217218
self.output_lower_device_id, output_channel=self.output_lower_channel)
218-
elif last_measurement[1] > (self.setpoint + self.hysteresis):
219+
elif last_measurement[1] > self.setpoint + self.hysteresis:
219220
self.logger.debug("Lower: On")
220221
self.control.output_on(
221222
self.output_lower_device_id, output_channel=self.output_lower_channel)
222223

223224
elif self.direction == 'both':
224-
if (self.setpoint - self.hysteresis) < last_measurement[1] < (self.setpoint + self.hysteresis):
225+
if self.setpoint - self.hysteresis < last_measurement[1] < self.setpoint + self.hysteresis:
225226
self.logger.debug("Lower: Off, Raise: Off")
226227
self.control.output_off(
227228
self.output_raise_device_id, output_channel=self.output_raise_channel)
228229
self.control.output_off(
229230
self.output_lower_device_id, output_channel=self.output_lower_channel)
230231

231-
elif last_measurement[1] > (self.setpoint + self.hysteresis):
232+
elif last_measurement[1] > self.setpoint + self.hysteresis:
232233
self.logger.debug("Lower: On, Raise: Off")
233234
self.control.output_off(
234235
self.output_raise_device_id, output_channel=self.output_raise_channel)
235236
self.control.output_on(
236237
self.output_lower_device_id, output_channel=self.output_lower_channel)
237238

238-
elif last_measurement[1] < (self.setpoint - self.hysteresis):
239+
elif last_measurement[1] < self.setpoint - self.hysteresis:
239240
self.logger.debug("Lower: Off, Raise: On")
240241
self.control.output_off(
241242
self.output_lower_device_id, output_channel=self.output_lower_channel)
242243
self.control.output_on(
243244
self.output_raise_device_id, output_channel=self.output_raise_channel)
244245
else:
245-
self.logger.error(
246-
"Unknown controller direction: '{}'".format(self.direction))
246+
self.logger.error("Unknown controller direction: '{}'".format(self.direction))
247247

248248
output_raise_state = self.control.output_state(
249249
self.output_raise_device_id, self.output_raise_channel)

mycodo/functions/bang_bang_pwm.py

Lines changed: 11 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -213,17 +213,18 @@ def loop(self):
213213
self.measurement_measurement_id,
214214
max_age=self.measurement_max_age)
215215

216-
if not last_measurement[1]:
217-
self.logger.error("Could not acquire a measurement")
218-
return
219-
220216
output_state = self.control.output_state(self.output_device_id, self.output_channel)
221217

222-
self.logger.debug(
223-
f"Input: {last_measurement[1]}, output: {output_state}, target: {self.setpoint}, hyst: {self.hysteresis}")
218+
self.logger.debug(f"measurement: {last_measurement[1]}, output state: {output_state}, "
219+
f"setpoint: {self.setpoint}, hysteresis: {self.hysteresis}")
220+
221+
if not last_measurement or last_measurement[1] is None:
222+
self.logger.error("No measurement available. Cannot operate without measurement. Turning output Off.")
223+
self.control.output_off(self.output_device_id, output_channel=self.output_channel)
224+
return
224225

225226
if self.direction == 'raise':
226-
if last_measurement[1] < (self.setpoint - self.hysteresis):
227+
if last_measurement[1] < self.setpoint - self.hysteresis:
227228
self.control.output_on(
228229
self.output_device_id,
229230
output_type='pwm',
@@ -236,7 +237,7 @@ def loop(self):
236237
amount=self.duty_cycle_maintain,
237238
output_channel=self.output_channel)
238239
elif self.direction == 'lower':
239-
if last_measurement[1] > (self.setpoint + self.hysteresis):
240+
if last_measurement[1] > self.setpoint + self.hysteresis:
240241
self.control.output_on(
241242
self.output_device_id,
242243
output_type='pwm',
@@ -249,13 +250,13 @@ def loop(self):
249250
amount=self.duty_cycle_maintain,
250251
output_channel=self.output_channel)
251252
elif self.direction == 'both':
252-
if last_measurement[1] < (self.setpoint - self.hysteresis):
253+
if last_measurement[1] < self.setpoint - self.hysteresis:
253254
self.control.output_on(
254255
self.output_device_id,
255256
output_type='pwm',
256257
amount=self.duty_cycle_increase,
257258
output_channel=self.output_channel)
258-
elif last_measurement[1] > (self.setpoint + self.hysteresis):
259+
elif last_measurement[1] > self.setpoint + self.hysteresis:
259260
self.control.output_on(
260261
self.output_device_id,
261262
output_type='pwm',

0 commit comments

Comments
 (0)