Вывод данных на WEB server по запросу

vetal 100

Новичок
Пользователь
Июл 20, 2020
4
0
1
Доброе день

Подскажите пожалуйста : есть rspberry P3 , работает как мастер и опрашивает устройство (анализатор сети) по протоколу madbus используя pymodbus .Сейчас получают данные на сервер каждую минуту. Необходимо получать эти данные по запросу например набирая в браузере ip/sensor1 получать значение напряжения ,затем ip/sensor2-частоты и.т.д.
Что надо подправить в коде ,для того ,чтобы получить такую схему опроса анализатора сети.

Заранее благодарен.


Python:
import time
import pymodbus
import serial
from pymodbus.pdu import ModbusRequest
from pymodbus.client.sync import ModbusSerialClient as ModbusClient
from pymodbus.transaction import ModbusRtuFramer
 
from pymodbus.constants import Endian
from pymodbus.payload import BinaryPayloadDecoder as decode
from pymodbus.payload import BinaryPayloadBuilder as builder
 
client = ModbusClient(method='rtu', port='/dev/ttyUSB0', parity='N',stopbits=1, baudrate=9600,timeout=60,strict=False )
client.connect()
 
while True:
 
    W=client.read_holding_registers(3902,2,unit=1)
    W_d = decode.fromRegisters(W.registers,byteorder =Endian.Big,wordorder=Endian.Little)
  
    W_d ={'float':W_d.decode_32bit_float(),}
    
    with open ('/var/www/html/index.html','w') as f:
    
     for i,value in W_d.items():
       try:
        iteritems
       except NameError:
        
         print ((value),file=f)
     W=value
    
    VF1=client.read_holding_registers(3926,2,unit=1)
    VF1_d = decode.fromRegisters(VF1.registers,byteorder =Endian.Big,wordorder=Endian.Little)
  
    VF1_d ={'float':VF1_d.decode_32bit_float(),}
    
    with open ('/var/www/html/frequency.html','w') as f:
    
     for i,value in VF1_d.items():
       try:
        iteritems
       except NameError:
        
         print ((value),file=f)
     VF1=value
    
    AF1=client.read_holding_registers(3928,2,unit=1)
    AF1_d = decode.fromRegisters(AF1.registers,byteorder =Endian.Big,wordorder=Endian.Little)
  
    AF1_d ={'float':AF1_d.decode_32bit_float(),}
    
    with open ('/var/www/html/corrent.html','w') as f:
    
     for i,value in AF1_d.items():
       try:
        iteritems
       except NameError:
        
         print ((value),file=f)
     AF1=value
    
    
      
client.close()
 

vetal 100

Новичок
Пользователь
Июл 20, 2020
4
0
1
Еще раз добрый день.

Хочу не много перефразировать мой "клик о помощи" :-хотелось бы получить данные не из файла ,а сразу на веб сервер -путем набираю в адресной строке браузера ip адреса сервера.Сейчас на моей малинке установлен apache.
 

Asgardov

Пользователь
Пользователь
Май 23, 2020
38
10
8
  • Поднять REST API (?Flask?)
  • По запросу дергать
VF1=client.read_holding_registers(3926,2,unit=1) VF1_d = decode.fromRegisters(VF1.registers,byteorder =Endian.Big,wordorder=Endian.Little)
VF1=client.read_holding_registers(3926,2,unit=1) VF1_d = decode.fromRegisters(VF1.registers,byteorder =Endian.Big,wordorder=Endian.Little)
  • парсить их на сенсоры
  • отдавать по согласно имени сенсора.
Ну и дополнительно всякие CRUD методы реализовать.
 

vetal 100

Новичок
Пользователь
Июл 20, 2020
4
0
1
Спасибо за совет ,но вряд ли справлюсь ,очень сложно для меня.
Попроще вариантов нет наверное?
 

Asgardov

Пользователь
Пользователь
Май 23, 2020
38
10
8
Как вариант опрашивать девайс не раз в минуту а чаще и погрешностью пренебречь. Ну и ответ распарсить на разные файлы по сенсорам.
 

Форум IT Специалистов