From 625535d1fb3d651b48532e44e72432b449c56344 Mon Sep 17 00:00:00 2001 From: jens Date: Sat, 28 Nov 2020 11:52:11 +0100 Subject: [PATCH] - refactored --- components/atemperatureSensor.py | 6 ++++++ components/sensor/tempSensorSim.py | 14 ++++++++++--- utils/value.py | 32 ++++++++++++++++++++++++++++++ ws/message.py | 17 ---------------- 4 files changed, 49 insertions(+), 20 deletions(-) create mode 100644 utils/value.py diff --git a/components/atemperatureSensor.py b/components/atemperatureSensor.py index 7e24bed..2b434a0 100644 --- a/components/atemperatureSensor.py +++ b/components/atemperatureSensor.py @@ -15,4 +15,10 @@ class ATemperatureSensor: def temperature(self): return None + @abc.abstractmethod + def process(self): + pass + @abc.abstractmethod + def set_on_changed(self, on_changed): + pass diff --git a/components/sensor/tempSensorSim.py b/components/sensor/tempSensorSim.py index f6896f0..1da31c5 100644 --- a/components/sensor/tempSensorSim.py +++ b/components/sensor/tempSensorSim.py @@ -1,4 +1,5 @@ from components.atemperatureSensor import ATemperatureSensor +from utils.value import Value, ValueChanged import math @@ -10,12 +11,19 @@ class TempSensorSim(ATemperatureSensor): self.count = 0 self.freq = 0.2 self.log("Created") - self.temp = 22.37 + self.temp = Value(22.37) + self.temp_set = self.temp.get() def set_fake_temp(self, temp): - self.temp = temp + self.temp_set = temp def temperature(self): self.count += 1 - return self.temp + 0.1*math.sin(2*math.pi*self.count*self.freq) + return self.temp_set + 0.1*math.sin(2*math.pi*self.count*self.freq) + def process(self): + temp = self.temperature() + self.temp.set(temp) + + def set_on_changed(self, on_changed: ValueChanged): + self.temp = on_changed diff --git a/utils/value.py b/utils/value.py new file mode 100644 index 0000000..762baae --- /dev/null +++ b/utils/value.py @@ -0,0 +1,32 @@ +class Value: + def __init__(self, initial=None): + self.value = initial + self.has_changed = True + + def set(self, value): + self.has_changed = self.value != value + self.value = value + + def is_changed(self): + return self.has_changed + + def get(self): + self.has_changed = False + return self.value + + +class ValueChanged(object): + def __init__(self, on_changed, prec=2, initial=None): + self.on_changed = on_changed + self.prec = prec + self.value = initial + + def set(self, value): + has_changed = True + value_rounded = round(value, self.prec) + if self.value is not None: + has_changed = self.value != value_rounded + + self.value = value_rounded + if has_changed: + self.on_changed(value_rounded) \ No newline at end of file diff --git a/ws/message.py b/ws/message.py index 72506b4..899d1f9 100644 --- a/ws/message.py +++ b/ws/message.py @@ -31,23 +31,6 @@ class MsgIo: return self.key -class Value: - def __init__(self, initial=None): - self.value = initial - self.has_changed = True - - def set(self, value): - self.has_changed = self.value != value - self.value = value - - def is_changed(self): - return self.has_changed - - def get(self): - self.has_changed = False - return self.value - - class MessageDispatcher(IConnection): def __init__(self, auto_subscribe=False, loop=None): self.msg_handlers: MsgIo = []