Php sms через gsm модем
Для реализации этого проекта были куплены GSM модем Siemens MC35i и 1-портовый асинхронный сервер Moxa NPort-5110 , обеспечивающий преобразование интерфейса RS-232 в Ethernet и конечно же сервер под FreeBSD 🙂
Теория с примерами
Итак, конфигурация схемы следующая:
GSM модем включен в Moxa NPort-5110 кабелем RS-232.
Формат PDU-пакета представляет собой 16-ричную последовательность, передающуюся человекочитаемой строкой (не ASCII-представления самих 16-ричных чисел). Оригинал описания (сохраненная копия) формата PDU пакета (на английском).
Команды для чтения SMS с GSM модемов:
Похожие статьи:
(голосов: 10, среднее: 4,60 из 5)Эта статья размещена lehisnoe 19.08.2008 в 17:49 в рубриках FreeBSD, Программинг. Метки: FreeBSD, gsm, pdu, php, sms, ucs2. Вы можете оставить отзыв или trackback с вашего собственного сайта. Отслеживайте все отзывы и комментарии к этой статье при помощи новостной ленты RSS.
комментариев 15
plastilin сказал:
А по поводу вот такого устройства что можно сказать
Нужно сделать веб страничку через которую пользователи из корп. сети смогут отправлять смс и получать результат о доставке с возможностью выбора кириллицы, англ. яз. или транслита. Сталкивался?
lehisnoe сказал:
stramilov сказал:
как можно сделать так чтоб используя телефон gsm можем, можно было через веб интерфейс удаленно делать рассылку?
если не сложно давай поговорим в скайпе. мой ник stramilov или аське 145800415
lehisnoe сказал:
Не вижу проблем: на основе статьи это можно сделать (и у нас есть такая схема в работе: GSM-модем подключен com-портом к серверу с FreeBSD, с которого шлются SMS либо введенные через вэб интерфейс (аналогичный сотовым операторам) либо извещающие о произошедших событиях в сети).
Если вопросы остались, то добро пожаловать на наш форум
phil_qwerty сказал:
phil_qwerty сказал:
требуется ли какая нибудь дополнительная настройка ком порта или модема? не то у меня некоторые проблемы при отправке смс с помощью скрипта
admin сказал:
нет, дополнительных настроек не требуется
ты пробовал отправлять СМСки через AT команды вводя их руками в консоли ?
phil_qwerty сказал:
freeneutron сказал:
Познавательная статья, но вот что мне так и не удалось понять. Если я хочу наладить прием прием SMS сразу на 100 разных номеров, то мне придется использовать 100 GSM шлюзов или можно найти более экономичное решение?
admin сказал:
1 GSM-шлюз = 1 сим карта, 100 номеров = 100 сим-карт
Не совсем понятно зачем тебе 100 номеров, но если нужно, то протокол SMPP для тебя.
Заключаешь с GSM оператором договор, берешь 100 номеров, настраиваешь у себя kannel (он поддерживает протокол SMPP) и вперед.
pwn сказал:
pwn сказал:
lehisnoe сказал:
2pwn: благодарю за обмен опытом!
pwn сказал:
не за что 🙂
файлики скриптов только надо как-то по другому залить, а то и кавычки заколбасились и отступы съехали. Тому кто их попробует передрать потом надо будет после еще html чудачества руками рихтовать.
Давно обещанный «интернет вещей» не так далек, как может показаться. Правда, футуристические статьи, рисующие напичканную датчиками технику, редко касаются одного важного вопроса: каким образом информация с этих датчиков достигает сервера? Если они находятся в доме — это одно дело. А если датчики установлены, скажем, на грузовом автомобиле или вообще в чистом поле? Ответ есть: зачастую информацию с датчиков собирает специальный контроллер, который затем передает ее на сервер по СМС. Тут, впрочем, возникает другой вопрос: как построить сервер, способный взаимодействовать с такими устройствами?
СМС и набор команд Hayes
Современная мобильная связь только кажется вещью в себе. Если смотреть на нее с верной точки зрения, быстро выясняется, что у навороченных смартфонов немало общего со старенькими «Курьерами» и «Спортстерами». И те и другие поддерживают так называемый набор команд Hayes.
Ветераны индустрии помнят замысловатые инициализационные строки, которые приходилось скармливать модему перед подключением к BBS или узлу Фидо. Каждая такая строка — это примитивная программа, составленная из команд Hayes для настройки модема.
Модем Hayes Smartmodem, для которого в 1981 году была разработана система команд Hayes, развивал скорость до 300 Бод
Модемы, для которых была разработана первая версия набора команд Hayes, не отличались богатыми возможностями. Кроме настроечных команд, имелись команды, которые позволяли набирать телефонные номера, устанавливать соединение, а затем вешать трубку.
За прошедшие с тех пор тридцать пять лет многое поменялось. Расширенный набор команд, который используется сегодня, фактически можно рассматривать как своеобразный программный интерфейс (API), при помощи которого можно управлять мобильным телефоном.
Каким образом это сделать? Сначала необходимо подключить GSM-устройство к компьютеру. Для автоматического обмена СМС удобнее взять не смартфон, а сотовый модем: он не нуждается во взломе, дешевле стоит и не требует проводов. Подойдет обычный 3G-модем, купленный в ближайшем салоне связи за тысячу рублей.
Перед использованием модема или смартфона на компьютер должны быть установлены необходимые драйверы. А вот софт для выхода в интернет, который часто прилагается к модемам, для нашей задачи не только не потребуется, но даже вреден. Если он захватит доступ к устройству, мы не сможем до него достучаться. Вместо этого нам потребуется UNIX-совместимая ОС и минимальное умение работы с командной строкой.
Первым делом наш путь лежит в каталог /dev/. Где-то в его недрах прячется файл подключенного устройства. Говорящее имя поможет идентифицировать его если не напрямую, то методом исключения. 4G-модем «Мегафон M100-4», использованный автором для опытов, обнаружился на пути /dev/tty.HUAWEIMobile-Pcui. Попробуем связаться с ним при помощи утилиты screen.
Теперь можно узнать, что же мы нашли. Для получения информации об устройстве служит команда ATI. Ответ следует немедленно:
Большинство устройств принимают команды в одном из двух режимов. По умолчанию, как правило, включен режим PDU (Protocol Data Unit), который требует указывать аргументы в цифровой форме. Чтобы не разучивать еще один шифр, лучше перейти в текстовый режим. Для этого служит команда AT+CMGF=1 (нулевое значение вернет устройство в режим PDU).
Поддерживает ли наше устройство этот способ? Это можно проверить при помощи команды AT+CSCS=?
Ответ модема содержит список поддерживаемых режимов кодирования. Режим GSM здесь соответствует чистому семибитному ASCII. IRA нам тоже не поможет — это так называемый International Reference Alphabet, малоизвестная международная разновидность ASCII. А вот UCS2, один из ранних вариантов UTF-16, — это именно то, что нужно. Стоит заметить, что иногда подходящий вариант, подразумевающий замену символов Unicode шестнадцатеричными цифрами, называется HEX, — все зависит от модели и производителя.
Теперь следует активировать нужный режим:
В некоторых случаях для работы с кириллицей может понадобиться настройка DCS — схемы кодирования данных. Для этого служит команда AT+CSMP. Значение четвертого аргумента должно быть равно восьми:
Теперь можно отправлять:
Gammu и Gammu SMS Daemon
До сих пор мы общались с модемом в интерактивном режиме при помощи терминала. На практике это взаимодействие должно быть полностью автоматизировано. Это не проблема: открыть файл /dev/tty.HUAWEIMobile-Pcui программно ничуть не труднее, чем любой другой. Трудность может состоять в другом. Если планируется поддерживать более одной модели модема, придется разбираться в особенностях и капризах каждой.
Непосредственное управление при помощи команд Hayes — это хороший вариант, когда модем один, его модель известна, тонкости никого не волнуют, а все взаимодействие можно описать парой-тройкой строк кода. Когда запросы выше, стоит обратить внимание на одно из готовых средств для работы с телефонами и модемами.
В этом случае может подойти набор утилит командной строки Gammu — развитие известного в прошлом проекта Gnokii, избавленного от, увы, устаревшей ориентации на продукцию Nokia. Список поддерживаемых Gammu телефонов и GSM-модемов не ограничивается устройствами одного производителя. В нем, впрочем, все же имеются пробелы, поэтому вопросами совместимости лучше озаботиться заранее.
Gammu позволяет извлекать списки принятых и инициированных звонков, открывать телефонные соединения и управлять ими, просматривать телефонные книги, изучать информацию о телефоне и сотовой сети и многое другое, вплоть до работы со встроенным FM-приемником. Разумеется, прием и отправка СМС и MMС тоже входит в список умений этой программы.
Для установки Gammu под OS X следует воспользоваться командой brew install gammu (требуется пакетный менеджер brew). Под Linux поможет apt-get install gammu gammu-smsd или ее эквивалент для другого пакетного менеджера. Пользователям Windows придется отыскать и скачать инсталлятор на сайте проекта.
Работа с Gammu начинается с настройки. Проще всего это сделать при помощи утилиты, которая запускается командой gammu-config. Она поинтересуется «портом» (в нашем случае сюда попадает уже знакомый путь /dev/tty.HUAWEIMobile-Pcui), типом и скоростью соединения, моделью (если ничего подходящего нет, стоит выбрать at — в этот тип входит любое устройство, поддерживающее набор команд Hayes) и запросит несколько менее интересных деталей. Введенная информация будет сохранена в настроечном файле
/.gammurc, который при необходимости можно отредактировать в любом текстовом редакторе.
Настройка Gammu
Здесь тоже возможны проблемы с кодировками, но их решение проще и прямолинейнее. Чтобы русский язык не вызывал у Gammu паники, в системе должна быть верно настроена локаль и язык. Для этого в OS X и Linux стоит добавить в инициализационный файл (например,
/.bash_profile) следующие строки:
Нередко вместо выполнения команды Gammu жалуется на проблемы. Ошибка «Error opening device. Unknown, busy or no permissions» может свидетельствовать о том, что соединение с модемом захватила какая-то другая программа. Возможен и другой вариант: GSM-модемы, как оказалось, не отличаются крепкими нервами и под градом команд склонны виснуть. Чтобы привести их в чувство, устройство приходится вытаскивать из порта USB и затем втыкать снова.
Интернет-шлюзы СМС
Задача состояла в том, чтобы отправлять с сайта смс при определенных событиях. Под рукой оказался usb модем 3G от мегафона. В конечном итоге переделал модуль под Drupal 7 для отправки смс и при помощи Rules отправлял смски. Хочу заметить, что мои сайты работают на OpenServer и на ОС Windows 10 64bit. C небольшими исправлениями работает и на Linux.
Ниже основа кода на php.
<?phpinclude "ucs2cp1251.class.php"; // скачиваем тут
function sms_send($phone, $mess)
$num = preg_replace("/[^+0-9]/s", "", strip_tags(trim($phone)));
$text = preg_replace('/\s+/', ' ', strip_tags(trim($mess)));
$textsms = utf8_to_win($text);
$lengthsms = ATSMS($num, $textsms);
$encodesms = sendSMS($smsc_numb, $num, $textsms);
ser_open("COM6", 115200, 8, "None", 1, "None");
if (ser_isopen() == true )
// подключаемся и пишем события в базу
$linkk = mysqli_connect("localhost", "root", "******", "sms_server_sender");
//or die("Error connect " . mysqli_error($link));
// выполняем операции с базой данных
mysqli_query($linkk, "INSERT INTO `sms_core` (`site`, `user`, `ip`, `phone`, `message`) VALUES ('$host', '$user_nik', '$user_ip', '$num', '$text')");
А именно: решил я замутить систему оповещения себя любимого обо всех неприятностях, произошедших в конторе в мое отсутствие. Звеном для построения этой системы стала программка, которую я решил выложить здесь: на случай, что может кому-нибудь пригодится.
Настройка программы
Настройка программы очень проста.
1. Подключаем к компьютеру GSM-модем или сотовый телефон, ждем, пока установятся драйверы, если они небыли установлены.
2. Запускаем программу SMSSender, нажимаем кнопку с троеточием возле поля «Модем»
3. В открывшемся окне выбираем нужный нам модем (на случай, если их будет несколько)
4. Далее, заходим на закладку «Настройки» и нажимаем кнопку «Тест модема». Если все нормально, то появится окно «Тест прошел успешно», с текстом ответа модема. В некоторых случаях придется порулить настройками порта, но обычно это лишнее.
После настройки программы и нажатия кнопки «Сохранить и закрыть», окно программы закроется, а настройки будут сохранены. Теперь можно приступать к использованию. Внимание! Закрытие окна программы кнопкой-крестиком не сохраняет настройки!
Использование программы
Второй режим работы программы – с параметрами командной строки. В данном режиме тоже нет ничего сложного: указываем программе параметры и наслаждаемся. Окно программы при этом не появляется, она сама закрывается после окончания работы.
Допустимые параметры командной строки:
Вместо символа «–» можно использовать символ «/»
Вот несколько примеров:
В общем, все просто.
В общем, программа проста как 3 копейки. Может, кому пригодится.
Функционал, при желании, можно расширить, если кому-то понадобится – пишите в комментариях.
Обновлено 19.08.2011
Выложил вторую версию программы. Главное новшество: программа теперь может отправлять длинные SMS (больше 160 символов латынью или 70 символов кириллицей). Кроме того, добавлена возможность вместо имени модема указать непосредственно com-порт, на котором висит модем. На тот случай, если у кого-то программа сама найти модем не сможет.
Читайте также: