Moje SMS brána přes USB modem

Když jdu na projektovou schůzku k zákazníkovi, používám pro připojení k internetu USB modem. Každý takový modem má svoje telefonní číslo a vlastně by měl umět všechno, co umí třeba váš telefon. Tak jsem si zkusil nainstalovat gnokii a poslat z příkazového řádku svou první sms. A protože mi to šlo pěkně od ruky, postavil jsem na svém počítači i jednoduchou SMS bránu.

obrázek

Co jsem potřeboval?

Na svém počítači mám OpenSUSE 11.3, používám obvyklý USB modem od společnosti Vodafone. Abych mohl provádět příkazy jednoduše z příkazového řádku, nainstaloval jsem si nástroj gnokii, vyvinutý společností Nokia.

zypper install gnokii
zypper install gnokii-smsd

Dál potřebuji vědět, který port můj modem používá. Strčil jsem ho proto do jednoho z USB a podíval se do logu:

dmesg | grep USB

Poslední řádek výstupu je

[893493.219115] usb 2-3: GSM modem (1-port) converter now attached to ttyUSB3

takže si zapamatuji /dev/ttyUSB3 a jdu si hrát s konfigurací. Gnokii během instalace někde vytvoří konfigurační soubor, to se může lišit podle operačního systému. Nejjednodušší způsob, jak najít konfigurák na vašem počítači, je napsat příkaz, který ověří, že je všechno správně nainstalováno a nakonfigurováno:

gnokii --identify

U mě to vypsalo:

GNOKII Version 0.6.29
Couldn't read /home/matochav/.config/gnokii/config config file.
Couldn't read /etc/xdg/gnokii/config config file.
Couldn't read /home/matochav/.gnokiirc config file.
LOG: debug mask is 0x1
Config read from file /etc/gnokiirc.
Device already locked with /var/lock/LCK..ttyUSB3.
Lock file error. Exiting.
Device is locked and cannot be unlocked.
Sorry, gnokii internal structures were not correctly initialized (op == 1

Gnokii se nejdřív pokusilo hledat konfigurační soubor všude možně, až ho nakonec našlo v /etc/gnokiirc. Jak vidíte dál, kontrola skončila chybou, protože ttyUSB3 je uzamčeno jiným procesem. No, zrovna na netu píšu tenhle článek do blogu a jsem přes modem připojený, takže ho logicky nic jiného používat nemůže. Odpojím se… a druhý pokus dopadne mnohem lépe. Nejdřív se ale pojďme podívat na ten konfigurák, když už víme, kde ho hledat.

vim /etc/gnokiirc

Nastavme následující:

#
# For the Linux USB cables you will need one of the following settings (or
# similiar)
port = /dev/ttyUSB3
#
# For other non-Nokia phones and when you want to use AT
# mode use:
model = AT

Nic víc není potřeba, když teď zkusíme znovu

gnokii --identify

dostaneme

GNOKII Version 0.6.29
Couldn't read /root/.config/gnokii/config config file.
Couldn't read /etc/xdg/gnokii/config config file.
Couldn't read /root/.gnokiirc config file.
LOG: debug mask is 0x1
Config read from file /etc/gnokiirc.
phone instance config:
model = AT
port = /dev/ttyUSB3
connection = serial
initlength = default
serial_baudrate = 19200
serial_write_usleep = -1
handshake = software
require_dcd = 0
smsc_timeout = 10
rfcomm_channel = 0
sm_retry = 0
Initializing AT capable mobile phone ...
Serial device: opening device /dev/ttyUSB3
Serial device: setting RTS to high and DTR to high
Message sent: 0x00 / 0x0004
...
Received message type 06
IMEI         : 353054034166199
Manufacturer : huawei
Model        : K3765
Product name : K3765
Revision     : 11.126.03.06.00
Serial device: closing device

A je hotovo. Pojďme komunikovat s vnějším světem!

Jak poslat sms?

Po úspěšné konfiguraci z minulého odstavce můžeme směle odeslat svou první esemesku:

echo "Ahoj svete!!!" | gnokii --sendsms +420777888999

Jak si přečíst sms příchozí?

K pravidelnému zpracovávání příchozích sms slouží démon smsd. Pojďme si ho spustit:

smsd -m file -u /home/sms/action.sh &

Po spuštění démona budou příchozí sms pravidelně zpracovávány, na každou z nich se spustí akce action.sh, což musí být nějaký spustitelný skript, který dostane na vstupu datum, příchozí sms, číslo odesilatele. V našem případě se třeba příchozí sms zalogují do souboru:

#!/bin/bash
echo "Phone number: $1"  >> /home/sms/inbox
echo "Date: $2" >> /home/sms/inbox
cat >> /home/sms/inbox

Nástroj smsd toho umí ještě víc, třeba zpracovávat požadavky na odchozí zprávy z fronty v databázi nebo do databáze ukládat nově příchozí zprávy. O tom ale někdy později.

Závěr

Pracovat s esemeskami z konzole je snadné a gnokii je téměř všemocný nástroj (podívejte se na man gnokii!). Kdybyste měli nějaké připomínky nebo dotazy, napište, moje adresa je vojtech.matocha@bcvsolutions.eu!

2 komentáře u „Moje SMS brána přes USB modem

  1. gnokii toho umí mnohem víc než jenom esemesky, uznávám, že na sms bránu by smsd bohatě stačilo.