The OpenNET Project / Index page

[ новости/++ | форум | wiki | теги | ]

Прием и отправка SMS в Linux
Для организации автоматизации приема и отправки SMS в Linux можно использовать пакет
gnokii и подключенный к системе телефон. В
простейшем случае можно использовать возможность консольной утилиты gnokii из
пакета gnokii-cli, но при необходимости более сложной автоматизации имеет смысл
воспользоваться Perl-модулем GSM::SMS или GSMD::Gnokii.

Устанавливаем gnokii, для Debian/Ubuntu:

   sudo apt-get install gnokii-cli gnokii-smsd xgnokii

, где gnokii-cli - интерфейс командной строки, gnokii-smsd демон для работы с
SMS, а xgnokii - GUI интерфейс. Последние два ставим на свое усмотрение.

Подключаем телефон через USB-порт. Смотрим в /var/log/messages к какому
устройству осуществилась привязка (например, /dev/ttyACM0)

Создаем файл конфигурации /home/mc/.gnokiirc

   [global]
   model = AT
   connection = serial
   port = /dev/ttyACM0

где, model - тип устройства: AT - для большинства телефонов, series40 - для
телефонов Nokia с системой series40, gnapplet для старых телефонов Nokia Series60.

connection - тип соединения serial - USB/RS-232, irda - инфракрасный порт, bluetooth - Bluetooth.

port - порт, для USB - /dev/ttyACM0 или /dev/ttyUSB0, для Bluetooth указываем
адрес устройства ("aa:bb:cc:dd:ee:ff").

Для USB-устройств также можно попробовать сочетание connection=dku2libusb и
port = N, где N - номер устройства.

Проверяем поддерживается ли телефон:

   gnokii --identify

   GNOKII Version 0.6.28
   IMEI         : IMEI56565656565656
   Manufacturer : Motorola CE, Copyright 2000
   Model        : GSM900","GSM1800","GSM1900","MO
   Product name : GSM900","GSM1800","GSM1900","MO
   Revision     : R368_G_0B.A0.0FR

Для мониторинга активности:

   gnokii --monitor

Возможности gnokii позволяют достаточно полно контролировать телефон, но нас
интересует работа с SMS.

Чтение SMS:

   gnokii --getsms тип_памяти старт стоп

где тип_памяти: SM - для SIM-карты, ME - для внутренней памяти и MT для
комбинированных хранилищ, IN - inbox, OU - outbox. Посмотреть какое хранилище
используется на телефоне можно командой "gnokii --showsmsfolderstatus"
старт - начальная позиция сообщения
cтоп - конечная позиция сообщения, если не указать будет прочитано одно
сообщение, если указать "end" будут выведены все сообщения до конечной позиции

Пример для вывода всех сохраненных SMS:

   gnokii --getsms MT 1 end


Для отправки SMS можно использовать команду:

   echo "текст" | gnokii --sendsms номер

Например:

   echo "тест" | gnokii --sendsms '+79094126426'

   Send succeeded with reference 131!

Другой способ отправки: в комплекте с Perl-модулем SMS::Send поставляется
утилита xpl-sender, которую можно использовать не только как пример для
написания скриптов, но и отправлять через неё сообщения:

   xpl-sender -m xpl-cmnd -c sendmsg.basic to=+7909344355 body="test"



Вывод содержимого адресной книги:

   gnokii --getphonebook MT 1 end

Адресную книгу можно сохранить, а затем восстановить:

   gnokii --getphonebook MT 1 end --vcard > phonebook.txt
   gnokii --writephonebook --vcard < phonebook.txt


Настройка SMS-шлюза

В состав gnokii входит демон SMSD, который позволяет организовать работу
полноценного SMS-шлюза, на лету обрабатывающего входящие SMS. Для хранения
отправляемых и получаемых сообщений SMSD может использовать СУБД MySQL,
PostgreSQL (плагины gnokii-smsd-mysql и gnokii-smsd-pgsql) или файловое
хранилище (--module file).

