Я пытаюсь получить данные с датчиков, чтобы передать их в базу данных influxdb. У нас есть очень старые датчики, записывающие это на сервер через FIFO на этом сервере. Я знаю, что могу это прочитать (сделал быструю программу):
# reader.py
import os
FIFO = '/var/axis/sensor1'
FIFO_PATH = FIFO
fifo_path = FIFO
print("about to "+fifo_path)
# Ensure the FIFO exists
if not os.path.exists(fifo_path):
raise IOError("The FIFO '{0}' does not exist. Please create it using 'mkfifo {0}'.".format(fifo_path))
print("Opening FIFO {0} for reading...".format(fifo_path))
fifo_fd = os.open(fifo_path, os.O_RDONLY)
fifo_file = os.fdopen(fifo_fd)
try:
while True:
line = fifo_file.read(1)
if not line:
break
# Print the line to the screen
print(line),
finally:
fifo_file.close()
print("FIFO Closed.")
Итак, когда я запускаю это и датчик обрабатывает данные, я вижу что-то вроде этого, прокручивая экран:
@eN?>??Y?n??A?)??[Z@?c
@eN?>??\?n??A?)??[Z@?(
@eN?>`?n??A?)??[Z@?? @eN?>33c?n??A?)??[Z@?? @eN?>fff?n??A?)??[Z@?? @eN?>??i?n??A?)??[Z@? @eN?>??l?n??A?)??[Z@? @eN?>p?n??A?)??[Z@? @eN?>33s?n??A?)??[Z@? @eN?>ffv?n??A?)??[Z@? @eN?>??y?n??A?)??[Z@? @eN?>??|?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̌?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̜?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̬?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̼?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@@eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@P? @???z?>?n??A?)??[Z@?~
@???z?>33?n??A?)??[Z@?_
@???z?>ff?n??A?)??[Z@??
Очевидно, что строка чтения — неправильная команда. Я думаю, эти данные двоичные? Всегда ли fifo двоичны? Если это двоичный файл, это означает, что мне нужно выяснить, как эта старая система/датчик записывает этот файл Fifo, чтобы знать, как его затем загрузить и проанализировать?
Я хочу знать, что я читаю поэтому я знаю, как упаковать его как json для отправки в influxdb.
РЕДАКТИРОВАТЬ: Я считаю, что нашел некоторый код c примера чтения структуры данных, со структурой я могу это прочитать в python?
C Структура данных:
typedef struct axis_data {
double now;
double p;
double v;
double current;
double error;
} AXIS_DATA;
fifoList.fd = open("/var/axis/sensor1", O_RDONLY);
AXIS_DATA data;
rb=read(this->fifoList.fd, &data, sizeof(data));
data.p, data.v, data.current, data.error
Конечно, я перефразировал C, и мой C заржавел, но я считаю, что хочу сделать то же самое, создав эквивалент структуры в Python и зачитав размер этой структуры в саму структуру. Каким-то образом, на Python, моя попытка сделать это ниже (не могу поверить, что я никогда не делал двоичные файлы в Python)
# reader.py
import os
from ctypes import *
class AXIS_DATA(Structure):
_fields_ = [('now', c_double),
('p', c_double),
('v', c_double),
('current', c_double),
('error', c_double)]
FIFO = '/var/axis/sensor1'
#FIFO = 'mytest'
FIFO_PATH = FIFO
fifo_path = FIFO
print("about to "+fifo_path)
# Ensure the FIFO exists
if not os.path.exists(fifo_path):
raise IOError("The FIFO '{0}' does not exist. Please create it using 'mkfifo {0}'.".format(fifo_path))
print("Opening FIFO {0} for reading...".format(fifo_path))
fifo_fd = os.open(fifo_path, os.O_RDONLY)
#fifo_file = os.fdopen(fifo_fd)
fifo_file = open(fifo_path)
try:
while True:
result = []
dat = AXIS_DATA()
# this just froze
while fifo_file.readinto(dat) == sizeof(dat):
result.append((dat.now, dat.p, dat.v, dat.current, dat.error))
if not line:
break
# Print the line to the screen
print(result),
finally:
fifo_file.close()
print("FIFO Closed.")
Подробнее здесь: https://stackoverflow.com/questions/789 ... ish-binary
Впервые в Fifo в Linux, чтение с Python приводит к тарабарщине? (двоичный) ⇐ Linux
1726616692
Anonymous
Я пытаюсь получить данные с датчиков, чтобы передать их в базу данных influxdb. У нас есть очень старые датчики, записывающие это на сервер через FIFO на этом сервере. Я знаю, что могу это прочитать (сделал быструю программу):
# reader.py
import os
FIFO = '/var/axis/sensor1'
FIFO_PATH = FIFO
fifo_path = FIFO
print("about to "+fifo_path)
# Ensure the FIFO exists
if not os.path.exists(fifo_path):
raise IOError("The FIFO '{0}' does not exist. Please create it using 'mkfifo {0}'.".format(fifo_path))
print("Opening FIFO {0} for reading...".format(fifo_path))
fifo_fd = os.open(fifo_path, os.O_RDONLY)
fifo_file = os.fdopen(fifo_fd)
try:
while True:
line = fifo_file.read(1)
if not line:
break
# Print the line to the screen
print(line),
finally:
fifo_file.close()
print("FIFO Closed.")
Итак, когда я запускаю это и датчик обрабатывает данные, я вижу что-то вроде этого, прокручивая экран:
@eN?>??Y?n??A?)??[Z@?c
@eN?>??\?n??A?)??[Z@?(
@eN?>`?n??A?)??[Z@?? @eN?>33c?n??A?)??[Z@?? @eN?>fff?n??A?)??[Z@?? @eN?>??i?n??A?)??[Z@? @eN?>??l?n??A?)??[Z@? @eN?>p?n??A?)??[Z@? @eN?>33s?n??A?)??[Z@? @eN?>ffv?n??A?)??[Z@? @eN?>??y?n??A?)??[Z@? @eN?>??|?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̌?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̜?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̬?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>?̼?n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@@eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>??n??A?)??[Z@? @eN?>33??n??A?)??[Z@? @eN?>ff??n??A?)??[Z@? @eN?>????n??A?)??[Z@? @eN?>????n??A?)??[Z@P? @???z?>?n??A?)??[Z@?~
@???z?>33?n??A?)??[Z@?_
@???z?>ff?n??A?)??[Z@??
Очевидно, что строка чтения — неправильная команда. Я думаю, эти данные двоичные? Всегда ли fifo двоичны? Если это двоичный файл, это означает, что мне нужно выяснить, как эта старая система/датчик записывает этот файл Fifo, чтобы знать, как его затем загрузить и проанализировать?
Я хочу знать, что я читаю поэтому я знаю, как упаковать его как json для отправки в influxdb.
РЕДАКТИРОВАТЬ: Я считаю, что нашел некоторый код c примера чтения структуры данных, со структурой я могу это прочитать в python?
C Структура данных:
typedef struct axis_data {
double now;
double p;
double v;
double current;
double error;
} AXIS_DATA;
fifoList.fd = open("/var/axis/sensor1", O_RDONLY);
AXIS_DATA data;
rb=read(this->fifoList.fd, &data, sizeof(data));
data.p, data.v, data.current, data.error
Конечно, я перефразировал C, и мой C заржавел, но я считаю, что хочу сделать то же самое, создав эквивалент структуры в Python и зачитав размер этой структуры в саму структуру. Каким-то образом, на Python, моя попытка сделать это ниже (не могу поверить, что я никогда не делал двоичные файлы в Python)
# reader.py
import os
from ctypes import *
class AXIS_DATA(Structure):
_fields_ = [('now', c_double),
('p', c_double),
('v', c_double),
('current', c_double),
('error', c_double)]
FIFO = '/var/axis/sensor1'
#FIFO = 'mytest'
FIFO_PATH = FIFO
fifo_path = FIFO
print("about to "+fifo_path)
# Ensure the FIFO exists
if not os.path.exists(fifo_path):
raise IOError("The FIFO '{0}' does not exist. Please create it using 'mkfifo {0}'.".format(fifo_path))
print("Opening FIFO {0} for reading...".format(fifo_path))
fifo_fd = os.open(fifo_path, os.O_RDONLY)
#fifo_file = os.fdopen(fifo_fd)
fifo_file = open(fifo_path)
try:
while True:
result = []
dat = AXIS_DATA()
# this just froze
while fifo_file.readinto(dat) == sizeof(dat):
result.append((dat.now, dat.p, dat.v, dat.current, dat.error))
if not line:
break
# Print the line to the screen
print(result),
finally:
fifo_file.close()
print("FIFO Closed.")
Подробнее здесь: [url]https://stackoverflow.com/questions/78995649/new-to-fifo-in-linux-reading-with-python-produces-gibberish-binary[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия