Jak wysyłać sms z konsoli ? Posłuży do tego program picocom.

Dlaczego picocom do interakcji z modemem a nie np: minicom ? Ponieważ skrypt w którym za pomocą expect’a wydajemy polecenia do picocom’a możemy spokojnie umieścić w cronie. Nie musisz się martwić żeby mieć otwarty terminal lub ze wystąpi błąd: No cursor motion capability (cm).

Uruchomienie picocom na com1 z szybkością 115200

picocom -b 115200 /dev/ttyS0
picocom v1.4

port is        : /dev/ttyS0
flowcontrol    : none
baudrate is    : 115200
parity is      : none
databits are   : 8
escape is      : C-a
noinit is      : no
noreset is     : no
nolock is      : no
send_cmd is    : ascii_xfr -s -v -l10
receive_cmd is : rz -vv

Terminal ready
AT
OK
AT+CMGF=1
OK
AT+CMGS="888999000"
>Test z modemu ES75
CTRL-Z
+CMGS: 1

OK

 

AT – test połączenia pomiedzy modemem a terminalem.
AT+CMGF=1 – wejście w tryb pisania sms.
AT+CMGS=”888999000″ – Rozpoczecie pisania sms z wpisanym numerem odbiorcy
gdy pojawi sie znak > oznacza to że trzeba wpisać teść sms
kończymy pisanie sms wciskając CTRL-Z.

Aby powyższe zadziałało jako skrypt wykonywalny bez otwartego terminala trzeba ubrać to w expect’a:

#!/usr/bin/expect -f
set speed "-b 115200"
set dev "/dev/ttyS0"
spawn picocom $speed $dev
expect "Terminal Ready"
send "ATr"
expect "OK"
send "AT+CMGF=1r"
expect "OK"
send "AT+CMGS="888999000"r"
expect ">"
send "Test z modemu ES75r"
send "\032"       #CTRL-Z
expect eof

 

Bardzo prosto stworzyć można z tego bramke sms pisząc formularz w PHP
który będzie umieszczał powyższy plik ze zmienionym numerem i treścią sms w
określonym miejscu a cron co minute bedzie go wykonywał.