Ставим недостающие пакеты:

   sudo apt-get install gnokii-smsd-mysql mysql-server

Создаем БД

  mysql -u smsgw
  > create database smsgw;

Создаем структуру БД, используя поставляемый в комплекте с gnokii-smsd-mysql пример:

  mysql -u smsgw smsgw < /usr/share/doc/gnokii-smsd-mysql/sms.tables.mysql.sql

в результате будут созданы три простые таблицы inbox, outbox и multipartinbox,
структура которых имеет следующий вид:

   CREATE TABLE inbox (
     id int(10) unsigned NOT NULL auto_increment,
     number varchar(20) NOT NULL default '',
     smsdate datetime NOT NULL default '0000-00-00 00:00:00',
     insertdate timestamp DEFAULT CURRENT_TIMESTAMP,
     text text,
     phone tinyint(4),
     processed tinyint(4) NOT NULL default '0',
     PRIMARY KEY  (id)
   );
   CREATE TABLE outbox (
     id int(10) unsigned NOT NULL auto_increment,
     number varchar(20) NOT NULL default '',
     processed_date timestamp DEFAULT 0,
     insertdate timestamp DEFAULT CURRENT_TIMESTAMP,
     text varchar(160) default NULL,
     phone tinyint(4),
     processed tinyint(4) NOT NULL default '0',
     error tinyint(4) NOT NULL default '-1',
     dreport tinyint(4) NOT NULL default '0',
     not_before time NOT NULL default '00:00:00',
     not_after time  NOT NULL default '23:59:59',
     PRIMARY KEY  (id)
   );
   CREATE TABLE multipartinbox (
     id int(10) unsigned NOT NULL auto_increment,
     number varchar(20) NOT NULL default '',
     smsdate datetime NOT NULL default '0000-00-00 00:00:00',
     insertdate timestamp DEFAULT CURRENT_TIMESTAMP,
     text text,
     phone tinyint(4),
     processed tinyint(4) NOT NULL default '0',
     refnum int(8) default NULL,
     maxnum int(8) default NULL,
     curnum int(8) default NULL,
     PRIMARY KEY  (id)
   );
  
Запускаем smsd:

  /usr/sbin/smsd -u smsgw -d smsgw -c localhost -m mysql -f /var/log/smsdaemon.log


где "-u" - имя пользователя БД, "-d" - имя базы, "-с" - хост, а "-m" - модуль хранения.

Отправив теперь SMS на подключенный к компьютеру телефон, smsd сразу перехватит
его и запишет в базу.

выполнив "select * from inbox;"  увидим примерно такое:

  | id | number | smsdate | insertdate |text | phone | processed |
  |  1 | +7909343156224 | 2011-01-20 10:12:05 | 20110120130123 | Test | NULL | 0 |

