Для организации автоматизации приема и отправки 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:
Обсуждается: http://www.opennet.me/tips/info/2510.shtml
интересно, может куда-нибудь пригодиться
В гит репах появилась возможность работы с sqlite3
Еще бы описали как счет проверить(этой же прогой), вообще была бы сказка :)
http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=gnoki...
Спасибо за статью, на её основе сделал сегодня для своей фирмы ,вэб сервис, для автоматической отправки
SMS клиентам.
Премию дали?
Живу и работаю в Израиле - делай вывод.
> Живу и работаю в Израиле - делай вывод.Что, с тебя вычли за использование телефона? :)
Да нет, просто тяжело отрываться от родного провайдера - которого безмолвно годами кормят и
увидеть собственную выгоду. А уж премию дать - это таки как-то не по еврейски.
Мы таки не жадные - мы просто экономные. Да и зачем платить , если лох инициативу проявил!
Спасибо. Попробовал - хорошо работает отправка сообщений, чтение/запись контакт-листа, работа с голосовыми вызовами.
Но вот беда - никак не смог прочитать принятые сообщения. Пробовал на 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!!)ЧЯДНТ?
Наверное, нокии сразу складывают СМС в память телефона. Попробуй, все-таки, заменить SM на ME или MT.
Пробовал (SM|ME|MT|IN) - результат одинаковый.
gnokii --showsmsfolderstatus должна бы показать в какой памяти сколько сообщений находится, но у меня не работает.
У smsd ключик -b не работает.
пока на похакал smsd/lowlevel.c:384
- if (phoneMonitor.supported & PM_FOLDERS)
+ if (1 || phoneMonitor.supported & PM_FOLDERS)smsd не мог получить старые sms.
а с протоколом smpp он работает ? (ну типа кеннела)или только с трубками ?
> а с протоколом 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/) вы сами уже написали.
Весьма весьма жизненная статья. Спасибо.
Приобрел комплект 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/>.
=================================
Подскажите какую-нибудь дешевую модель нокии или еще какого аппарата, который стабильно будет поддерживать отправку SMS через gnokii? Хочу на этой основе сделать удаленное управление серверами, когда оные отваливаются от сети.
Любой старый сименс(не банки) и старые сониериксоны. Идеально подходят для этого. (Легко подключить коннектор и зарядку одновременно) С ноклами придется активно полюбиться с гнездом.
а почему не smstools?
Всё установил. Но вот проблема:
# smsd -u sms -p ****** -d sms -c localhost -m mysql
Cannot stat file sms!HELP :(
Удалось победить? Аналогичная проблема, собирал из сорцев.
> Удалось победить? Аналогичная проблема, собирал из сорцев.Я победил только принудительно указав ключик -m
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.
в данном сообщении ?
Может быть кто-то сталкивался с подобной проблемой ранее, дело вот в чем:
Ubuntu 13.04 на ней установлен Gnokii раньше все работало прекрасно, но в один момент смс-ки перестали идти,
что я делал : ввел команду
Gnokii --monitorВышло примерно следующее
Развернуть/свернуть скрытый текст.
Network: Beeline, Российская Федерация (250 99)
LAC: 0000 (0), CellID: 00000000 (0)
RFLevel: -1
Battery: 96
Power Source: Battery
Phone: Used 0, Free 0
LD: Used 0, Free 0
ON: Used 0, Free 10
RC: Used 0, Free 10
SMS Messages: Unread 0, Number 8
CALL0: IDLE
CALL1: IDLE
RFLevel: 12
Battery: 96
Power Source: Battery
SIM: Used 0, Free 110
Phone: Used 0, Free 0
LD: Used 0, Free 0
MC: Used 5, Free 5
ON: Used 0, Free 1
RC: Used 0, Free 1
CALL0: IDLE
CALL1: IDLE
RFLevel: 12
Battery: 96
Power Source: Battery
DC: Used 0, Free 0
LD: Used 0, Free 0
MC: Used 5, Free 5
RC: Used 0, Free 1
CALL0: IDLE
CALL1: IDLE
Battery: 96
SIM: Used 0, Free 110
Далее ввожу команду
invoke-rc.d smsd stopЖду
Далее ввожу команду
invoke-rc.d smsd startЧерез некоторое время прилетает туча смс-сок которые должны были приходить по одной , но покакой-то причине зависли,
Причём некоторые смс абсолютно неадекватные "набор знаков\букв"
Идут смс-ки примерно минут 5-10, далее опять все зависает и пока не остановишь и не стартанешь заного все висит, хотя мониторинг идет,
Пробовал такую команду
echo "Проверка gnokii" | gnokii --sendsms '+79195856661'Выдает следующее
root@server:~# echo "Проверка gnokii" | gnokii --sendsms '+79195856661'
GNOKII Version 0.6.31
Cannot read the SMSC number from your phone. If the sms send will fail, please use --smsc option explicitely giving the number.
SMS Send failed (Command timed out.)смс-ка приходит на телефон, в чем тут дело не понимаю, может кто знает подскажите ?
Через какое-то время когда снова все зависло ввожу
root@server:~# echo "Проверка gnokii" | gnokii --sendsms '+79195856661'В ответ:
GNOKII Version 0.6.31
SMS Send failed (Unknown error - well better than nothing!!)СМС-ка на телефон не пришла.
Есть мысль что что-то с памятью SM но как это проверить\возможно очистить я не знаю ?
После зависания мониторинг пишет следующее:
Развернуть/свернуть скрытый текст.
root@server:~# gnokii --monitor
GNOKII Version 0.6.31
Entering monitor mode...
Network: unknown, unknown ()
LAC: 0000 (0), CellID: 00000000 (0)
RFLevel: -1
Battery: 96
Power Source: Battery
SIM: Used 0, Free 1
EN: Used 0, Free 0
FD: Used 0, Free 6
LD: Used 0, Free 10
MC: Used 5, Free 5
ON: Used 0, Free 1
RC: Used 0, Free 0
CALL0: IDLE
CALL1: IDLE
RFLevel: -1
Battery: 96
Power Source: Battery
SIM: Used 0, Free 10
DC: Used 0, Free 0
EN: Used 0, Free 10
FD: Used 0, Free 6
LD: Used 0, Free 10
MC: Used 5, Free 5
ON: Used 0, Free 1
RC: Used 0, Free 10
CALL0: IDLE
CALL1: IDLE
RFLevel: -1
Battery: 96
Power Source: Battery
Phone: Used 0, Free 0
DC: Used 0, Free 10
^Z
[4]+ Stopped gnokii --monitor
root@server:~#