Передісторія
Одного разу виникло питання про те, як оперативно отримувати інформацію про стан мережі, коли знаходишся не у робочого місця.
Шляхом нехитрих роздумів був знайдений єдиний вихід: відсилання SMS-повідомлень системою моніторингу про ключові події.
Для реалізації цього проекту були куплені GSM модем Siemens MC35i і 1-портовий асинхронний сервер Moxa NPort-5110. що забезпечує перетворення інтерфейсу RS-232 в Ethernet і звичайно ж сервер під FreeBSD 🙂
Moxa NPort-5110 був придбаний для мети відсилання SMS-повідомлень з будь-якого сегменту мережі, а не тільки з машини, до якої підключений GSM-шлюз.
Теорія з прикладами
Отже, конфігурація схеми наступна:
GSM модем включений в Moxa NPort-5110 кабелем RS-232.
де CTRL + Z - комбінація клавіш, натискання якої означає кінець повідомлення.
З відправкою повідомлення «Ахтунг!» На кирилиці на номер +79101234567 все сильно складніше, тому що повідомлення повинно йти пакетом в форматі PDU в кодуванні UCS2 (Юнікодние кодування, підтримує в тому числі кирилицю), а тому розглянемо цей випадок докладніше.
Розберемо детальніше цю «кашу»:
Формат PDU-пакета є 16-річної послідовність, що передається человекочітаемой рядком (НЕ ASCII-представлення самих 16-ковий чисел). Оригінал опису (збережена копія) формату PDU пакета (англійською).
Кодування відправки SMS повідомлень на PHP
Декодування прийнятих SMS повідомлень на PHP
Команди для читання SMS з GSM модемів:
at + cmgf = 1 - виводити повідомлення в упакованому (читабельному) вигляді
at + cmgl = "all" - вивести повідомлення
at + cmgr = n - прочитати окреме повідомлення
at + cmgd = n - видалити повідомлення з SIM-карти
Сам прийом СМС повідомлень з GSM шлюзу не сильно відрізняється від передачі (на основі вищенаведеної відправки пропонується вам самостійно реалізувати це. Опишу тільки функцію для перетворення повідомлення з «тарабарської» на російську: