python -socketio Панель инструментов датчика websocket не обновляет данные в реальном времени - PullRequest
0 голосов
/ 26 марта 2020

Я создаю веб-панель управления на RPI, которая отображает данные датчиков в реальном времени, которые в реальном времени записываются в текстовый файл (log.txt). В main.py я извлекаю эти данные в прямом эфире из log.txt и пытаюсь отобразить их с помощью python -socketio . Однако, когда я отображаю данные на странице, js <script> кажется, что код WebSocket на стороне клиента необходимо перезапускать каждый раз, когда я хочу отобразить новые данные из log.txt. Тем не менее, страница не должна быть перезагружена, чтобы это произошло, если я просто нажму другую кнопку с поддержкой WebSocket, которая отправляет серверную часть console.log, она отображает новые данные.

Интересно, есть ли способ просто автоматически отображать эти новые данные в реальном времени без каких-либо вмешательств пользователя?

Спасибо!

Код (здесь не все, что нужно для датчика некоторые функции кода только для тестирования):

main.py

from aiohttp import web
import socketio


path = '/home/pi/pysocket/log.txt'

data = open(path,'r')
# data.read()


sio = socketio.AsyncServer(cors_allowed_origins='http://192.168.0.194:8080')

app = web.Application()

sio.attach(app)



async def index(request):
    with open('index.html') as f:
        return web.Response(text=f.read(), content_type='text/html')


@sio.on('message')
async def print_message(sid, message):

    print("Socket ID: " , sid)
    print(message)

    await sio.emit('message', data.read())


# We bind our aiohttp endpoint to our app
# router
app.router.add_get('/', index)

# We kick off our server
if __name__ == '__main__':
    web.run_app(app)

index. html

<!-- index.html -->
<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />
    <meta http-equiv="X-UA-Compatible" content="ie=edge" />
    <title>Document</title>
  </head>
  <body>
    <button onClick="sendMsg()">Hit Me</button>
    <p id="demo"></p>

    <script src="https://cdnjs.cloudflare.com/ajax/libs/socket.io/2.2.0/socket.io.js"></script>
    <script>
      const socket = io("http://localhost:8080");

      function sendMsg() {
             socket.emit("message", "working");
      }



      var div = document.getElementById("demo");
      socket.on("message", function(data){
          div.innerHTML += "<p>"+data+"</p>";
      });


    </script>
  </body>
</html>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...