Работа с smsd на роутерах iRZ серии R0, R2, R4

smsd - сервис для приёма и отправки SMS на роутерах iRZ


Что делает smsd?


- Периодически опрашивает модем на наличие новых SMS

- Считывает SMS из памяти SIM-карты/модема

- Декодирует SMS, экспортирует переменные среды и по очереди запускает скрипты, находящиеся в директории

/etc/uagent.d/smsd/ Порядок сортировки скриптов - алфавитный (по имени)

- Удаляет принятые SMS из памяти SIM/модема

- Получает SMS, передваваемые на отправку через утилиту send-sms

- Перемещает SMS в очередь "на отправку", дожидается когда модем освободится, и затем передаёт SMS. Если отправка невозможна, переносит SMS в конец очереди и повторяет попытку позже.


    Приём SMS

    Переменные окружения для скриптов из /etc/uagent.d/smsd/

    DEVICE - tty интерфейс модема, с которого считана SMS, например '/dev/ttyMODEM1_AUX'

    FROM - номер телефона в формате <код страны><код оператора><номер телефона>, без + и без 8

    MODEM - имя модема из конфига, например 'modem1'

    TEXT- декодированый текст сообщения

    REPR - всё вышеперечисленное в json формате, например

    '{"FROM":"7XXXYYYZZQQ","TEXT":"Test message","MODEM":"modem1","DEVICE":"/dev/ttyMODEM1_AUX"}'
    PWD='/'


    Добавление собственных скриптов обработки SMS

    Для добавления собственных обработчиков достаточно положить скрипт в /etc/uagent.d/smsd/

    Пример скрипта, который будет сохранять SMS и вызывать стороннее приложение /usr/bin/external.bin с аргументами FROM и TEXT


    cat <<EOF > /etc/uagent.d/smsd/00-custom.sh     # начало записи скрипта в файл
    #!/bin/sh                                       # указание интерпретатора
    TEMP_DIR="/var/sms/incoming"                    # запись в переменную строки пути временной директории
    mkdir -p $TEMP_DIR                              # создание временной директории, если ее нет
    DATE="$(date +%Y-%m-%d_%H-%M-%S)"               # запись в переменную строки текущей даты, например 2022-09-13_13-25-27
    FNAME="${TEMP_DIR}/${FROM}_${DATE}.txt"         # запись в переменную пути временного файла
    echo "FROM=$FROM" > $FNAME                      # создание временного файла и запись в него строки с номером адресата
    echo "TEXT=\"$TEXT\"" >> $FNAME                 # дописывание во временный файл текста сообщения
    /usr/bin/external.bin "$FROM" "$TEXT"           # запуск внешней программы с аргументами номера и текста сообщения
    EOF                                             # конец записи скрипта в файл


    Отправка SMS

    Пример отправки сообщения через утилиту send-sms


    send-sms [OPTIONS] RECIPIENT TEXT0 [TEXT1:...]


    Для отправки SMS с конкретного модуля используется ключ -m с указанием номера модема:

    send-sms -m 1 7XXXYYYZZQQ Test message


    Для просмотра ID отправленного SMS используйте ключ -S ( --show)

    send-sms -S 7XXXYYYZZQQ Test message


    Для вызова дополнительной информации используйте ключ -h ( --help)

    send-sms -h


    Очередь отправки SMS

    За управление очередью отправки SMS отвечает /etc/config/smsd

    root@iRZ-Router:~# cat /etc/config/smsd
    
    config smsd
    	option verbose '0'
    	option r_polltime '72'
    	option t_client_timeout '30'
    	option t_queue_size '10'
    	option t_modem_timeout '30'
    	option t_post_error_delay '5'
    	option t_tries_limit '3'
    	option t_postpone '60'
    ...

    Значение параметров config smsd

    Параметр

    Имя

    Значение по умолчанию

    r_polltime

    Интервал чтения SMS, секунд

    72

    t_modem_timeout

    Время ожидания ответа на команду отправленную модему, секунд

    30

    t_queue_size

    Размер очереди сообщений

    64

    t_post_error_delay

    Задержка перед следующей итерации, если произошла ошибка при отправке SMS, секунд

    30

    t_tries_limit

    Число попыток отправки сообщения. Чтобы отключить лимит попыток отправки, нужно выставить значение t_tries_limit '0'

    3

    t_postpone

    Минимальная задержка перед следующей попыткой отправки сообщения, секунд

    60


    Лог

    В доступный на пользовательском уровне лог вынесены следующие сообщения:

    Tекст сообщения

    Аргументы

    Значение

    create message[%i]

    ID исходящей SMS

    Создано сообщение с указанным ID

    queue message full, dropping 1 message[%i]

    ID исходящей SMS

    Очередь исходящих сообщений заполнена, сообщение отброшено

    Modem %i - message[%i] sent successfully

    номер модема, ID исходящей SMS

    Сообщение успешно отправлено через модем с указанным номером

    failed to submit message[%i], retries exceeded

    ID исходящей SMS

    Сообщение не отправлено, лимит попыток отправки исчерпан

    message queue is not empty on exit, dropping %d messages

    размер очереди

    Будет выведено при закрытии программы, которая еще не успела отправить все SMS

    Эта статья помогла Вам?

    Сервис поддержки клиентов работает на платформе UserEcho