diff --git a/Control/brewpi/astirrer.py b/Control/brewpi/astirrer.py index d4b67e6..f8fdc4c 100644 --- a/Control/brewpi/astirrer.py +++ b/Control/brewpi/astirrer.py @@ -1,8 +1,12 @@ -import time import abc +import logging class AStirrer(abc.ABC): + @abc.abstractmethod + def name(self): + return "" + def __init__(self, dt): self.dt = dt self.speed = 0 @@ -12,8 +16,8 @@ class AStirrer(abc.ABC): self.isOn = 1 def log(self, s): - now = time.strftime("%a, %d %b %Y %H:%M:%S", time.localtime()) - print("{}: {}".format(now, s)) + d = {'user': self.name()} + logging.info ("{}".format(s), extra=d) def process(self): isOn = self.isOn diff --git a/Control/brewpi/atemperatureSensor.py b/Control/brewpi/atemperatureSensor.py index 50dd9ef..cc4c8a7 100644 --- a/Control/brewpi/atemperatureSensor.py +++ b/Control/brewpi/atemperatureSensor.py @@ -1,13 +1,15 @@ -import time import abc +import logging class ATemperatureSensor(abc.ABC): - def __init__(self, name): - self.name + def log(self, s): + d = {'user': self.name()} + logging.info ("{}".format(s), extra=d) + @abc.abstractmethod def name(self): - return self.name + return "" @abc.abstractmethod def temperature(self): diff --git a/Control/brewpi/brewpi.py b/Control/brewpi/brewpi.py index e898f8c..02e44e7 100755 --- a/Control/brewpi/brewpi.py +++ b/Control/brewpi/brewpi.py @@ -1,11 +1,13 @@ #!/usr/bin/python3 +import logging import argparse import signal import json from controller import Controller, commands from mass import Mass from stirrer import Stirrer -#from pololu1376 import Pololu1376 +from pololu1376 import Pololu1376 +from plant import Plant from matplotlib.pyplot import figure, clf, plot, xlabel, ylabel, xlim, ylim, title, grid, axes, show, subplot @@ -49,6 +51,10 @@ def results_plot(self): if __name__ == '__main__': + logging.getLogger().setLevel(logging.INFO) + FORMAT = '%(asctime)-15s %(user)-8s %(message)s' + logging.basicConfig(format=FORMAT) + parser = argparse.ArgumentParser(description='Brew some beer.') parser.add_argument('--receipe', help='the name of the receipe') parser.add_argument('--config', help='the name of the configuration file') @@ -93,7 +99,7 @@ if __name__ == '__main__': configJson = json.load(fp) plant_class = globals()[configJson["Controller"]['plant_name']] - plant = plant_class(configJson["WaterSim"]) + plant = plant_class() ruehrer_class = globals()[configJson["Controller"]['stirrer_name']] ruehrer = ruehrer_class(configJson["Stirrer"]) diff --git a/Control/brewpi/hendiCtrl.py b/Control/brewpi/hendiCtrl.py index 31c24a6..7358ab3 100644 --- a/Control/brewpi/hendiCtrl.py +++ b/Control/brewpi/hendiCtrl.py @@ -4,8 +4,18 @@ import time import serial import sys import numpy as np +import logging + + class HendiCtrl(): + def name(self): + return "HendiCtrl" + + def log(self, s): + d = {'user': self.name()} + logging.info ("{}".format(s), extra=d) + def __init__(self, port, baudrate): self.ser = serial.Serial(port, baudrate) try: @@ -17,8 +27,8 @@ class HendiCtrl(): self.ser.timeout = 1.000 self.prompt = b':' self.caps = { - "name" : self.getSoftwareIdentifier(), - "ver" : self.getSoftwareVersion(), + "sw_id" : self.getSoftwareIdentifier(), + "sw_ver" : self.getSoftwareVersion(), "pwr_watts_min" : 500, "pwr_watts_max" : 3500, "pwr_watts_step" : 100, @@ -29,7 +39,9 @@ class HendiCtrl(): digits = [4092, 3840, 3700, 3440, 3300, 3060, 3000, 2930, 2860, 2780, 2640, 2510, 2430, 2360, 2190, 2130, 2030, 1980, 1880, 1730, 1630, 1560, 1480, 1400, 1240, 1150, 1150, 1080, 920, 740, 670] self.poly_w2d = np.polyfit(powers, digits, 5) self.poly_d2w = np.polyfit(digits, powers, 5) - self.name = self.getSoftwareIdentifier() + self.sw_id = self.getSoftwareIdentifier() + self.sw_ver = self.getSoftwareVersion() + self.log("Create {}, Version {}".format(self.sw_id, self.sw_ver)) def toDigits(self, power_watts): return np.polyval(self.poly_w2d, float(power_watts)) @@ -103,9 +115,6 @@ class HendiCtrl(): rsp = self.__read() if "OK" in rsp[0]: return rsp[1] -# print("{}: Command : {}".format(self.name), req) -# print("{}: Response: {}".format(self.name), rsp) -# print("{}: Received error!".format(self.name)) return None def getCapabilties(self): diff --git a/Control/brewpi/max31865.py b/Control/brewpi/max31865.py index 99678bc..97097c0 100755 --- a/Control/brewpi/max31865.py +++ b/Control/brewpi/max31865.py @@ -1,14 +1,14 @@ #!/usr/bin/python3 - import time import spidev from atemperatureSensor import ATemperatureSensor class Max31865(ATemperatureSensor): - def __init__(self): - super(Max31865, self).__init__('Max31865') + def name(self): + return "TemperatureSensor" + def __init__(self): # Open SPI bus self.spi = spidev.SpiDev() self.spi.open(0, 0) @@ -18,6 +18,7 @@ class Max31865(ATemperatureSensor): self.write_reg(0x00, 0xA3) time.sleep(0.100) self.digits = 0 + self.log("Create Max31865") def read_reg(self, addr): reg = self.spi.xfer([addr, 0xFF]) diff --git a/Control/brewpi/pololu1376.py b/Control/brewpi/pololu1376.py index e97c2ad..774c174 100644 --- a/Control/brewpi/pololu1376.py +++ b/Control/brewpi/pololu1376.py @@ -5,6 +5,9 @@ import serial class Pololu1376(AStirrer): + def name(self): + return "Stirrer" + def __init__(self, params): super(Pololu1376, self).__init__(params["dt"]) self.isMasterOn = 0 @@ -20,7 +23,8 @@ class Pololu1376(AStirrer): self.ser.open() self.ser_send('V') - print(self.ser_recv()) + self.ser_recv() + self.log("Create Pololu1376") def ser_send(self, cmd): self.ser.write((cmd + '\r\n').encode()) @@ -36,19 +40,19 @@ class Pololu1376(AStirrer): def activate(self): if self.isMasterOn == 0: - self.log("Stirrer: switched On") + self.log("switched On") self.isMasterOn = 1 self.ser_send("go") def deactivate(self): if self.isMasterOn == 1: - self.log("Stirrer: switched Off") + self.log("switched Off") self.isMasterOn = 0 self.ser_send("x") def onSetSpeed(self, speed): self.ser_send("F" + str(speed) + "%") - self.log("Stirrer: Set speed to {} %".format(speed)) + self.log("Set speed to {} %".format(speed)) if __name__ == '__main__':