Как лучше всего приложению django запросить удаленный измеритель шума и обновить текущие данные в браузере пользователя?Python

Программы на Python
Anonymous
Как лучше всего приложению django запросить удаленный измеритель шума и обновить текущие данные в браузере пользователя?

Сообщение Anonymous »

Как следует из названия, я пытаюсь написать приложение Django для удаленного запроса измерителей шума и отображения информации в реальном времени на веб-странице. В настоящее время я могу отображать данные в реальном времени на веб-странице с помощью каналов django и веб-сокетов. Я также написал программу, способную опрашивать удаленный счетчик с помощью asyncio, код которой приведен ниже:

Код: Выделить всё

import datetime
import time
import serial
import asyncio

async def tcp_serial_ip_client():
host = '192.168.10.1'  # Server's IP address
port = 6889 # Server port
reader, writer = await asyncio.open_connection(host, port)

#list of command stings for meter
id_message= '*IDN?\n'
reset_message = '*RST\n'
autosave_message='SYST:KEY NEXT NEXT NEXT ENTER PREV ENTER ESC\n'
measurement_start_message= 'INIT START\n'
measurement_trigger_message= 'MEAS:INIT\n'
measurement_query_message= 'MEAS:SLM:123? LAEQ\n'
measurement_end_message= 'INIT STOP\n'

# resets the meter to be in a known state for remote command
writer.write(reset_message.encode())
await writer.drain()
time.sleep(1)

# queries and returns the id info for the meter
writer.write(id_message.encode())
await writer.drain()
time.sleep(3)
data = await reader.read(1024)
print(f'Received: {data.decode()!r}')

# executes keypresses on the noise meter to enable autosave function
writer.write(autosave_message.encode())
await writer.drain()
time.sleep(3)
data = await reader.read(1024)
print(f'Received: {data.decode()!r}')# ok is returned if successful

# begin measurement
writer.write(measurement_start_message.encode())
await writer.drain()
time.sleep(6)

start_datetime = datetime.datetime.now()
print(start_datetime)
count = 0

while True:
# trigger a new reading
writer.write(measurement_trigger_message.encode())
await writer.drain()

# query previously triggered reading
writer.write(measurement_query_message.encode())
await writer.drain()
data = await reader.read(1024)

print("measurement time: ", datetime.datetime.now())
print(f"Server response: {data.decode()}")
time.sleep(1)
count += 1
#after 15 readings stop the measurement on the meter
if count > 15:
writer.write(measurement_end_message.encode())
await writer.drain()
break

#end connection once reading is complete
print('Close the connection')
writer.close()
await writer.wait_closed()

asyncio.run(tcp_serial_ip_client())
Моя проблема в том, что я не уверен, как лучше интегрировать код для запроса счетчика в мое приложение Django. Мне нужно, чтобы Django выступал в качестве клиента для счетчика, инициировал соединение и отправлял запросы через соединение через регулярные промежутки времени (т. е. каждую секунду), а затем отправлял ответ через канал, чтобы его можно было использовать для обновления веб-страницы пользователя. Мне также необходимо убедиться, что решение позволяет одновременно подключать и опрашивать несколько измерителей шума.
Любые советы о том, как лучше всего добиться этого, будут приветствоваться, поскольку мои попытки решить эту проблему пока не увенчались успехом.

Вернуться в «Python»