#2 Background data updates
This commit is contained in:
parent
d2eeaa1ba0
commit
eb878072d2
|
@ -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"""
|
||||||
|
@ -182,4 +183,14 @@ class PingvinKL():
|
||||||
def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False):
|
def __init__(self, serialdevice='/dev/ttyS0', modbusaddr=1, debug=False):
|
||||||
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)
|
|
@ -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)
|
Loading…
Reference in New Issue