Konfiguracja OpenWrt do wysyłania SMS
Ostatnia zmiana: 2019-10-12 15:10

Do czego można użyć SMSów wysyłanych z rutera z OpenWrt? Można wysyłać powiadomienia np. o zakończeniu pobierania torrentów, statystyki dzienne, informacje o kończącym się miejscu na dysku lub przekroczeniu transferu przez jednego z użytkowników. Zastosowań może być wiele.

Obecnie można za niewielką cenę uzyskać pakiet SMSów, więc może to być sensowny sposób powiadamiania. Potrzebny jest oczywiście modem, w tym przypadku był to Huawei E170 (USB). Niezbędne będzie także odpowiednie oprogramowanie, w tej roli świetnie sprawdzi się program gnokii.

Instalacja



    # opkg update
    # opkg install gnokii

Następnie należy utworzyć plik konfiguracyjny. Może być on umieszczony w /root/.gnokiirc lub /etc/gnokiirc. Jego zawartość powinna wyglądać następująco:


    [global]
    model = AT
    port = /dev/ttyUSB1
    connection = serial

Port /dev/ttyUSB1 należy zmienić stosownie do własnego urządzenia.

Po instalacji dobrze jest sprawdzić czy gnokii wykrywa poprawnie modem:


    root@OpenWrt:# gnokii --identify
    GNOKII Version 0.6.21
    IMEI : xxxxxxxxxxxxxxx
    Manufacturer : huawei
    Model : E17X
    Product name : E17X
    Revision : 11.415.05.03.00

Jeżeli został wykryty to można już wysłać wiadomość.

Wysyłanie SMS



    # echo "To dziala" | gnokii --sendsms numer_telefonu

Gdzie numer_telefonu to numer na który ma być wysłany SMS. Jeżeli chcemy wysłać wiadomość bezpośrednio na ekran telefonu należy go wysłać jako SMS klasy 0, czyli:


    # echo "To dziala" | gnokii --sendsms numer_telefonu -C 0

Odebranie SMSa


 
    # gnokii --getsms SM 0 end
    GNOKII Version 0.6.21
    0. Inbox Message (read)
    Date/time: 17/08/2010 22:02:45 +0200
    Sender: +4866xxxxxxx Msg Center: +48790998290
    Text:
    W druga strone tez sie da

Skasowanie SMSa



    # gnokii --deletesms SM 0
    GNOKII Version 0.6.21
    Deleted SMS SM 0

Wysyłanie i odbiór SMSów przez www

  • tworzymy nowy katalog


    # mkdir -p /tmp/sms/cgi-bin


  • umieszczamy tam skrypt do wysyłania smsów pod nazwą sms.sh o zawartości:


    #!/bin/sh

    echo "Content-type: text/html"
    echo ""
    echo "
    <html>
    <style type=\"text/css\">
        #centered {
            position: absolute;
            top: 0;
            right: 0;
            bottom: 0;
            left: 0;
            width: 50%;
            height: 50%;
            margin: auto;
            text-align: center;
        }
        .label {
            text-align: left;
        }
        .text {
            width: 100%;
        }
    </style>
    <head>
        <title>SMS</title>
        <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />
    </head>
    <body>
    "

    if [ "$REQUEST_METHOD" = POST ]; then
            read -t 3 QUERY_STRING
            eval $(echo "$QUERY_STRING"|awk -F'&' '{for(i=1;i<=NF;i++){print $i}}')
            action=`uhttpd -d $action`
            tel=`uhttpd -d $msisdn`
            msg=`uhttpd -d $msg`
    else
            action=""
            tel=""
            msg=""
    fi

    echo "<div id=centered>"

    case "$action" in
        send)
            echo "[global]" > /tmp/gnokiirc
            echo "model = AT" >> /tmp/gnokiirc
            echo "port = /dev/ttyUSB1" >> /tmp/gnokiirc
            echo "connection = serial" >> /tmp/gnokiirc
    
            echo "$msg" | tr '+' ' ' | gnokii --config /tmp/gnokiirc --sendsms $tel
            R=$?
            if [ $R -eq 0 ]; then
                echo "Wysłano wiadomość do $tel!<br />"
            else
                echo "Wystąpił problem z wysłaniem wiadomości!<br />"
            fi
            echo $tel": "$msg >> /tmp/sms.txt
            rm /tmp/gnokiirc
            ;;
    esac

    echo "
    <form method=\"post\">
        <input type=\"hidden\" name=\"action\" id=\"action\" value=\"send\">
        <div class=label>Numer telefonu:</div><input name=\"msisdn\" class=text><br />
        <div class=label>Wiadomość:</div><textarea name=\"msg\" class=text></textarea><br /><br />
        <input type=\"submit\" name=\"submit\" value=\"Wyślij\" text-align=center>
    </form>
    <hr />
    "
    echo "[global]" > /tmp/gnokiirc
    echo "model = AT" >> /tmp/gnokiirc
    echo "port = /dev/ttyUSB1" >> /tmp/gnokiirc
    echo "connection = serial" >> /tmp/gnokiirc
    echo "<pre style=\"text-align:left;\">"
    gnokii --config /tmp/gnokiirc --getsms SM 0 end 2>/dev/null | sed -e 's/Msg Center.*//g'
    rm /tmp/gnokiirc

    echo "</pre>
    </div>
    </body></html>"


  • uruchamiamy serwer www na porcie 81


    # chmod 755 /tmp/sms/cgi-bin/sms.sh
    # uhttpd -p 0.0.0.0:81 -h /tmp/sms


  • wchodzimy na stronę www


    http://192.168.1.1:81/cgi-bin/sms.sh

Inna metoda wysyłania SMSów

Jeżeli docelowym odbiorcą jest telefon w sieci Plus, należy także pamiętać o możliwości nadania SMS wysyłając mejla na adres +48numer_telefonu@text.plusgsm.pl