Прием и отправка SMS в Linux: различия между версиями

Материал из Ай да Linux Wiki
Перейти к навигации Перейти к поиску
м
 
(не показана 1 промежуточная версия этого же участника)
Строка 8: Строка 8:
 
Устанавливаем gnokii, для Debian/Ubuntu:
 
Устанавливаем gnokii, для Debian/Ubuntu:
  
  sudo apt-get install gnokii-cli gnokii-smsd xgnokii
+
<source lang="bash">sudo apt-get install gnokii-cli gnokii-smsd xgnokii</source>
  
 
где gnokii-cli - интерфейс командной строки, gnokii-smsd демон для работы с
 
где gnokii-cli - интерфейс командной строки, gnokii-smsd демон для работы с
Строка 16: Строка 16:
 
устройству осуществилась привязка (например, /dev/ttyACM0)
 
устройству осуществилась привязка (например, /dev/ttyACM0)
  
Создаем файл конфигурации /home/mc/.gnokiirc
+
Создаем файл конфигурации {{Path|/home/mc/.gnokiirc}}
 
 
  [global]
 
  model = AT
 
  connection = serial
 
  port = /dev/ttyACM0
 
  
 +
{{File|/home/mc/.gnokiirc|<pre>
 +
[global]
 +
model = AT
 +
connection = serial
 +
port = /dev/ttyACM0</pre>
 +
}}
 
где model - тип устройства: AT - для большинства телефонов, series40 - для
 
где model - тип устройства: AT - для большинства телефонов, series40 - для
 
телефонов Nokia с системой series40, gnapplet для старых телефонов Nokia Series60.
 
телефонов Nokia с системой series40, gnapplet для старых телефонов Nokia Series60.
Строка 36: Строка 37:
 
Проверяем поддерживается ли телефон:
 
Проверяем поддерживается ли телефон:
  
  gnokii --identify
+
<source lang="bash">gnokii --identify</source>
  
 
   GNOKII Version 0.6.28
 
   GNOKII Version 0.6.28
Строка 47: Строка 48:
 
Для мониторинга активности:
 
Для мониторинга активности:
  
  gnokii --monitor
+
<source lang="bash">gnokii --monitor</source>
  
 
Возможности gnokii позволяют достаточно полно контролировать телефон, но нас
 
Возможности gnokii позволяют достаточно полно контролировать телефон, но нас
Строка 54: Строка 55:
 
Чтение SMS:
 
Чтение SMS:
  
  gnokii --getsms тип_памяти старт стоп
+
<source lang="bash">gnokii --getsms тип_памяти старт стоп</source>
  
 
где тип_памяти: SM - для SIM-карты, ME - для внутренней памяти и MT для
 
где тип_памяти: SM - для SIM-карты, ME - для внутренней памяти и MT для
Строка 65: Строка 66:
 
Пример для вывода всех сохраненных SMS:
 
Пример для вывода всех сохраненных SMS:
  
  gnokii --getsms MT 1 end
+
<source lang="bash">gnokii --getsms MT 1 end</source>
  
 
Для отправки SMS можно использовать команду:
 
Для отправки SMS можно использовать команду:
  
  echo "текст" | gnokii --sendsms номер
+
<source lang="bash">echo "текст" | gnokii --sendsms номер</source>
  
 
Например:
 
Например:
  
  echo "тест" | gnokii --sendsms '+79094126426'
+
<source lang="bash">echo "тест" | gnokii --sendsms '+79094126426'</source>
  
 
   Send succeeded with reference 131!
 
   Send succeeded with reference 131!
Строка 81: Строка 82:
 
написания скриптов, но и отправлять через неё сообщения:
 
написания скриптов, но и отправлять через неё сообщения:
  
  xpl-sender -m xpl-cmnd -c sendmsg.basic to=+7909344355 body="test"
+
<source lang="bash">xpl-sender -m xpl-cmnd -c sendmsg.basic to=+7909344355 body="test"</source>
  
 
Вывод содержимого адресной книги:
 
Вывод содержимого адресной книги:
  
  gnokii --getphonebook MT 1 end
+
<source lang="bash">gnokii --getphonebook MT 1 end</source>
  
 
Адресную книгу можно сохранить, а затем восстановить:
 
Адресную книгу можно сохранить, а затем восстановить:
  
  gnokii --getphonebook MT 1 end --vcard > phonebook.txt