Для отправки сообщения достаточно добавить новую запись в таблицу outbox, smsd
сразу его подхватит его и отправит. Например:

   insert into outbox (number,text) values('+7909344355', 'Тест);


В заключение можно отметить, что smsd  может работать без СУБД, используя
файловое хранилище. Пример запуска:

   /usr/sbin/smsd -m file -c spool-директория

Для отправки SMS в spool-директории нужно создать файл с любым именем в формате:
   номер
   текст

после успешной отправки файл будет удален.

Через опцию "-u" можно указать путь к скрипту, который будет выполняться при
каждом получении SMS. Иначе входящие сообщения будут выводиться в стандартный
выходной поток в формате "действие номер дата < текст".

Дополнение: Вместо gnokii можно использовать интенсивно развивающийся форк [[http://wammu.eu/
gammu]], содержащий поддержку некоторых дополнительных телефонов.
 
21.01.2011
Ключи: gnokii, sms, gateway, phone / Лицензия: CC-BY
Раздел:    Корень / Пользователю / Мобильные телефоны

Обсуждение [ Линейный режим | Показать все | RSS ]
 
  • 1.1, m0ps (ok), 23:04, 21/01/2011 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    интересно, может куда-нибудь пригодиться
     
  • 1.2, Nester (?), 11:12, 22/01/2011 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    В гит репах появилась возможность работы с sqlite3
    Еще бы описали как счет проверить(этой же прогой), вообще была бы сказка :)
     
  • 1.4, Petrov Alexandr (?), 21:56, 22/01/2011 [ответить] [показать ветку] [···]    [к модератору]
  • +/
    Спасибо за статью, на её основе сделал сегодня для своей фирмы ,вэб сервис, для автоматической отправки
    SMS клиентам.
     
     
  • 2.6, pavlinux (ok), 15:51, 23/01/2011 [^] [ответить]    [к модератору]
  • +/
    Премию дали?
     
     
  • 3.7, Petrov Alexandr (?), 18:25, 23/01/2011 [^] [ответить]    [к модератору]  
  • +/
    Живу и работаю в Израиле - делай вывод.
     
     
  • 4.9, pavlinux (ok), 22:10, 23/01/2011 [^] [ответить]    [к модератору]  
  • +/
    > Живу и работаю в Израиле - делай вывод.

    Что, с тебя вычли за использование телефона? :)

     
     
  • 5.11, Petrov Alexandr (?), 23:18, 23/01/2011 [^] [ответить]    [к модератору]  
  • +/
    Да нет, просто тяжело отрываться от родного провайдера - которого безмолвно годами кормят и
    увидеть собственную выгоду. А уж премию дать - это таки как-то не по еврейски.
    Мы таки не жадные - мы просто экономные. Да и зачем платить , если лох инициативу проявил!


     
  • 1.5, Amigos (?), 05:30, 23/01/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Спасибо. Попробовал - хорошо работает отправка сообщений, чтение/запись контакт-листа, работа с голосовыми вызовами.
    Но вот беда - никак не смог прочитать принятые сообщения. Пробовал на Nokia 5500, 5310, 5800 (этих моделей нет в http://wiki.gnokii.org/index.php/Config). На всех одинаково:
    user@user-desktop:~$ gnokii --showsmsfolderstatus
    GNOKII Version 0.6.29
    No. Name                                         Id #Msg
    ========================================================

    user@user-desktop:~$ gnokii --getsms SM 1 end
    GNOKII Version 0.6.29
    Getting SMS failed (location 1 from SM memory)! (Unknown error - well better than nothing!!)

    ЧЯДНТ?

     
     
  • 2.8, zxalexis (?), 19:19, 23/01/2011 [^] [ответить]    [к модератору]  
  • +/
    Наверное, нокии сразу складывают СМС в память телефона. Попробуй, все-таки, заменить SM на ME или MT.
     
     
  • 3.13, Amigos (?), 07:47, 24/01/2011 [^] [ответить]    [к модератору]  
  • +/
    Пробовал (SM|ME|MT|IN) - результат одинаковый.
    gnokii --showsmsfolderstatus должна бы показать в какой памяти сколько сообщений находится, но у меня не работает.
     
  • 1.10, Аноним (-), 23:18, 23/01/2011 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    У smsd ключик -b не работает пока на похакал smsd lowlevel c 384 - if phone... весь текст скрыт [показать]
     
  • 1.12, Sw00p aka Jerom (?), 02:02, 24/01/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    а с протоколом smpp он работает ? (ну типа кеннела)

    или только с трубками ?

     
     
  • 2.14, uldus (ok), 11:56, 24/01/2011 [^] [ответить]    [к модератору]  
  • +/
    > а с протоколом smpp он работает ? (ну типа кеннела)

    Для SMPP удобно использовать Perl-модуль Net::SMPP (http://search.cpan.org/dist/Net-SMPP/), там в комплекте есть полезная утилита smsc.pl.

    Еще есть Python-модуль pySMPP (http://pysmpp.sourceforge.net/) и Си-шная библиотека C-SMPP (http://c-smpp.movilgate.com/), но про них ничего сказать не могу - не пользовался, да и не обновляются эти проекты уже очень давно. Про Kannel (http://www.kannel.org/) вы сами уже написали.

     
  • 1.15, Zl0 (ok), 12:58, 24/01/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Весьма весьма жизненная статья. Спасибо.
     
  • 1.16, Владислав (??), 18:42, 25/01/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Приобрел комплект megafonа - Интернет старт с USB модемом huawei E1550 + ТП для отправки SMS. Поставил gammu-1.28.0. Прикрутил скрипт для контроля баланса.
    все пашет и радует. А телефон к линуксу который с блоком питания - это не совсем надежно. а с зарядкой от USB телефон будет стоить гораздо дороже модема E1550.
    С UTF-8 проблем нет.
    Из файла README
    ================
    Gammu All Mobile Management Utilities
    =====================================

    Gammu is library and command line utility for mobile phones. It is
    released under GNU GPL version 2.

    It has been initiated by Marcin Wiacek and other people. Originally the
    code was based on Gnokii <http://www.gnokii.org> and later MyGnokii
    <http://www.mwiacek.com> projects. Gammu  was former (up to version
    0.58) called MyGnokii2.

    Currently the project is lead by Michal Cihar <michal@cihar.com> with
    help of many contributors.


    More information
    ================

    On <http://www.gammu.org/> there is wiki and bug tracker, current Gammu
    maintainer keeps information available on <http://wammu.eu/gammu/>.
    =================================

     
  • 1.17, Анон (?), 06:55, 28/01/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Подскажите какую-нибудь дешевую модель нокии или еще какого аппарата, который стабильно будет поддерживать отправку SMS через gnokii? Хочу на этой основе сделать удаленное управление серверами, когда оные отваливаются от сети.
     
     
  • 2.18, Анон (?), 16:22, 28/01/2011 [^] [ответить]    [к модератору]  
  • +/
    Любой старый сименс(не банки) и старые сониериксоны. Идеально подходят для этого. (Легко подключить коннектор и зарядку одновременно) С ноклами придется активно полюбиться с гнездом.
     
  • 1.19, edo (ok), 22:44, 28/01/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    а почему не smstools?
     
  • 1.20, tim (??), 22:14, 02/12/2011 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    Всё установил. Но вот проблема:
    # smsd -u sms -p ****** -d sms -c localhost -m mysql
    Cannot stat file sms!

    HELP :(

     
     
  • 2.22, unit4 (?), 08:57, 15/03/2013 [^] [ответить]    [к модератору]  
  • +/
    Удалось победить? Аналогичная проблема, собирал из сорцев.
     
     
  • 3.23, unit4 (?), 12:23, 15/03/2013 [^] [ответить]    [к модератору]  
  • +/
    > Удалось победить? Аналогичная проблема, собирал из сорцев.

    Я победил только принудительно указав ключик -m

     
  • 1.21, Евгений (??), 14:10, 04/04/2012 [ответить] [показать ветку] [···]    [к модератору]  
  • +/
    root@tehservis:~/.config/gnokii# gnokii --identify
    GNOKII Version 0.6.30
    IMEI        : 356499042512073
    Manufacturer: Cinterion
    No flags section in the config file.
    Model       : MC52iR3
    Product name: MC52iR3
    Revision    : REVISION 01.301
    root@tehservis:~/.config/gnokii#

    как избавиться от ошибки: No flags section in the config file.
    в данном сообщении ?

     
  • 1.24, Владимир666 (?), 08:44, 28/11/2013 [ответить] [показать ветку] [···]     [к модератору]  
  • +/
    Может быть кто-то сталкивался с подобной проблемой ранее, дело вот в чем Ubuntu... весь текст скрыт [показать]
     

    Ваш комментарий
    Имя:         
    E-Mail:      
    Заголовок:
    Текст:



      Закладки на сайте
      Проследить за страницей
    Created 1996-2018 by Maxim Chirkov  
    ДобавитьПоддержатьВебмастеруГИД  
    Hosting by Ihor