#2 Background data updates

This commit is contained in:
Jarno Rankinen 2023-01-18 22:57:00 +02:00
parent d2eeaa1ba0
commit eb878072d2
2 changed files with 24 additions and 6 deletions

View File

@ -2,6 +2,7 @@ import minimalmodbus
import logging import logging
from flask import jsonify from flask import jsonify
from threading import Semaphore from threading import Semaphore
from time import sleep
class PingvinCoil(): class PingvinCoil():
"""Single coil data structure""" """Single coil data structure"""
@ -113,8 +114,8 @@ class PingvinCoils():
def __init__(self, device, semaphore, debug=False): def __init__(self, device, semaphore, debug=False):
self.pingvin = device self.pingvin = device
self.semaphore = semaphore self.semaphore = semaphore
if debug: self.coillogger.debug("Updating coil values from device") # if debug: self.coillogger.debug("Updating coil values from device")
self.update(debug) #self.update(debug)
def __getitem__(self, item): def __getitem__(self, item):
return self.coils[item] return self.coils[item]
@ -129,7 +130,7 @@ class PingvinCoils():
self.semaphore.release() self.semaphore.release()
for i, coil in enumerate(self.coils): for i, coil in enumerate(self.coils):
self.coils[i].value = bool(curvalues[i]) 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): def fetchValue(self, address, debug=False):
"""Update single coil value from device and return it""" """Update single coil value from device and return it"""
@ -183,3 +184,13 @@ class PingvinKL():
self.semaphore = Semaphore() self.semaphore = Semaphore()
self.pingvin = minimalmodbus.Instrument(serialdevice, modbusaddr) self.pingvin = minimalmodbus.Instrument(serialdevice, modbusaddr)
self.coils = PingvinCoils(self.pingvin, self.semaphore, debug) 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)

View File

@ -2,14 +2,19 @@
import logging import logging
from PingvinKL import PingvinKL from PingvinKL import PingvinKL
from flask import Flask, request from flask import Flask, request
import threading
VERSION = "0.0.1" VERSION = "0.0.1"
DEBUG = True DEBUG = True
## Logging configuration ## Logging configuration
log = logging.getLogger(__name__) log = logging.getLogger(__name__)
if DEBUG:
dbglevel = logging.DEBUG
else:
dbglevel = logging.INFO
logging.basicConfig( logging.basicConfig(
level=logging.DEBUG, level=dbglevel,
format='%(asctime)s %(message)s', format='%(asctime)s %(message)s',
datefmt='%y/%m/%d %H:%M:%S' datefmt='%y/%m/%d %H:%M:%S'
) )
@ -35,4 +40,6 @@ def dump():
if __name__ == "__main__": if __name__ == "__main__":
log.info(f"Starting enervent-logger {VERSION}") 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)