URL: https://www.opennet.me/cgi-bin/openforum/vsluhboard.cgi
Форум: vsluhforumID3
Нить номер: 74171
[ Назад ]

Исходное сообщение
"Раздел полезных советов: Прием и отправка 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:
Обсуждается: http://www.opennet.me/tips/info/2510.shtml


Содержание

Сообщения в этом обсуждении
"Прием и отправка SMS в Linux"
Отправлено m0ps , 21-Янв-11 23:04 
интересно, может куда-нибудь пригодиться

"Прием и отправка SMS в Linux"
Отправлено Nester , 22-Янв-11 11:12 
В гит репах появилась возможность работы с sqlite3
Еще бы описали как счет проверить(этой же прогой), вообще была бы сказка :)

"Прием и отправка SMS в Linux"
Отправлено Кэп , 22-Янв-11 13:41 
http://www.google.ru/search?sourceid=chrome&ie=UTF-8&q=gnoki...

"Прием и отправка SMS в Linux"
Отправлено Petrov Alexandr , 22-Янв-11 21:56 
Спасибо за статью, на её основе сделал сегодня для своей фирмы ,вэб сервис, для автоматической отправки
SMS клиентам.

"Прием и отправка SMS в Linux"
Отправлено pavlinux , 23-Янв-11 15:51 
Премию дали?

"Прием и отправка SMS в Linux"
Отправлено Petrov Alexandr , 23-Янв-11 18:25 
Живу и работаю в Израиле - делай вывод.

"Прием и отправка SMS в Linux"
Отправлено pavlinux , 23-Янв-11 22:10 
> Живу и работаю в Израиле - делай вывод.

Что, с тебя вычли за использование телефона? :)


"Прием и отправка SMS в Linux"
Отправлено Petrov Alexandr , 23-Янв-11 23:18 
Да нет, просто тяжело отрываться от родного провайдера - которого безмолвно годами кормят и
увидеть собственную выгоду. А уж премию дать - это таки как-то не по еврейски.
Мы таки не жадные - мы просто экономные. Да и зачем платить , если лох инициативу проявил!



"Прием и отправка SMS в Linux"
Отправлено Amigos , 23-Янв-11 05:30 
Спасибо. Попробовал - хорошо работает отправка сообщений, чтение/запись контакт-листа, работа с голосовыми вызовами.
Но вот беда - никак не смог прочитать принятые сообщения. Пробовал на 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!!)

ЧЯДНТ?


"Прием и отправка SMS в Linux"
Отправлено zxalexis , 23-Янв-11 19:19 
Наверное, нокии сразу складывают СМС в память телефона. Попробуй, все-таки, заменить SM на ME или MT.

"Прием и отправка SMS в Linux"
Отправлено Amigos , 24-Янв-11 07:47 
Пробовал (SM|ME|MT|IN) - результат одинаковый.
gnokii --showsmsfolderstatus должна бы показать в какой памяти сколько сообщений находится, но у меня не работает.

"Прием и отправка SMS в Linux"
Отправлено Аноним , 23-Янв-11 23:18 
У smsd ключик -b не работает.
пока на похакал smsd/lowlevel.c:384
-    if (phoneMonitor.supported & PM_FOLDERS)
+    if (1 || phoneMonitor.supported & PM_FOLDERS)

smsd не мог получить старые sms.


"Прием и отправка SMS в Linux"
Отправлено Sw00p aka Jerom , 24-Янв-11 02:02 
а с протоколом smpp он работает ? (ну типа кеннела)

или только с трубками ?


"Прием и отправка SMS в Linux"
Отправлено uldus , 24-Янв-11 11:56 
> а с протоколом 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/) вы сами уже написали.


"Прием и отправка SMS в Linux"
Отправлено Zl0 , 24-Янв-11 12:58 
Весьма весьма жизненная статья. Спасибо.

"Прием и отправка SMS в Linux"
Отправлено Владислав , 25-Янв-11 18:42 
Приобрел комплект 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 в Linux"
Отправлено Анон , 28-Янв-11 06:55 
Подскажите какую-нибудь дешевую модель нокии или еще какого аппарата, который стабильно будет поддерживать отправку SMS через gnokii? Хочу на этой основе сделать удаленное управление серверами, когда оные отваливаются от сети.

"Прием и отправка SMS в Linux"
Отправлено Анон , 28-Янв-11 16:22 
Любой старый сименс(не банки) и старые сониериксоны. Идеально подходят для этого. (Легко подключить коннектор и зарядку одновременно) С ноклами придется активно полюбиться с гнездом.

"Прием и отправка SMS в Linux"
Отправлено edo , 28-Янв-11 22:44 
а почему не smstools?

"Прием и отправка SMS в Linux"
Отправлено tim , 02-Дек-11 22:14 
Всё установил. Но вот проблема:
# smsd -u sms -p ****** -d sms -c localhost -m mysql
Cannot stat file sms!

HELP :(


"Прием и отправка SMS в Linux"
Отправлено unit4 , 15-Мрт-13 08:57 
Удалось победить? Аналогичная проблема, собирал из сорцев.

"Прием и отправка SMS в Linux"
Отправлено unit4 , 15-Мрт-13 12:23 
> Удалось победить? Аналогичная проблема, собирал из сорцев.

Я победил только принудительно указав ключик -m


"ошибка при иденитификации"
Отправлено Евгений , 04-Апр-12 14:10 
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.
в данном сообщении ?


"Прием и отправка SMS в Linux"
Отправлено Владимир666 , 28-Ноя-13 08:44 
Может быть кто-то сталкивался с подобной проблемой ранее, дело вот в чем:
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:~#