Обновление socketio веб-страницы с непрерывными данными из тензодатчика - PullRequest
0 голосов
/ 24 апреля 2019

У меня есть ряд тензодатчиков, которые действуют как весы, которые мне нужны для обновления веб-страницы в режиме реального времени. Когда я запускаю код для тензодатчиков (LoadRack.py), я могу непрерывно считывать вес. Функция (onVoltageRatioChangeHandler) запускается по таймеру, и я могу использовать эти данные для определения своего веса, мне нужно иметь возможность открыть их на моей веб-странице socketio.

Мой второй файл application.py запускает веб-страницу с помощью socketio и отображает обновленные номера без обновления страницы (идеально)! Я могу импортировать LoadRack.py в application.py, поэтому, когда моя веб-страница начинает работать, ячейки загрузки начинают генерировать данные, мне нужна помощь в переносе моего окончательного веса из LoadRack в application.py для отправки на мою страницу.

Я попытался вернуть значение, но он сделает это только после того, как цикл ячейки загрузки завершится, и это будет последнее значение, поэтому это не «реальное время». Не уверен, как решить это. Ниже приведен код.

nsum - это значение, которое я пытаюсь выдать. Спасибо

application.py

from flask_socketio import SocketIO, emit
from flask import Flask, render_template, url_for, copy_current_request_context
from time import sleep
from threading import Thread, Event

__author__ = 'slynn'
app = Flask(__name__)
app.config['SECRET_KEY'] = 'secret!'
app.config['DEBUG'] = True

socketio = SocketIO(app, async_mode="threading")
thread = Thread()
thread_stop_event = Event()

class LoadCellThread(Thread):
   def __init__(self):
       self.delay = 1
       super(LoadCellThread, self).__init__()

   def pullvalue(self):
       while not thread_stop_event.isSet():
           # import LoadRack
           # number = onVoltageRatioChangeHandler
           # This is where I need to pull my live data to emit
           number = 33  # This is just here for my testing
           socketio.emit('newnumber', {'number': number}, namespace='/test')
           sleep(self.delay)

   def run(self):
       self.pullvalue()

@app.route('/')
def index():
     return render_template('index.html')

@socketio.on('connect', namespace='/test')
def test_connect():
    global thread

    if not thread.isAlive():
        thread = LoadCellThread()
        thread.start()

 @socketio.on('disconnect', namespace='/test')
 def test_disconnect():
    print('Client disconnected')

if __name__ == '__main__':
    socketio.run(app)

LoadRack.py (очень сокращенно)

... 
test2 = []
def onVoltageRatioChangeHandler(self, voltageRatio):

    print("[VoltageRatio Event] -> Voltage Ratio: " + str(voltageRatio))
    test2.append(voltageRatio)
    if len(test2) % 4 == 0:
        n0 = test2[len(test2)-1]
        n1 = test2[len(test2)-2]
        nsum = n0 + n1
    else:
        nsum = 0
    return nsum
...
...