Работа с 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