Just another Command Line junkie blog

Notes of a command line junkie

You should be using Firefox.

Thu, 20 Nov 2008

Sending SMS from command line

Как я уже писал, иногда очень сложно писать sms на телефоне, сидя за компьютером, особенно
когда на работе голова гудит от полезной мыслительной деятельности.

Хочу во что бы то ни стало писать sms, не отрываясь от шелла, сказал я себе.
Как оказалось, уже есть готовое решение.
Но поскольку мне нигде не удалось найти нормального howto, я решил написать сам


Все, что нам понадобится - это bluez-utils и gsm-utils
Писать о том, как прицепить телефон по bluetooth к компьютеру не буду. Об это можно почитать, например, здесь.

1. Найдем нужный нам bluetooth канал (нужный нам - последовательный порт)

# sdptool browse bdaddr
(bdaddr - адрес Вашего устройства)

На моем SE k800i это выглядит так:

Service Name: Serial Port
Service RecHandle: 0x10003
Service Class ID List:
"Serial Port" (0x1101)
Protocol Descriptor List:
"L2CAP" (0x0100)
"RFCOMM" (0x0003)
Channel: 3

Опишем нужное устройство в /etc/bluetooth/rfcomm.conf.
У меня это выглядит вот так:

rfcomm4 {
bind yes;
device bdaddr;
channel 3;
comment "Serial Port";
}

Вы будете удивлены, но это все.
Пробуем:

$ gsmsendsms -d /dev/rfcomm4 +79xxxxxxxxx "Hello, World"

Осталась еще одна небольшая проблема, связанная с хаотичностью потока мыслей, нежеланием телефона сохранять
отправленные нами sms в папке "Sent messages", необходимостью иногда восстанавливать последовательность событий в обратном
порядке и нашим нежеланием забивать свою память номером текущей девушки в силу нерационального использования собственных ресурсов :-)

Как вы уже догадались, решение - bash script:

 1 #!/usr/bin/bash
 2
 3 DEVICE="/dev/rfcomm4"
 4 LOGFILE="/home/wing/.sms_history"
 5
 6 MY_GIRLFRIEND_NAME="stfoo"
 7 MY_GIRLFRIEND_NUM="+79xxxxxxxx"
 8
 9 if [ -z "$2" ]
10 then
11         echo "usage: $0 number|name text"
12         exit 1
13 else
14         if [ "$1" == "$MY_GIRLFRIEND_NAME" ]
15         then
16                 DST=$MY_GIRLFRIEND_NUM
17         else
18                 DST=$1
19         fi
20 fi
21
22 echo "Sending message to $DST.."
23 /usr/bin/gsmsendsms -d $DEVICE $DST "$2"
24
25 echo "---------------
26 TIMESTAMP: `date +%F\ %X`
27 DESTINATION: $1
28 TEXT: $2" >> $LOGFILE
29
30 exit 0

Надеюсь, это хоть немного облечит Вашу личную жизнь :-)

Posted by stfoo at Thu Nov 20 20:31:27 2008
>> MY_GIRLFRIEND_NAME="stfoo"
Ну, пиздец!

Энивэй, спасибо за наводку на skyutils.


Posted by sadmitry at Tue Nov 25 23:42:56 2008
А мне вот свою программу пришлось писать.
У меня модем Huawey E-160. Его Мегафон дает.
Заставить его работать именно как модемом под Linux - та еще пляска с бубном ;)
У  меня "компьютер" маленький - платка 2,5" и там всего 128 Мб памяти. ramdisk занимает 25 Мбайт. Плюс ядро и тп...
Это должно стоять на объекте. Снятие информации с датчиков, складирование на флешку и передача в центр обработки с помощью GPRS. Плюс слежение за некоторыми показателями и в случае выхода оных за границы - отправка SMS.
Все, что пробовал - не пошло. То одно, то другое...
Взял библиотеку ezv24 и по образу и подобию имеющейся тестовой программы написал свою.


Name:


E-mail:


URL:


Comment:


Sorry, no robots allowed. Answer the question:

[UNIX utilites] Write to another user's terminal