отправка SMS через 3G модем, OpenWRT
Добавлено: 2019-08-10 13:33:40
мысли вслух, нахрена мне это надо...
собсно, последние года два-полтора вначале SMS шлюзы задрали цены, потом сами операторы полезли в бутылку - одним писмо предоставь, другим имя оплати ... как итог - цены снова поднялись, до единиц рублей за SMS внутри РФ =(
при том что сама SMS ничего и не стоит по сути. 160 штоле байт информации неприоритетно передать - это же вообще ни о чём...
в общем, покопался в тарифах, у всех из большой четвёрки есть тарифы с большим количеством SMS. до 500, в месяц, при этом цена будет десятки копеек за штуку. анлима у них нет, ни у одного. ну или не нашёл.
зато нашёл у виртуального оператора, одноимённого известному банку с агрессивной рекламой и русским названием с уклоном в англицизм (тинькоф, короче) тариф 49 рублей - безлимитно SMS.
заказал доп. симку, на след. день привезли. (уже с полгода как пересадил и себя и жену и детей на него - расходы на связь вдвое упали, от мегафона на котором сидел с 2003 года)
в тумбочке, уже много лет, валяется 3G модем, в датацентре в стойке с серверами стоит старый ASUS c OpenWRT
поехали.
пока обкатываю на том что под рукой есть (Asus WL500GP V2), в датацентр попозже поедет всё это.
и не факт что на этом железе - эта точка на даче стоит, и она там нужна. в датацентре и труба пониже и дым пожиже...
голая OpenWRT 18.06.2, оставляет на этой железке массу свободного места (т.к. железка с 8mb флэшкой, на 4mb будет впритирку или собирать свой образ придётся)
ставим модули ядра, и smstools3 который будет отправлять SMS.
к сожалению, в репозиториях нет gnokii который гораздо лучше и информативней =(
смотрим чё сожрало места
тут, обнаруживаю, что команды lsusb нету. ставим
снова место, надо все цифры запомнить, мне ещё это всё на 4mb потом впихивать...
смотрим список USB устройств
мопед виден, правда, модель нифига не правильно показывает. в реальности это MF192, известная бага, работе не мешает...
однако, устройства не появилось:
прописываем вендора и устройство, перезагружаемся
фигвам. неправильно прописал
прописываем правильно
модем увидело
рисуем конфиг smstools3
раскомментировал раздел про GSM1, да прописал путь к устройству - конфиг-то готовый лежит уже после установки
перезапускаем сервис
смотрим лог
всё хорошо.
проверяем, шлём себе SMS
смотрим лог, пока телефон не успел брякнуть
всё хорошо, но, кириллицу оно не умеет из коробки. в отличие от вышеупомянутого gnokii
поэтому снова обновляем список пакетов
и ставим iconv
контроль места
всё готово, но нет API, через которое биллинг, ради которого и затеяно всё это, будет слать сообщения.
рисуем его:
и делаем файл исполняемым
собственно и всё.
можно подёргать API - пример в нём же есть, работает.
докрутить авторизацию - uhttpd её умеет, или просто ограничить доступ на веб-интерфейс файрволлом (что, наверное, более правильно)
цена вопроса - вечер времени (самое дорогое), 49 рублей в месяц, и мусор из тумбочки - точка доступа с USB и 3G модем
собсно, на АВИТО можно купить и точку с 8Mb/64Mb памяти и модем, главное в список совместимого железа не забыть заглянуть на сайте OpenWRT.
цена вопроса - рублей 400 за оба устройства. просто поискать надо. или 500 - если срочно
P.S. это себе на память писалось.
собсно, последние года два-полтора вначале SMS шлюзы задрали цены, потом сами операторы полезли в бутылку - одним писмо предоставь, другим имя оплати ... как итог - цены снова поднялись, до единиц рублей за SMS внутри РФ =(
при том что сама SMS ничего и не стоит по сути. 160 штоле байт информации неприоритетно передать - это же вообще ни о чём...
в общем, покопался в тарифах, у всех из большой четвёрки есть тарифы с большим количеством SMS. до 500, в месяц, при этом цена будет десятки копеек за штуку. анлима у них нет, ни у одного. ну или не нашёл.
зато нашёл у виртуального оператора, одноимённого известному банку с агрессивной рекламой и русским названием с уклоном в англицизм (тинькоф, короче) тариф 49 рублей - безлимитно SMS.
заказал доп. симку, на след. день привезли. (уже с полгода как пересадил и себя и жену и детей на него - расходы на связь вдвое упали, от мегафона на котором сидел с 2003 года)
в тумбочке, уже много лет, валяется 3G модем, в датацентре в стойке с серверами стоит старый ASUS c OpenWRT
поехали.
пока обкатываю на том что под рукой есть (Asus WL500GP V2), в датацентр попозже поедет всё это.
и не факт что на этом железе - эта точка на даче стоит, и она там нужна. в датацентре и труба пониже и дым пожиже...
голая OpenWRT 18.06.2, оставляет на этой железке массу свободного места (т.к. железка с 8mb флэшкой, на 4mb будет впритирку или собирать свой образ придётся)
Код: Выделить всё
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 2.6M 2.6M 0 100% /rom
tmpfs 13.6M 408.0K 13.2M 3% /tmp
/dev/mtdblock5 3.8M 320.0K 3.5M 8% /overlay
overlayfs:/overlay 3.8M 320.0K 3.5M 8% /
tmpfs 512.0K 0 512.0K 0% /dev
root@OpenWrt:~#
к сожалению, в репозиториях нет gnokii который гораздо лучше и информативней =(
Код: Выделить всё
root@OpenWrt:~# opkg install comgt kmod-usb-core kmod-usb-serial kmod-usb-serial-option kmod-usb-uhci kmod-usb2 smstools3
Installing comgt (0.32-30) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/comgt_0.32-30_mipsel_mips32.ipk
Installing chat (2.4.7-12) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/chat_2.4.7-12_mipsel_mips32.ipk
Package kmod-usb-core (4.14.95-1) installed in root is up to date.
Installing kmod-usb-serial (4.14.95-1) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/kmod-usb-serial_4.14.95-1_mipsel_mips32.ipk
Installing kmod-usb-serial-option (4.14.95-1) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/kmod-usb-serial-option_4.14.95-1_mipsel_mips32.ipk
Installing kmod-usb-serial-wwan (4.14.95-1) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/kmod-usb-serial-wwan_4.14.95-1_mipsel_mips32.ipk
Installing kmod-usb-uhci (4.14.95-1) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/kmod-usb-uhci_4.14.95-1_mipsel_mips32.ipk
Package kmod-usb2 (4.14.95-1) installed in root is up to date.
Installing smstools3 (3.1.21-2) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/packages/smstools3_3.1.21-2_mipsel_mips32.ipk
Configuring chat.
Configuring kmod-usb-serial.
Configuring kmod-usb-serial-wwan.
Configuring kmod-usb-serial-option.
Configuring comgt.
Configuring smstools3.
Creating minimum spool directories
Configuring kmod-usb-uhci.
Код: Выделить всё
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 2.6M 2.6M 0 100% /rom
tmpfs 13.6M 1.1M 12.5M 8% /tmp
/dev/mtdblock5 3.8M 540.0K 3.3M 14% /overlay
overlayfs:/overlay 3.8M 540.0K 3.3M 14% /
tmpfs 512.0K 0 512.0K 0% /dev
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# opkg install usbutils
Installing usbutils (007-9) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/usbutils_007-9_mipsel_mips32.ipk
Installing librt (1.1.19-1) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/librt_1.1.19-1_mipsel_mips32.ipk
Installing libusb-1.0 (1.0.22-1) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/libusb-1.0_1.0.22-1_mipsel_mips32.ipk
Configuring librt.
Configuring libusb-1.0.
Configuring usbutils.
Код: Выделить всё
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 2.6M 2.6M 0 100% /rom
tmpfs 13.6M 1.1M 12.5M 8% /tmp
/dev/mtdblock5 3.8M 852.0K 3.0M 22% /overlay
overlayfs:/overlay 3.8M 852.0K 3.0M 22% /
tmpfs 512.0K 0 512.0K 0% /dev
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# lsusb
Bus 001 Device 003: ID 19d2:1217 ZTE WCDMA Technologies MSM MF652
Bus 002 Device 001: ID 1d6b:0001 Linux Foundation 1.1 root hub
Bus 001 Device 002: ID 0424:2502 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
root@OpenWrt:~#
однако, устройства не появилось:
Код: Выделить всё
root@OpenWrt:~# ll /dev/tty* | grep -i usb
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# vim /etc/modules.d/usb-serial
root@OpenWrt:~# cat /etc/modules.d/usb-serial
usbserial vendor=19d2 product=1217
root@OpenWrt:~#
root@OpenWrt:~#
root@OpenWrt:~# reboot
Код: Выделить всё
root@OpenWrt:~# logread | grep usbserial
Sat Aug 10 02:01:06 2019 kern.err kernel: [ 16.304270] usbserial: `19d2' invalid for parameter `vendor'
Sat Aug 10 02:01:06 2019 kern.err kernel: [ 17.402469] usbserial: `19d2' invalid for parameter `vendor'
Sat Aug 10 02:01:06 2019 kern.err kernel: [ 17.814861] usbserial: `19d2' invalid for parameter `vendor'
Sat Aug 10 02:01:06 2019 kern.err kernel: [ 17.843890] usbserial: `19d2' invalid for parameter `vendor'
Sat Aug 10 02:01:06 2019 user.err kernel: [ 17.923867] kmodloader: dependency not loaded usbserial
Sat Aug 10 02:01:06 2019 user.err kernel: [ 17.943843] kmodloader: dependency not loaded usbserial
Sat Aug 10 02:01:06 2019 user.err kernel: [ 17.976984] kmodloader: - usbserial - 0
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# vim /etc/modules.d/usb-serial
root@OpenWrt:~# cat /etc/modules.d/usb-serial
usbserial vendor=0x19d2 product=0x1217
root@OpenWrt:~# reboot
Код: Выделить всё
root@OpenWrt:~# ll /dev/tty* | grep -i usb
crw------- 1 root root 188, 0 Aug 10 02:05 /dev/ttyUSB0
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# cat /etc/smsd.conf
#
# Description: Main configuration file for the smsd
#
devices = GSM1
incoming = /var/spool/sms/incoming
outgoing = /var/spool/sms/outgoing
checked = /var/spool/sms/checked
failed = /var/spool/sms/failed
sent = /var/spool/sms/sent
receive_before_send = no
autosplit = 3
logfile = 1
loglevel = 5
# Uncomment (and edit) this section to allow smsd to start:
#
[GSM1]
init = AT+CPMS="ME","ME","ME"
device = /dev/ttyUSB0
incoming = yes
pin = 0000
baudrate = 115200
перезапускаем сервис
Код: Выделить всё
root@OpenWrt:~# /etc/rc.d/*sms* restart
Creating minimum spool directories
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# logread | tail
Sat Aug 10 02:09:13 2019 daemon.info smsd[1549]: 2019-08-10 02:09:13,2, smsd: Smsd mainprocess terminated.
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,2, smsd: Smsd v3.1.21 started.
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,2, smsd: Running as root:root (0:0).
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,4, smsd: File mode creation mask: 022 (0644, rw-r--r--).
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,2, smsd: Running in terminal mode.
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,5, smsd: Outgoing file checker has started. PID: 1641.
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,5, GSM1: Modem handler 0 has started. PID: 1644.
Sat Aug 10 02:11:22 2019 daemon.info smsd[1641]: 2019-08-10 02:11:22,5, GSM1: Using check_memory_method 1: CPMS is used.
Sat Aug 10 02:11:23 2019 daemon.info smsd[1641]: 2019-08-10 02:11:23,5, GSM1: IMEI: 355582044570362
Sat Aug 10 02:11:23 2019 daemon.info smsd[1641]: 2019-08-10 02:11:23,5, GSM1: IMSI: 250621001272994
root@OpenWrt:~#
проверяем, шлём себе SMS
Код: Выделить всё
root@OpenWrt:~# sendsms +79265933919 "est text message"
--
Text: est text message
To: +79265933919
root@OpenWrt:~#

Код: Выделить всё
root@OpenWrt:~# logread | tail -2
Sat Aug 10 02:15:13 2019 daemon.info smsd[1641]: 2019-08-10 02:15:13,5, smsd: SMS To: 79265933919. Moved file /var/spool/sms/outgoing/send_icgdkN to /var/spool/sms/checked
Sat Aug 10 02:15:16 2019 daemon.info smsd[1641]: 2019-08-10 02:15:16,5, GSM1: SMS sent, Message_id: 39, To: 79265933919, sending time 3 sec.
root@OpenWrt:~#
поэтому снова обновляем список пакетов
Код: Выделить всё
root@OpenWrt:~# opkg update
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_core
Downloading http://downloads.openwrt.org/releases/18.06.2/targets/brcm47xx/legacy/packages/Packages.sig
Signature check passed.
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_base
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/Packages.sig
Signature check passed.
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/luci/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_luci
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/luci/Packages.sig
Signature check passed.
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/packages/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_packages
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/packages/Packages.sig
Signature check passed.
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/routing/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_routing
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/routing/Packages.sig
Signature check passed.
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/telephony/Packages.gz
Updated list of available packages in /var/opkg-lists/openwrt_telephony
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/telephony/Packages.sig
Signature check passed.
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~#
root@OpenWrt:~# opkg install iconv
Installing iconv (1.11.1-3) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/iconv_1.11.1-3_mipsel_mips32.ipk
Installing libiconv-full (1.11.1-3) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/libiconv-full_1.11.1-3_mipsel_mips32.ipk
Installing libcharset (1.11.1-3) to root...
Downloading http://downloads.openwrt.org/releases/18.06.2/packages/mipsel_mips32/base/libcharset_1.11.1-3_mipsel_mips32.ipk
Configuring libiconv-full.
Configuring libcharset.
Configuring iconv.
root@OpenWrt:~#

Код: Выделить всё
root@OpenWrt:~#
root@OpenWrt:~# df -h
Filesystem Size Used Available Use% Mounted on
/dev/root 2.6M 2.6M 0 100% /rom
tmpfs 13.6M 992.0K 12.6M 7% /tmp
/dev/mtdblock5 3.8M 888.0K 2.9M 23% /overlay
overlayfs:/overlay 3.8M 888.0K 2.9M 23% /
tmpfs 512.0K 0 512.0K 0% /dev
root@OpenWrt:~#
рисуем его:
Код: Выделить всё
root@OpenWrt:~# cat /www/cgi-bin/test.sh
#!/bin/sh
# example
# http://192.168.252.10/cgi-bin/test.sh?to=%2B79265933919&text=%D1%82%D0%B5%D1%81%D1%82%D0%BE%D0%B2%D0%BE%D0%B5%20%D1%81%D0%BE%D0%BE%D0%B1%D1%89%D0%B5%D0%BD%D0%B8%D0%B5%20%D0%BA%D1%83%D0%B4%D0%B0-%D1%82%D0%BE
# headers
echo "Content-type: text/html; charset=utf-8"
echo
# $GET variables
to=`echo "$QUERY_STRING" | sed -n 's/^.*to=\([^&]*\).*$/\1/p'`
text=`echo "$QUERY_STRING" | sed -n 's/^.*text=\([^&]*\).*$/\1/p'`
# url decode
to=`uhttpd -d "$to"`
text=`uhttpd -d "$text"`
# temporary file for save SMS
FILE=$(mktemp /tmp/sms_XXXXXXX)
chmod 644 $FILE
# SMS header
echo -e "To: $to\nAlphabet: UCS2\nUDH: false\n" >$FILE
# charset convrsion for russian symbols
echo $text | iconv -f UTF-8 -t UCS-2BE >>$FILE
#cat $FILE
# move file to send
mv $FILE /var/spool/sms/outgoing/
echo OK
root@OpenWrt:~#
Код: Выделить всё
root@OpenWrt:~# chmod 755 /www/cgi-bin/test.sh
root@OpenWrt:~#
можно подёргать API - пример в нём же есть, работает.
докрутить авторизацию - uhttpd её умеет, или просто ограничить доступ на веб-интерфейс файрволлом (что, наверное, более правильно)
цена вопроса - вечер времени (самое дорогое), 49 рублей в месяц, и мусор из тумбочки - точка доступа с USB и 3G модем
собсно, на АВИТО можно купить и точку с 8Mb/64Mb памяти и модем, главное в список совместимого железа не забыть заглянуть на сайте OpenWRT.
цена вопроса - рублей 400 за оба устройства. просто поискать надо. или 500 - если срочно

P.S. это себе на память писалось.