Для организации автоматизации приема и отправки SMS в Linux можно использовать пакет gnokii и подключенный к системе телефон. В простейшем случае можно использовать возможность консольной утилиты gnokii из пакета gnokii-cli, но при необходимости более сложной автоматизации имеет смысл воспользоваться Perl-модулем GSM::SMS или GSMD::Gnokii.
, где 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, которую можно использовать не только как пример для написания скриптов, но и отправлять через неё сообщения:
В состав gnokii входит демон SMSD, который позволяет организовать работу полноценного SMS-шлюза, на лету обрабатывающего входящие SMS. Для хранения отправляемых и получаемых сообщений SMSD может использовать СУБД MySQL, PostgreSQL (плагины gnokii-smsd-mysql и gnokii-smsd-pgsql) или файловое хранилище (--module file).
где "-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. Иначе входящие сообщения будут выводиться в стандартный выходной поток в формате "действие номер дата < текст".
Дополнение: Вместо gnokii можно использовать интенсивно развивающийся форк [[http://wammu.eu/ gammu]], содержащий поддержку некоторых дополнительных телефонов.