собсно, последние года два-полтора вначале 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. это себе на память писалось.