Прием и отправка SMS в Linux: различия между версиями
Angelo (обсуждение | вклад) м  | 
				Langator (обсуждение | вклад)  м  | 
				||
| Строка 8: | Строка 8: | ||
Устанавливаем gnokii, для Debian/Ubuntu:  | Устанавливаем gnokii, для Debian/Ubuntu:  | ||
| − | + | <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}}  | 
| − | |||
| − | |||
| − | |||
| − | |||
| − | |||
| + | {{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: | ||
Проверяем поддерживается ли телефон:  | Проверяем поддерживается ли телефон:  | ||
| − | + | <source lang="bash">gnokii --identify</source>  | |
    GNOKII Version 0.6.28  |     GNOKII Version 0.6.28  | ||
| Строка 47: | Строка 48: | ||
Для мониторинга активности:  | Для мониторинга активности:  | ||
| − | + | <source lang="bash">gnokii --monitor</source>  | |
Возможности gnokii позволяют достаточно полно контролировать телефон, но нас  | Возможности gnokii позволяют достаточно полно контролировать телефон, но нас  | ||
| Строка 54: | Строка 55: | ||
Чтение SMS:  | Чтение SMS:  | ||
| − | + | <source lang="bash">gnokii --getsms тип_памяти старт стоп</source>  | |
где тип_памяти: SM - для SIM-карты, ME - для внутренней памяти и MT для  | где тип_памяти: SM - для SIM-карты, ME - для внутренней памяти и MT для  | ||
| Строка 65: | Строка 66: | ||
Пример для вывода всех сохраненных SMS:  | Пример для вывода всех сохраненных SMS:  | ||
| − | + | <source lang="bash">gnokii --getsms MT 1 end</source>  | |
Для отправки SMS можно использовать команду:  | Для отправки SMS можно использовать команду:  | ||
| − | + | <source lang="bash">echo "текст" | gnokii --sendsms номер</source>  | |
Например:  | Например:  | ||
| − | + | <source lang="bash">echo "тест" | gnokii --sendsms '+79094126426'</source>  | |
    Send succeeded with reference 131!  |     Send succeeded with reference 131!  | ||
| Строка 81: | Строка 82: | ||
написания скриптов, но и отправлять через неё сообщения:  | написания скриптов, но и отправлять через неё сообщения:  | ||
| − | + | <source lang="bash">xpl-sender -m xpl-cmnd -c sendmsg.basic to=+7909344355 body="test"</source>  | |
Вывод содержимого адресной книги:  | Вывод содержимого адресной книги:  | ||
| − | + | <source lang="bash">gnokii --getphonebook MT 1 end</source>  | |
Адресную книгу можно сохранить, а затем восстановить:  | Адресную книгу можно сохранить, а затем восстановить:  | ||
| − | + | <source lang="bash">gnokii --getphonebook MT 1 end --vcard > phonebook.txt  | |
| − | + | gnokii --writephonebook --vcard < phonebook.txt</source>  | |
| − | Настройка SMS-шлюза  | + | '''Настройка SMS-шлюза'''  | 
В состав gnokii входит демон SMSD, который позволяет организовать работу  | В состав gnokii входит демон SMSD, который позволяет организовать работу  | ||
| Строка 102: | Строка 103: | ||
Ставим недостающие пакеты:  | Ставим недостающие пакеты:  | ||
| − | + | <source lang="bash">sudo apt-get install gnokii-smsd-mysql mysql-server</source>  | |
Создаем БД  | Создаем БД  | ||
| − | + | <source lang="bash">mysql -u smsgw  | |
| − | + | >create database smsgw;</source>  | |
Создаем структуру БД, используя поставляемый в комплекте с gnokii-smsd-mysql пример:  | Создаем структуру БД, используя поставляемый в комплекте с gnokii-smsd-mysql пример:  | ||
| − | + | <source lang="bash">mysql -u smsgw smsgw < /usr/share/doc/gnokii-smsd-mysql/sms.tables.mysql.sql</source>  | |
в результате будут созданы три простые таблицы inbox, outbox и multipartinbox,  | в результате будут созданы три простые таблицы inbox, outbox и multipartinbox,  | ||
структура которых имеет следующий вид:  | структура которых имеет следующий вид:  | ||
| − | + | <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:  | ||
| − | + | <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: | ||
файловое хранилище. Пример запуска:  | файловое хранилище. Пример запуска:  | ||
| − | + | <source lang="bash">smsd -m file -c spool-директория</source>  | |
Для отправки SMS в spool-директории нужно создать файл с любым именем в формате:  | Для отправки SMS в spool-директории нужно создать файл с любым именем в формате:  | ||
| Строка 192: | Строка 193: | ||
| − | + | == См. также ==  | |
| − | + | [http://www.opennet.ru/tips/2510_gnokii_sms_gateway_phone.shtml opennet.ru]  | |
[[Категория:Руководства]]  | [[Категория:Руководства]]  | ||
[[Категория:Не наши статьи]]  | [[Категория:Не наши статьи]]  | ||
Версия 17:37, 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
[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, содержащий поддержку некоторых дополнительных телефонов.