Moje Rapsberry Pi - SMS ovládání RPI

raspipidiNe vždy máme při ruce možnost připojení RPI k Internetu pomocí WiFi, LAN a platit si 3G modem v místě kde data tečou rychlostí GPRS (59,2 kbit/s) přes paušál (od 200,- více) se nevyplatí. Řešením je použít ovládání RPI pomocí SMS. Co budeme potřebovat? SMS kartu od některého z operátorů (já si právě pořídil od ČEZ: Platím, jak volám. Žádné závazky, žádný povinný měsíční poplatek ani minimální útrata. Částka za odeslanou SMS = 1,20 Kč.). Dále (3G) USB SIM modem například Huawei E303 a samozřejmě RPI. V programu si stanovíme správce systému (telefon toho kdo chce RPI ovládat). Pokud správce zašle na SIM kartu SMS s příkazem (například "zap") provede se příkaz v RPI a zašle se správci potvrzovací SMS o provedení příkazu. RPI reaguje pouze na definovaný povel a pouze tel. správce...

Zistíme zda je 3g modem vidět v RPI

Chceme-li získat více informací o připojených USB zařízeních použijeme příkaz " lsusb ". Otevřeme okno terminálu a zadáme:

lsusb

výstup by měl vypadat nějak takto:

Bus 001 Device 002: ID 0424:9512 Standard Microsystems Corp.
Bus 001 Device 001: ID 1d6b:0002 Linux Foundation 2.0 root hub
Bus 001 Device 003: ID 0424:ec00 Standard Microsystems Corp.
Bus 001 Device 010: ID 12d1:1506 Huawei Technologies Co., Ltd. E398 LTE/UMTS/GSM Modem/Networkcard

Pokud ve výpisu u 3G modemu je nějaká zmínka o "modem" nebo "UMTS" zařízení máme vyhráno.

Pokud se nám ve výpisu zobrazuje: Bus 001 Device 010: ID 12d1: 14d1 Huawei Technologies, Ltd máme problém. 3G modem má malý oddíl, který obsahuje instalátor pro Windows. RPI zjistil tento oddíl a označil 3G modem jako úložné zařízení ještě před tím než měl šanci si všimnout 3G modemu. Pro odstranění tohoto problému nainstalujeme nástroj usb_modeswitch. Pro instalaci zadáme v okně terminálu:

sudo apt-get install usb-modeswitch

Dobře: Bus 001 Device 010: ID 12d1: 1506 Huawei Technologies Co, Ltd E398 LTE / UMTS / GSM Modem / Networkcard

Špatně: Bus 001 Device 010: ID 12d1: 14d1 Huawei Technologies, Ltd

Musíme říct operačnímu systému Vendor ID a ID zařízení. Více informací o identifikaci USB lze nalézt na debian wiki. První 4 znaky ID zařízení (prodejce ID) jsou stejné v obou případech, ale poslední 4 (ID zařízení) se změnily. USB-modeswitch nutí operační systém používat kombinaci, která odpovídá 3G modemu. Po instalaci USB-modeswitch je třeba provést úpravu v souboru / etc / usb_modeswitch.conf. ID našeho zařízení zjistíme ve výstupu "lsusb". Pokud máme výpis "viz řádek Špatně" musíme najít správné ID (druhá část) pro 3G modem. Jakmile jsme našli správné ID zařízení zkopírujeme ho a vložíme do textového editoru.

sudo nano /etc/usb_modeswitch.conf

a vložíme tyto řádky:

DefaultVendor = 0x12d1
DefaultProduct = 0x1506
MessageEndPoint = "0x01"
MessageContent = "55534243000000000000000000000011060000000000000000 000000000000"

Pro uložení stiskeme Ctrl + O a [enter] následované Ctrl-X.

Restartujeme RPI, spustíme "lsusb" a sledujeme výstup - pokud vidíme: Bus 001 Device 010: ID 12d1: 1506 Huawei Technologies Co, Ltd E398 LTE / UMTS / GSM Modem / Networkcard máme vyhráno...

SMS instalace programuI

Chceme-li ovládat RPI použijeme k tomuto účelu program "gammu". Otevřeme okno terminálu a zadáme:

sudo apt-get install gammu
sudo apt-get install python-gammu
# sudo apt-get install gammu-smsd # pouze pokud budeme chtit pracovat se zpravami s demonem na pozadi (cteni a ukladani zprav ve slozkach v RPI)
Provedeme restart RPI
Otevřeme okno terminálu a vyzkoušíme zda je již dostupný modem:
dmesg | grep tty

výstup by měl vypadat nějak takto:

[ 7.578478] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB0
[ 7.697942] usb 1-1.2: GSM modem (1-port) converter now attached to ttyUSB1

Nastavíme port modemu v gammu. Otevřeme okno terminálu a zadáme:

gammu-config

/dev/ttyUSB0

Provedeme kontrolu připojení modemu:
gammu --identify

Výsledek bude vypadat nějak takto:

Device               : /dev/ttyUSB0
Manufacturer    : Huawei
Model                 : unknown (E303)
Firmware           : 21.158.13.00.864
IMEI                     : 863824010xxxxxxxxxx
SIM IMSI             : 2300202xxxxxxxxxx

Máme vyhráno. Provedeme test odeslání SMS:

echo "halo, moje prvni SMS" | gammu --sendsms TEXT +420123456789


V příloze jsou různé ukázky práce s SMS v Pythonu...
Můj program se jmenuje auto.py
V podprogramech: def run_prikaz_1(cislo): # zpracovani prikazu 1
Vložíme funkce pro vykonání příkazů a můžeme si hrát s RPI přes SMS :-)
 
Odeslání SMS z Pythonu na pozadí:

import os

sms = 'text moji sms'+'| gammu --sendsms TEXT '+'+420123456789'
cmd = '/bin/echo %s' % sms
print 'zpracovavam "%s"' % cmd
os.system(cmd)