Use ts!

Use ts!

Estou usando o cutecom para porta serial, pois tem um carimbo de data / hora porque preciso fazer referência a dois dados diferentes. Mas não consigo registrar esses dados com carimbo de data e hora e preciso de ms precisão. Existe alguma sugestão?

Obrigado, Selim.

Responder1

Se você não precisa de um emulador de terminal, você pode usar socata -vopção que registra todas as E/S com um carimbo de data/hora. Por exemplo,

socat -v READLINE /dev/ttyS0,b19200,raw,echo=0 2>/tmp/log

Tudo o que você digitar no stdin deste comando será enviado para a porta serial ttyS0na taxa de transmissão especificada, etc. E qualquer entrada da porta serial aparecerá no stdout. Em /tmp/logvocê encontrará linhas como

> 2019/11/06 13:56:27.996129  length=6 from=0 to=5
hello
< 2019/11/06 13:56:37.024451  length=8 from=0 to=7
my reply

que corresponde a digitar "olá\n" e receber "minha resposta" de volta.

Responder2

Use ts!

Em qualquer Unix e no subsistema Windows para Linux (também conhecido como WSL), você pode instalar o moreutilspacote que inclui a tsferramenta. tsadiciona carimbos de data/hora aos dados de texto que são alimentados em sua entrada padrão.

Instalaçãoem, por exemplo, Ubuntu:

$ sudo apt-get install moreutils

Uso

Supondo que sua porta serial seja, por exemplo, ttyS70, você pode executar esta linha de comando para

  • leia dados seriais desta porta (usando cat),
  • adicione um carimbo de data/hora (usando ts) e
  • imprima a linha resultante e ao mesmo tempo salve-a em um arquivo (usando tee):
$ cat /dev/ttyS70 | ts | tee logfile

Para o meu tipo de dados seriais, o resultado é assim:

Feb 14 18:37:03 13438 1     0     0.0     19  -80.00    0.00 1
Feb 14 18:37:03 13440 1     0     0.0     19  -80.00    0.00 1
Feb 14 18:37:04 13441 1     0     0.0     19  -80.00    0.00 1
Feb 14 18:37:04 13442 1     0     0.0     19  -80.00    0.00 1
Feb 14 18:37:04 13444 1     0     0.0     19  -80.00    0.00 1

Neste exemplo, a porta serial recebe mais de uma linha por segundo. Como a resolução do carimbo de data/hora é de segundos, várias linhas possuem o mesmo carimbo de data/hora. Adicionar um carimbo de data/hora com resolução mais alta tspermite controlar como o carimbo de data/hora é formatado. Por exemplo, %.svocê terá segundos desde 1970 em resolução inferior a um segundo:

$ cat /dev/ttyS70 | ts %.s | tee logfile

resulta em

1676396776.277146 18963 1     0     0.0     19  -80.00    0.00 1
1676396776.405363 18964 1     0     0.0     19  -80.00    0.00 1
1676396776.532999 18966 1     0     0.0     19  -80.00    0.00 1
1676396776.660920 18967 1     0     0.0     19  -80.00    0.00 1
1676396776.789261 18968 1     0     0.0     19  -80.00    0.00 1
1676396776.917136 18969 1     0     0.0     19  -80.00    0.00 1

Se você não precisar de dados de tempo absoluto, use a opção -s. Isso lhe dará o tempo decorrido desde o início do programa:

$ cat /dev/ttyS70 | ts -s %.s | tee logfile

resulta em

0.072230 6459 42     0     0.0  20567 -100.00    0.00 1
0.199964 6459 42     0     0.0  20567 -100.00    0.00 1
0.311792 6460 42     0     0.0  20568 -100.00    0.00 1
0.439221 6460 42     0     0.0  20566 -100.00    0.00 1
0.567191 6460 42     0     0.0  20566 -100.00    0.00 1
0.694773 6460 42     0     0.0  20566 -100.00    0.00 1
0.822279 6461 42     0     0.0  20567 -100.00    0.00 1
0.950085 6461 42     0     0.0  20566 -100.00    0.00 1
1.061797 6461 42     0     0.0  20567 -100.00    0.00 1
1.189510 6461 42     0     0.0  20568 -100.00    0.00 1

informação relacionada