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.
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!