Added concentrator script
This commit is contained in:
56
tests/concentrator/concentrator.py
Executable file
56
tests/concentrator/concentrator.py
Executable file
@@ -0,0 +1,56 @@
|
||||
#!/usr/bin/env python3
|
||||
from sensor import Sensor
|
||||
from sys import argv,exit
|
||||
from flask import Flask
|
||||
from time import sleep
|
||||
import threading
|
||||
|
||||
app = Flask('Sensor central unit')
|
||||
# list of sensor addresses
|
||||
address_list = [ 247 ]
|
||||
baudrate = 19200
|
||||
sensors = []
|
||||
modbus_mutex = threading.Lock()
|
||||
|
||||
# Flask functions
|
||||
@app.route('/')
|
||||
def index():
|
||||
html = ''
|
||||
for s in sensors:
|
||||
html += f'<h2>Address {s.address}</h2><br><h3>Input registers:</h3><br>'
|
||||
for reg_name in s.input_registers:
|
||||
reg_number = s.input_registers[reg_name]
|
||||
with modbus_mutex:
|
||||
reg_value = s.read_register(reg_number)
|
||||
html += f'{reg_number : <10}  {int(reg_value) : >10}  {reg_name}<br>'
|
||||
html += '<h3>Holding registers</h3><br>'
|
||||
for reg_name in s.holding_registers:
|
||||
reg_number = s.holding_registers[reg_name]
|
||||
with modbus_mutex:
|
||||
reg_value = s.read_register(reg_number)
|
||||
html += f'{reg_number : <10}  {int(reg_value) : >10}  {reg_name}<br>'
|
||||
return html
|
||||
|
||||
for addr in address_list:
|
||||
sensors.append(Sensor(addr, baudrate))
|
||||
|
||||
# run webserver thread
|
||||
flask_thread = threading.Thread(target=app.run, kwargs={'host': '0.0.0.0', 'port': 8080})
|
||||
flask_thread.start()
|
||||
#app.run(host='0.0.0.0', port=8080)
|
||||
|
||||
# measuring
|
||||
while True:
|
||||
# logging: for now just writing to csv file (can be anything: write to db, mqtt...)
|
||||
for s in sensors:
|
||||
log_string = ''
|
||||
for reg_name, reg_number in s.input_registers.items():
|
||||
with modbus_mutex:
|
||||
log_string += str(int(s.read_register(reg_number))) + ' '
|
||||
log_string += str(s.readout_total) + ' '
|
||||
log_string += str(s.readout_error_no_response) + ' '
|
||||
log_string += str(s.readout_error_invalid_response) + ' '
|
||||
with open(f'sensor_{s.address}.csv', 'a+') as f:
|
||||
f.write(log_string + '\n')
|
||||
sleep(10)
|
||||
|
||||
Reference in New Issue
Block a user