Как зарегистрировать вывод команды USB модема AT?

Я хочу иметь возможность отправлять команду "AT + CSQ" в / dev / ttyUSB1 каждые 5 секунд и выходить из системы в ответ на текстовый файл. Я могу сделать это вручную через screen (screen / dev / ttyUSB1 и набрать AT + CSQ и посмотреть ответ), но как мне сделать это как скрипт bash?

3
задан 23 July 2013 в 14:31

2 ответа

Инструмент expect предназначен именно для такого рода задач. man expect поможет вам начать.

0
ответ дан 23 July 2013 в 14:31

Ниже приведен пример сценария с некоторой логикой для регистрации и очистки при завершении сценария (команда trap). Важный трюк заключается в том, чтобы держать вход от последовательного порта открытым, иначе вход с момента закрытия порта может быть потерян.

#!/bin/bash

LOGFILE=/var/tmp/modemlog
MODEM=/dev/ttyUSB1
MODEMCMD=AT+CSQ
INTERVAL=5

LOGDATE="date +%Y%m%dT%H%M%S"

# write command to modem
wrmodem () {
    echo -ne "$*"'\r\n' >"$MODEM"
    log "--- sent: $*"
}

# log message to a logfile
log () {
    echo "$($LOGDATE) $@" >>"$LOGFILE"
}

# logger
{
    trap 'log "=== logger stopped $BASHPID"' EXIT
    log "=== logger started: $BASHPID"
    while true ; do
        if read ; then
            log "$(tr -d \\r <<<"$REPLY")"
        fi
    done
} <"$MODEM" &

LOGGERPID=$!
trap 'kill $LOGGERPID' EXIT

# requester
while true ; do
    wrmodem "$MODEMCMD"
    sleep $INTERVAL
done
0
ответ дан 23 July 2013 в 14:31

Другие вопросы по тегам:

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