From 0cb958938f2b10f3022a774f509e19e7f4d05bc8 Mon Sep 17 00:00:00 2001 From: jens Date: Wed, 16 Dec 2020 16:52:32 +0100 Subject: [PATCH] - added stirrer and hendi - refactored --- brewpi.py | 8 ++-- components/__init__.py | 2 + components/actor/StirrerFactory.py | 11 +++++ components/actor/__init__.py | 1 + components/actor/heaterFactory.py | 11 +++++ components/actor/heater_hendi.py | 41 +++++++++++++++++++ components/actor/{heater.py => heater_sim.py} | 4 +- components/actor/stirrer.py | 0 components/astirrer.py | 18 ++++---- components/atemperatureSensor.py | 1 - components/sensor/__init__.py | 1 - 11 files changed, 80 insertions(+), 18 deletions(-) create mode 100644 components/actor/StirrerFactory.py create mode 100644 components/actor/heaterFactory.py create mode 100644 components/actor/heater_hendi.py rename components/actor/{heater.py => heater_sim.py} (95%) delete mode 100644 components/actor/stirrer.py diff --git a/brewpi.py b/brewpi.py index 704d090..2685994 100644 --- a/brewpi.py +++ b/brewpi.py @@ -2,13 +2,13 @@ import asyncio from time import sleep import abc from ws.server.ws_server_multi_user import WsServerMultiUser -from components import ATemperatureSensor +from components import ATemperatureSensor, AHeater, AStirrer from components.sensor import TempSensorFactory from components.pid import TempController from components.plant import Pot, APlant -from components.actor.heater import Heater, AHeater +from components.actor import HeaterFactory from ws.message import MsgIo, MessageDispatcher -from utils.value import Value, ChangedFloat, ChangedInteger +from utils.value import ChangedFloat, ChangedInteger DT_CTRL = 0.1 DT_PARAMS = 1.0 @@ -261,7 +261,7 @@ if __name__ == '__main__': taskmgr.add(PotTask(pot, DT_CTRL, dispatcher.msgio_get("Pot"))) # Heater - heater = Heater() + heater = HeaterFactory.create("sim") heater.set_on_changed("power_eff", ChangedFloat(pot.setPower, prec=0).set) heater_task = HeaterTask(heater, DT_CTRL, dispatcher.msgio_get("Heater")) taskmgr.add(heater_task) diff --git a/components/__init__.py b/components/__init__.py index b187ce8..58ecf73 100644 --- a/components/__init__.py +++ b/components/__init__.py @@ -1 +1,3 @@ from components.atemperatureSensor import * +from components.astirrer import * +from components.aheater import * diff --git a/components/actor/StirrerFactory.py b/components/actor/StirrerFactory.py new file mode 100644 index 0000000..75ea564 --- /dev/null +++ b/components/actor/StirrerFactory.py @@ -0,0 +1,11 @@ + + +class StirrerFactory: + @staticmethod + def create(name, dt): + if "sim" in name: + from components.actor.stirrer_sim import Stirrer_sim + return Stirrer_sim(dt) + elif "1376" in name: + from components.actor.stirrer_pololu1376 import Stirrer_pololu1376 + return Stirrer_pololu1376(dt, '/dev/ttyUSB0', 115200) diff --git a/components/actor/__init__.py b/components/actor/__init__.py index e69de29..f891c75 100644 --- a/components/actor/__init__.py +++ b/components/actor/__init__.py @@ -0,0 +1 @@ +from components.actor.heaterFactory import HeaterFactory diff --git a/components/actor/heaterFactory.py b/components/actor/heaterFactory.py new file mode 100644 index 0000000..b069f91 --- /dev/null +++ b/components/actor/heaterFactory.py @@ -0,0 +1,11 @@ + + +class HeaterFactory: + @staticmethod + def create(name): + if "sim" in name: + from components.actor.heater_sim import HeaterSim + return HeaterSim() + elif "Hendi" in name: + from components.actor.heater_hendi import HeaterHendi + return HeaterHendi('/dev/ttyUSB0', 115200) diff --git a/components/actor/heater_hendi.py b/components/actor/heater_hendi.py new file mode 100644 index 0000000..8f08796 --- /dev/null +++ b/components/actor/heater_hendi.py @@ -0,0 +1,41 @@ +from components.aheater import AHeater +from hendiCtrl import HendiCtrl + + +class HeaterHendi(AHeater): + def __init__(self, port, baudrate): + AHeater.__init__(self) + self.power_set = self.get_power_min() + self.is_active = False + self.power_eff = 0 + self.hendi = HendiCtrl(port, baudrate) + + def get_power_min(self): + caps = self.hendi.getCapabilties() + return caps['pwr_watts_min'] + + def get_power_max(self): + caps = self.hendi.getCapabilties() + return caps['pwr_watts_max'] + + def activate(self, enable): + self.is_active = enable + if enable: + self.hendi.setSwitch(1) + else: + self.hendi.setSwitch(0) + + def is_activated(self): + s = self.hendi.getSwitch() + return '1' in s + + def process(self): + power_eff = self.power_set if self.is_active else 0 + self.hendi.setPowerWatts(power_eff) + + def setPower(self, power): + self.power_set = max(self.get_power_min(), min(self.get_power_max(), power)) + + def getPower(self): + result = self.hendi.getPowerWatts() + return result diff --git a/components/actor/heater.py b/components/actor/heater_sim.py similarity index 95% rename from components/actor/heater.py rename to components/actor/heater_sim.py index b4ed525..a96a953 100644 --- a/components/actor/heater.py +++ b/components/actor/heater_sim.py @@ -1,7 +1,7 @@ from components.aheater import AHeater -class Heater(AHeater): +class HeaterSim(AHeater): def __init__(self): AHeater.__init__(self) self.power_set = self.get_power_min() @@ -28,5 +28,3 @@ class Heater(AHeater): def getPower(self): return self.power_eff - - diff --git a/components/actor/stirrer.py b/components/actor/stirrer.py deleted file mode 100644 index e69de29..0000000 diff --git a/components/astirrer.py b/components/astirrer.py index 00c36cd..6bb6a7e 100644 --- a/components/astirrer.py +++ b/components/astirrer.py @@ -1,5 +1,4 @@ import abc -import logging class AStirrer: @@ -14,10 +13,7 @@ class AStirrer: self.dutyCycle = 1 self.cycleCounter = 0 self.isOn = 1 - - def log(self, s): - d = {'user': "Stirrer" + "::" + self.name()} - logging.info ("{}".format(s), extra=d) + self.is_active = False def process(self): isOn = self.isOn @@ -54,9 +50,13 @@ class AStirrer: return None @abc.abstractmethod - def activate(self): + def on_activate(self, enable): pass - @abc.abstractmethod - def deactivate(self): - pass + def activate(self, enable): + self.is_active = enable + self.on_activate(enable) + + def is_activated(self): + return self.is_active + diff --git a/components/atemperatureSensor.py b/components/atemperatureSensor.py index d3b62c1..c1962d2 100644 --- a/components/atemperatureSensor.py +++ b/components/atemperatureSensor.py @@ -1,5 +1,4 @@ import abc -import logging from utils.value import AttributeChange diff --git a/components/sensor/__init__.py b/components/sensor/__init__.py index 9d9370e..e9051d8 100644 --- a/components/sensor/__init__.py +++ b/components/sensor/__init__.py @@ -1,2 +1 @@ -from components.sensor import tempSensorSim from components.sensor.tempsensor_factory import *