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, 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, 15:51, 23/01/2011 [^] [ответить] [смотреть все] [показать ветку]
  • +/
    Премию дали?
     
     
  • 3.7, Petrov Alexandr, 18:25, 23/01/2011 [^] [ответить] [смотреть все]  
  • +/
    Живу и работаю в Израиле - делай вывод.
     
     
  • 4.9, pavlinux, 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 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Наверное, нокии сразу складывают СМС в память телефона Попробуй, все-таки, заме... весь текст скрыт [показать] [показать ветку]
     
     
  • 3.13, Amigos, 07:47, 24/01/2011 [^] [ответить] [смотреть все]  
  • +/
    Пробовал SM 124 ME 124 MT 124 IN - результат одинаковый gnokii --showsmsfo... весь текст скрыт [показать]
     
  • 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, 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, 12:58, 24/01/2011 [ответить] [смотреть все]  
  • +/
    Весьма весьма жизненная статья. Спасибо.
     
  • 1.16, Владислав, 18:42, 25/01/2011 [ответить] [смотреть все]  
  • +/
    Приобрел комплект megafonа - Интернет старт с USB модемом huawei E1550 ТП для ... весь текст скрыт [показать]
     
  • 1.17, Анон, 06:55, 28/01/2011 [ответить] [смотреть все]  
  • +/
    Подскажите какую-нибудь дешевую модель нокии или еще какого аппарата, который стабильно будет поддерживать отправку SMS через gnokii? Хочу на этой основе сделать удаленное управление серверами, когда оные отваливаются от сети.
     
     
  • 2.18, Анон, 16:22, 28/01/2011 [^] [ответить] [смотреть все] [показать ветку]  
  • +/
    Любой старый сименс(не банки) и старые сониериксоны. Идеально подходят для этого. (Легко подключить коннектор и зарядку одновременно) С ноклами придется активно полюбиться с гнездом.
     
  • 1.19, edo, 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-2017 by Maxim Chirkov  
    ДобавитьРекламаВебмастеруГИД  
    Hosting by Ihor