Прийом та обробка SMS-повідомлень на Linux-машині
Налаштування сервера
Отже, до мене потрапив модемчик Huawei E1750 (HSPA USB Stick) з контрактом. Перше з чим зіткнеться людина, яка взялася за подібне завдання, це те, що всі нові моделі GSM-модемів, на користь користувачам Windows, розпізнаються в системі спочатку як пристрій зберігання даних (SCSI CD-ROM). З нього запускається autorun, який встановить драйвера і переключить модем на режим модему (про як!). Відразу як я довідався про це, я вирішив “прибули”. Однак ще півгодини, і було знайдено утилітуusb_modeswitch, яка виконує перемикання режимів модему. Тільки після цього модем почне працювати за його прямим призначенням. Запускається і налаштовується вона просто, тут писати нема чого.
Ну з богом! Інформації на той час вже було нарито не сказати щоб багато, але достатньо, щоб копати в потрібному напрямку. Існуючі рішення відфільтрували за ознакою «працює як демон», у результаті залишився один кандидат — SMS Server Tools. Слід зазначити, що оригінальний пакет не розвивається, але його продовження SMS Server Tools 3 як розвивається, а й відмінно підтримується своїм творцем Mr. Keijo "Keke" Kasvi.
На жаль, у моїй улюбленій Gentoo не знайшлося ebuild-а для свіжої версії, остання версія 2.2.20. Але, недовго погугливши, я знайшов уже готовий ebuild для 3-ї версії, який і скомпілював після невеликої його редагування. На даний момент у мене встановлена та стабільно працює версія 3.1.14.
Як виявилося, налаштування smstools є настільки простим, що практично з початковим конфігом можна вже починати приймати повідомлення. Ні, звичайно, якщо у вас сімка закрита пін-кодом, Вам його доведеться додати в конфігурацію, але це робиться дуже просто.
Структура файлу конфігурації теж зрозуміла до неподобства (vivaunix-way!). На початку файлу прописуємо глобальні налаштування демона, а потім у секціях описуємо налаштування наших пристроїв: # Глобальні налаштування демона . .
# Наш модем та його налаштування [Huawei E1750] .
# І ще один пристрій, якщо він у нас є, зі своїми налаштуваннями [AnotherModem] .
Глобальні налаштування
Найважливіший параметр, які пристрої демон буде опитувати на предмет наявності нових повідомлень. Якщо у вас всього один пристрій, як у мене, просто пропишіть devices = HuaweiE1750 , якщо їх у Вас кілька, перерахуйте їх через кому.
Ще два важливі параметри - це user = smsd і group = sms. Людям, знайомим з лінукс, пояснювати їхнє значення не треба, я ж обмежуся лише нагадуванням про правильні права на всі ресурси, до яких демон повинен мати доступ. Ну і згадаю про такі інструкції, як p >, logfile = /var/log/smsd/smsd.log, значення яких теж має бути зрозумілим. До речі, на момент налагодження рекомендую вставити в конфігурацію також інструкцію loglevel = 7, це дозволить Вам відстежувати, що відбувається всередині демона. Надалі я виставив loglevel=5.
Налаштування модему
В принципі, тут також, як було обіцяно, все просто. Однак я зіткнувся з деякими проблемами, через які я власне й наважився поділитись з Вами інформацією.
Другою проблемою стало зависання модему іноді. На жаль, вичитувати матчасть часу вже не було, та й Гугл видав таку кількість варіантів, що пробувати їх все не мало сенсу. Тому, не надто розраховуючи на допомогу, я поповз на форум smstools3. Які ж були мої здивування та радість, коли keke відповів на мій пост через жалюгідні 2-3 години. Ні, точного рішення він не давав, проте два рядки, які вінрекомендував додати в конфіг раз і назавжди позбавили мене зависань. Для мене досі залишається загадкою, де брати значення для них, я не знайшов технічної документації за модемом: check_memory_method = 1 memory_start = 0
Ну, і третьою проблемою, через яку почався весь сир-бор, стало написання обробника SMS. Для цього в конфіг була додана інструкція eventhandler = /usr/local/scripts/activate , всередині якої відправлялася на сервер проекту запиту на активацію облікового запису. Скрипт отримує два параметри — тип події та файл повідомлення. Висмикує з нього потрібні нам дані і відсилає на сервер.
Отже, отримали такий короткий конфіг: devices = Huawei loglevel = 5
user = smsd group = sms logfile = /var/log/smsd/smsd.log infofile = /var/run/smsd/smsd.running p > alarmlevel = 7 alarmhandler = /usr/local/scripts/activate/smsd-alarm
[Huawei] device = /dev/gsmmodem baudrate = 115200 pin = 1111 incoming = high cmgl_value = 0 check_memory_method = 1 memory_start = 0 eventhandler = /usr/local/scripts/activate
Несподіваний profit
А у нас тут можна отримати грант на тестовий період Яндекс.Хмари. Варто лише у полі «секретний пароль» запровадити «Хабр»