The OpenNET Project / Index page

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



Индекс форумов
Составление сообщения

Исходное сообщение
"Раздел полезных советов: Прием и отправка SMS в Linux"
Отправлено auto_tips, 21-Янв-11 23:04 
Для организации автоматизации приема и отправки SMS в Linux можно использовать пакет [[http://wiki.gnokii.org gnokii]] и подключенный к системе телефон. В простейшем случае можно использовать возможность консольной утилиты gnokii из пакета gnokii-cli, но при необходимости более сложной автоматизации имеет смысл воспользоваться Perl-модулем [[http://search.cpan.org/dist/GSM-SMS GSM::SMS]] или [[http://www.agouros.de/gnokii/ 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 входит демон [[http://wiki.gnokii.org/index.php/SMSD 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. Иначе входящие сообщения будут выводиться в стандартный выходной поток в формате "действие номер дата < текст".

URL:
Обсуждается: https://www.opennet.ru/tips/info/2510.shtml

 

Ваше сообщение
Имя*:
EMail:
Для отправки ответов на email укажите знак ! перед адресом, например, !user@host.ru (!! - не показывать email).
Более тонкая настройка отправки ответов производится в профиле зарегистрированного участника форума.
Заголовок*:
Сообщение*:
 
При общении не допускается: неуважительное отношение к собеседнику, хамство, унизительное обращение, ненормативная лексика, переход на личности, агрессивное поведение, обесценивание собеседника, провоцирование флейма голословными и заведомо ложными заявлениями. Не отвечайте на сообщения, явно нарушающие правила - удаляются не только сами нарушения, но и все ответы на них. Лог модерирования.



Партнёры:
PostgresPro
Inferno Solutions
Hosting by Hoster.ru
Хостинг:

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