создать pty и подключить его к последовательному порту / dev / ttyUSB0

PARAM=b
grep -E "nir.*${PARAM}" txt

или

grep -E 'nir.*'"${PARAM}" txt
0
10.01.2019, 00:50
1 ответ

Вы должны иметь возможность использовать socatв простой команде, например

socat pty,link=$HOME/myserial,rawer /dev/ttyUSB0,rawer 2>&1

Это создает символическую ссылку ~/myserialна pty, и любой ввод/вывод к pty копируется в/из последовательного порта. Сделав еще один шаг, вы можете добавить опции -v, чтобы скопировать ввод-вывод в stderr, и -x, чтобы распечатать его в шестнадцатеричном виде со строками заголовков в форме:

< 2019/01/12 18:16:36.528942  length=12 from=310 to=321

, где первый символ — это направление <или >, а длина — это количество скопированных байтов. Использование шестнадцатеричного кода гарантирует, что строка заголовка не будет перепутана с необработанными данными. Вот возможный awk-скрипт для разбора этого. Примерно каждые 10 секунд он записывает текущее количество байтов в секунду в направлении.

socat -v -x pty,link=$HOME/myserial,rawer /dev/ttyUSB0,rawer 2>&1  |
awk '
 /^[><]/{ split($3,x,":"); tod = (x[1]*60+x[2])*60+x[3]; 
          split($4,x,"="); len = x[2]+0; 
          dir = $1=="<" ? "rx" : "tx";
          if(tod-lasttod[dir]>=10){
            printf "%s %f\n",dir,(len+tot[dir])/(tod-lasttod[dir])
            lasttod[dir] = tod
            tot[dir] = 0
          }else tot[dir] += len
}'

Для простоты каждое направление обрабатывается отдельно, и вам нужно зафиксировать время до полуночи. Типичный вывод может быть

tx 2.398754
rx 0.000425
tx 2.398772
rx 61.768501
1
28.01.2020, 04:04

Теги

Похожие вопросы