+
<source lang="bash">gnokii --getphonebook MT 1 end --vcard > phonebook.txt
  gnokii --writephonebook --vcard < phonebook.txt
+
gnokii --writephonebook --vcard < phonebook.txt</source>
  
Настройка SMS-шлюза
+
'''Настройка SMS-шлюза'''
  
 
В состав gnokii входит демон SMSD, который позволяет организовать работу
 
В состав gnokii входит демон SMSD, который позволяет организовать работу
Строка 102: Строка 103:
 
Ставим недостающие пакеты:
 
Ставим недостающие пакеты:
  
  sudo apt-get install gnokii-smsd-mysql mysql-server
+
<source lang="bash">sudo apt-get install gnokii-smsd-mysql mysql-server</source>
  
 
Создаем БД
 
Создаем БД
  
  mysql -u smsgw
+
<source lang="bash">mysql -u smsgw
  > create database smsgw;
+
>create database smsgw;</source>
  
 
Создаем структуру БД, используя поставляемый в комплекте с gnokii-smsd-mysql пример:
 
Создаем структуру БД, используя поставляемый в комплекте с gnokii-smsd-mysql пример:
  
  mysql -u smsgw smsgw < /usr/share/doc/gnokii-smsd-mysql/sms.tables.mysql.sql
+
<source lang="bash">mysql -u smsgw smsgw < /usr/share/doc/gnokii-smsd-mysql/sms.tables.mysql.sql</source>
  
 
в результате будут созданы три простые таблицы inbox, outbox и multipartinbox,
 
в результате будут созданы три простые таблицы inbox, outbox и multipartinbox,
 
структура которых имеет следующий вид:
 
структура которых имеет следующий вид:
  
  CREATE TABLE inbox (
+
<source lang="mysql">  CREATE TABLE inbox (
 
     id int(10) unsigned NOT NULL auto_increment,
 
     id int(10) unsigned NOT NULL auto_increment,
 
     number varchar(20) NOT NULL default '',
 
     number varchar(20) NOT NULL default '',
Строка 152: Строка 153:
 
     curnum int(8) default NULL,
 
     curnum int(8) default NULL,
 
     PRIMARY KEY  (id)
 
     PRIMARY KEY  (id)
   );
+
   );</source>
 
    
 
    
 
Запускаем smsd:
 
Запускаем smsd:
  
  /usr/sbin/smsd -u smsgw -d smsgw -c localhost -m mysql -f /var/log/smsdaemon.log
+
<source lang="bash">smsd -u smsgw -d smsgw -c localhost -m mysql -f /var/log/smsdaemon.log</source>
  
 
где "-u" - имя пользователя БД, "-d" - имя базы, "-с" - хост, а "-m" - модуль хранения.
 
где "-u" - имя пользователя БД, "-d" - имя базы, "-с" - хост, а "-m" - модуль хранения.
Строка 176: Строка 177:
 
файловое хранилище. Пример запуска:
 
файловое хранилище. Пример запуска:
  
  /usr/sbin/smsd -m file -c spool-директория
+
<source lang="bash">smsd -m file -c spool-директория</source>
  
 
Для отправки SMS в spool-директории нужно создать файл с любым именем в формате:
 
Для отправки SMS в spool-директории нужно создать файл с любым именем в формате:
Строка 191: Строка 192:
 
Дополнение: Вместо gnokii можно использовать интенсивно развивающийся форк [http://wammu.eu/ gammu], содержащий поддержку некоторых дополнительных телефонов.
 
Дополнение: Вместо gnokii можно использовать интенсивно развивающийся форк [http://wammu.eu/ gammu], содержащий поддержку некоторых дополнительных телефонов.
  
 
+
== См. также ==
----
+
[http://www.opennet.ru/tips/2510_gnokii_sms_gateway_phone.shtml opennet.ru]
Информация взята с [http://www.opennet.ru/tips/2510_gnokii_sms_gateway_phone.shtml opennet.ru]
 
  
 
[[Категория:Руководства]]
 
[[Категория:Руководства]]
[[Категория:Не наши статьи]]
 

Текущая версия на 18:50, 15 апреля 2011

Прием и отправка 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

Файл: /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:

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 может работать без СУБД, используя файловое хранилище. Пример запуска:

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

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

  номер
  текст

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

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

Дополнение: Вместо gnokii можно использовать интенсивно развивающийся форк gammu, содержащий поддержку некоторых дополнительных телефонов.

См. также

opennet.ru