From eb878072d275f628113fe637d63f7c39a718284f Mon Sep 17 00:00:00 2001 From: Jarno Rankinen Date: Wed, 18 Jan 2023 22:57:00 +0200 Subject: [PATCH] #2 Background data updates --- enervent-ctrl-python/src/PingvinKL.py | 19 +++++++++++++++---- enervent-ctrl-python/src/enervent-logger.py | 11 +++++++++-- 2 files changed, 24 insertions(+), 6 deletions(-) diff --git a/enervent-ctrl-python/src/PingvinKL.py b/enervent-ctrl-python/src/PingvinKL.py index f62c228..b0b196e 100644 --- a/enervent-ctrl-python/src/PingvinKL.py +++ b/enervent-ctrl-python/src/PingvinKL.py @@ -2,6 +2,7 @@ import minimalmodbus import logging from flask import jsonify from threading import Semaphore +from time import sleep class PingvinCoil(): """Single coil data structure""" @@ -113,8 +114,8 @@ class PingvinCoils(): def __init__(self, device, semaphore, debug=False): self.pingvin = device self.semaphore = semaphore - if debug: self.coillogger.debug("Updating coil values from device") - self.update(debug) + # if debug: self.coillogger.debug("Updating coil values from device") + #self.update(debug) def __getitem__(self, item): return self.coils[item] @@ -129,7 +130,7 @@ class PingvinCoils(): self.semaphore.release() for i, coil in enumerate(self.coils): self.coils[i].value = bool(curvalues[i]) - if debug: self.coillogger.info("Coil values read succesfully") + if debug: self.coillogger.info("Coil values read succesfully\n") def fetchValue(self, address, debug=False): """Update single coil value from device and return it""" @@ -182,4 +183,14 @@ class PingvinKL(): def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False): self.semaphore = Semaphore() self.pingvin = minimalmodbus.Instrument(serialdevice, modbusaddr) - self.coils = PingvinCoils(self.pingvin, self.semaphore, debug) \ No newline at end of file + self.coils = PingvinCoils(self.pingvin, self.semaphore, debug) + self.run = False + + def monitor(self, interval=15, debug=False): + if not self.run: # Prevent starting two monitor threads + self.run = True + logging.info("Starting data monitor loop") + while self.run: + logging.info("Data monitor updating coil data") + self.coils.update(debug) + sleep(interval) \ No newline at end of file diff --git a/enervent-ctrl-python/src/enervent-logger.py b/enervent-ctrl-python/src/enervent-logger.py index a81a631..0595854 100755 --- a/enervent-ctrl-python/src/enervent-logger.py +++ b/enervent-ctrl-python/src/enervent-logger.py @@ -2,14 +2,19 @@ import logging from PingvinKL import PingvinKL from flask import Flask, request +import threading VERSION = "0.0.1" DEBUG = True ## Logging configuration log = logging.getLogger(__name__) +if DEBUG: + dbglevel = logging.DEBUG +else: + dbglevel = logging.INFO logging.basicConfig( - level=logging.DEBUG, + level=dbglevel, format='%(asctime)s %(message)s', datefmt='%y/%m/%d %H:%M:%S' ) @@ -35,4 +40,6 @@ def dump(): if __name__ == "__main__": log.info(f"Starting enervent-logger {VERSION}") - app.run(host='0.0.0.0',port=8888,debug=DEBUG) + datathread = threading.Thread(target=pingvin.monitor, kwargs={"interval": 15, "debug": DEBUG}) + datathread.start() + app.run(host='0.0.0.0', port=8888) \ No newline at end of file