Elektroda.pl
Elektroda.pl
X

Wyszukiwarki naszych partnerów

Wyszukaj w ofercie 200 tys. produktów TME
Europejski lider sprzedaży techniki i elektroniki.
Fibaro Fibaro
Proszę, dodaj wyjątek elektroda.pl do Adblock.
Dzięki temu, że oglądasz reklamy, wspierasz portal i użytkowników.

[raspbery pi / serwer SMS] - Uruchomienie usługi serwera SMS na Malince

DarekMich 15 Cze 2015 12:25 2451 0
  • #1 15 Cze 2015 12:25
    DarekMich
    Poziom 15  

    Witam, chciałbym zaprezentować sposób na uruchomienie „servera SMS” w swojej Malince.

    Na podstawowe pytanie do czego jest mi to potrzebne, odpowiedzi jest wiele, to zależy od wyobraźni osoby która go uruchomi, przykłady:

    Bramka SMS (najmniej sensowne moim zdaniem),
    Powiadomienie o zmianach w usłudze (skończona subskrypcja, ważne wydarzenia, otrzymywanie wiadomości email...),
    Powiadomienie o wydarzeniach w „Realu” (zanik prądu w domu, przegrzanie się pieca CO, zalanie, uaktywnienie się strefy alarmowej/alarmu),
    Sterowanie urządzeniem za pomocą komend SMS (komenda, lub komenda odpowiedź)
    … i wiele wiele innych

    Zasada polega na zainstalowaniu programu służącego do obsługi modemu/telefonu za pomocą komend modemowych „AT”

    Wszystkie praktycznie telefony (nie smartfony) są w stanie bez problemu nawiązać połączenie za pomocą łącza szeregowego i komunikować się ze światem zewnętrznym za pomocą komend „AT”, dając nam dostęp do:
    manipulacji wiadomościami SMS (odbieranie, wysyłanie, kasowanie)
    manipulacja kontaktami zawartymi w pamięci SIM/Telefonu(dodawanie, kasowanie, podgląd, nawiązywanie połączeń)

    Po zainstalowaniu programu zainstalowana zostanie również baza danych MySQL, oraz wgranie doń tabeli zawierającej wiadomości odebrane, oraz wysłane zawierające raport wiadomości (dostarczony, niedostarczony, oczekuje, błąd).

    Oraz instalacja demona (linuksowy odpowiednik usługi działającej w tle w systemach Windows).

    Oraz periodyczne uruchamianie demona (ten działa i tak w jednej kopii, to tak na wszelki wypadek gdyby połączenie z modemem / telefonem zostało przerwane i program z tej czy innej przyczyny przestał działać). Ponowne uruchomienie demona kiedy ten już działa nie uruchamia jego kolejnej kopii.

    No to zaczynamu:

    Instalacja:

    Kod: bash
    Zaloguj się, aby zobaczyć kod



    konfiguracja:

    Kod: bash
    Zaloguj się, aby zobaczyć kod




    następnie edytujemy plik config i wpisujemy następującą zawartość:
    Code:

    port=/dev/ttyUSB0
    model=AT

    Należy pamiętać, że niektóre modemy USB posiadają więcej niż jeden port szeregowy, najczęściej 1 jest portem konfiguracyjnym (właśnie ten nas interesuje) a pozostałe służą do zestawiania połączeń internetowych, więc po podłączeniu modemu okazuje się, ze posiadamy nie jedno a dw lub więcej połączenia dostępne(osobne dla 3G/HSDPA/GPRS i osoobne dla LTE itp.)

    po zapisaniu wszystkich ustawień należy sprawdzić czy poprawnie działa nasza konfiguracja za pomocą polecenia:


    Kod: bash
    Zaloguj się, aby zobaczyć kod





    Wykonanie polecenia powinno skutkować na tym etapie następującym wynikiem:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Spoiler:
    IMEI został tutaj ukryty celowo.


    Teraz przechodzimy do konfiguracji bazy danych:

    Kod: sql
    Zaloguj się, aby zobaczyć kod



    Lub możemy zaimportować „/usr/share/doc/gnokii-smsd-mysql/sms.tables.mysql.sql” do naszej bazy danych poprzez np. PHPMYADMIN jeżeli takowy posiadamy.


    Po zaimportowaniu bazy danych przystępujemy do konfiguracji demona (usługi) odbierającego / wysyłającego wiadomosci SMS.

    Do tego celu edytujemy ponownie nasz plik konfiguracyjny jaki wcześniej stworzyliśmy i w pełni treści wygląda następująco, wartości należy zmienić wedle włąsnych upodobań:


    Code:

    # This is a sample ~/.gnokiirc file.  Copy it into your
    # home directory and name it .gnokiirc.
    # See http://wiki.gnokii.org/index.php/Config for working examples.
    #

    [global]

    # Set port to the physical port used to connect to your phone.
    # Linux version is:
    port = /dev/ttyUSB1
    #
    # For MacOSX you will need something like:
    # port = /dev/cu.USA28X1P1.1
    #
    # For Win32 you want to use:
    # port = com1:
    # or similiar.
    #
    # FreeBSD (probably NetBSD and OpenBSD too) use:
    # port = /dev/cuaa0
    #
    # With Linux-IrDA you will want to use
    # port = /dev/ircomm0
    # or similiar.
    #
    # Use this setting also for the Bluetooth connection:
    # port = aa:bb:cc:dd:ee:ff
    # when using it with AT driver set it to:
    # port = /dev/rfcomm0
    # or similiar.
    #
    # For the Linux USB cables you will need one of the following settings (or
    # similiar)
    # port = /dev/ttyUSB0
    # port = /dev/tts/USB0
    # port = /dev/ttyACM0
    # the last one will work only with AT driver. The correct setting should be
    # given in the dmesg output.
    #
    # If you use connection type dku2libusb use it to denote which use endpoint
    # you'd wish to use. It is useful when you have more than one phone connected
    # to your computer using DKU2 cable. Numbering goes from 1 upwards.
    # Default is 1.
    # port = 1

    # Set model to the model number of your phone. For the
    # Symbian phones use:
    # model = symbian
    # For other non-Nokia phones and when you want to use AT
    # mode use:
    model = AT
    # If you can't figure out what to put here read the FAQ.
    # If it still doesn't help, consult gnokii-ml or #gnokii at freenode.
    # model = 6510
    # There are few main models that should make use of the certain drivers.
    # These are: 6110, 7110, 6510, 3110, 2110, 6160.

    # Set IrDA device name.
    # If you use irda connection you may want gnokii to autodetect the irda
    # device it connects to. This is fine for most of the cases. if you have
    # more than one device in range you may want to give manually the device
    # name so gnokii correctly recognizes it. Use the name that you can see
    # in the discovery log when the phone with infrared is in the range of
    # your irda port.
    # Note that you need to set this for each phone_ section separately. It
    # isn't nested from the global section.
    # irda_string = Nokia 6610i

    # Initlength controls the number of characters sent to the
    # phone during initialisation.  You can either set it to
    # the word "default" or a positive integer.
    #
    # You can try setting this value if you want to connect
    # to the phone quicker.  If you've never noticed the
    # connection to be slow, it is suggested that you
    # leave this alone.  Read the initialisation code in fbus-xxxx
    # to understand what this changes if you're curious.
    initlength = default

    # The type of the connection, for IR set this to infrared or irda.
    # For the nk6110 driver only infrared is valid for the IrDA connection.
    # See Docs/gnokii-ir-howto for more detailes on this.
    # If you have 6210/6250/7110 phone and dau9p cable (the one you can
    # use with 6100 series and cannot use hardware modem from the phone)
    # you may want to use 'dau9p' value to get faster initialization.
    # If you use dlr3 or dlr3p cable for nokia phones in FBUS mode (ie.
    # you don't use model = AT) you may want to use 'dlr3p' value here.
    # Note that it is recommended and currently the best way to use this
    # cable with nk6510 driver.
    connection = serial
    # With DKU-2 cable use the following setting if you want to libusb driver
    # (recommended):
    # connection = dku2libusb
    # or the following setting if you want to use Linux kernel driver
    # connection = dku2
    # With DKU-5 cable use the following setting
    # connection = dku5
    # For Bluetooth and AT driver use the following setting
    # connection = serial
    # For other Bluetooth settings use
    # connection = bluetooth
    # For infrared connection with phones other than Nokia 6110/6130/6150 use:
    # connection = irda
    # Don't forget to run: 'irattach irda0 -s' or similiar before running gnokii
    # For connection with a PC/SC compatible Smart Card reader use:
    # connection = pcsc

    # Set this to 'yes' if you want gnokii to set and check the lock file in
    # /var/lock directory. It avoids potential conflicts with other serial
    # port software (eg. minicom). If you have wrong permissions for the
    # directory, a warning will be generated. If you don't want a lockfile, set
    # it to 'no'.
    use_locking = yes

    # Baudrate to use on serial port connections.
    # Currently used only by models AT and BIP/CIMD. Defaults to 19200.
    serial_baudrate = 19200

    # Force waiting after each send character the specified usec time.
    # Value -1 forces the fastest 'block' writing,
    # value 0 writes each character separately without any explicite waiting,
    # other positive values specify the appropriate 1/1000000 sec delaying.
    # Siemens M20 requires at least "1"!  FIXME: Model-driven autodetection
    #serial_write_usleep = 10000

    # Force serial port handshaking mode, useful primarily for "AT" model.
    # Gnokii "AT" model uses software handshake by default.
    # Possible values: hardware (RTS/CTS - 7 wires) or software (XON/XOFF - 3 wires)
    #handshake = software

    # If defined (not commented out by '#') it will quit Gnokii anytime
    # when DCD line will drop.
    #require_dcd = 1

    # If you are using a bluetooth connection, you can specify the rfcomm
    # channel number here. Default value is 1.
    #rfcomm_channel = 1

    # There may happen various timeouts during the communication with the phone.
    # This parameter enables the retransmission policy. Ie. if the phone doesn't
    # respond, we send the frame again. This happened mainly with the older
    # phones. You may want to enable it when you see mysterious timeouts.
    # Be very careful with this option. It is suspected to cause phone breakage
    # with new DCT4 phones (like Nokia 6100). By default it is switched off
    # (sm_retry = 0)
    #sm_retry = 1

    # Run the specified script(s) right after opening and initializing the device
    # and before any communication (right before closing for disconnect_script).
    # You may find handy to use it to connect your modem to SMS Center
    # when using BIP or CIMD protocols
    # Non-absolute path is relative to the specific directory where gnokii is run!
    #connect_script = /absolute/path/to/gnokii/Docs/sample/cimd-connect
    #disconnect_script =

    # When sending SMS you can experience timeouts. This is the feature of the
    # overloaded SMSCs. The phones waits for the response from the SMSC confirming
    # that it received the short message. When the SMSC is DoSed with many requests
    # it will take more time to get the response. Adjust it to your needs. The
    # value is given in seconds to wait. Defaults to 10 seconds. Set to 0 to wait
    # forever.
    smsc_timeout = 10

    # Set this to 1 if you want to break your phone with xgnokii. Works only
    # with few Nokia models and FBUS communication
    [xgnokii]
    allow_breakage = 0

    # Set bindir to point to the location of the various gnokiid binaries.
    # In particular ensure that mgnokiidev is in this location, with
    # permissions 4750, owned by root, group gnokii.  Ensure you
    # are in the gnokii group and that the group exists...
    [gnokiid]
    bindir = /usr/sbin/

    # Any entries in the following two sections will be set as environment
    # variables when running the scripts.
    # Handy for use for $VAR substitutions in your chat(8) script.
    [connect_script]
    TELEPHONE = 12345678
    [disconnect_script]


    # The following parameters control how libgnokii handles the debugging messages.
    # Currently there are three categories: "debug" controls the libgnokii
    # normal debug output, "rlpdebug" controls the debug output of the RLP
    # subsystem, and "xdebug" is used by the xgnokii or smsd.

    [logging]

    # where to log the debug output (on: stderr, off: /dev/null)
    debug = off

    # where to log the rlp debug output (on: stderr, off: /dev/null)
    rlpdebug = off

    # where to log X debug output (on: stderr, off: /dev/null)
    xdebug = off




    tak zapisany plik kopiujemy do katalogu /etc pod nazwą gnokiirc
    w efekcie otrzymamy plik /etc/gnokiirc

    teraz prechodzimy do zadania cron (które będzie systematycznie uruchamiało naszą usługę sms:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    i dodajemy wpis:

    Code:
    */2 * * * * bash /root/sms.txt


    po dodaniu wpisu co 2 minuty będzie uruchamiana lista poleceń znajdująca się w pliku /root/sms.txt

    ten wygląda następująco:

    Kod: bash
    Zaloguj się, aby zobaczyć kod


    Zmiana katalogu pracy na folder /tmp (w pamięci ram)

    -u root – user bazy danych mysql
    -p pass – hasło dostępu dla ww usera bazy danych
    -c localhost – adres bazy danych (tak, nie musi ona znajdować się na tym samym urządzeniu)
    -d sms – nazwa tabeli do której wcześniej zaimportowaliśmy tabele dotyczącą obsługi SMS
    -m mysql – rodzaj bazy danych do któej nawiązujemy połączenie
    >/dev/null 2>&1 – nie wyświetla żadnego wyniku wyjściowego z programu (oszczędzamy miejsce w logach demona cron)
    & - wykonuje program i kontynuuje dalsze działanie skryptu (nie czekamy na jego zakończenie)

    teraz samo odbieranie sms, cóż zakłądam, że karta zainstalowana w modemie jest aktywna, a numer znamy, więc wysyłamy wiadomość SMS na znany nam nume i sprawdzamy wynik w bazie danych:

    [raspbery pi / serwer SMS] - Uruchomienie usługi serwera SMS na Malince [raspbery pi / serwer SMS] - Uruchomienie usługi serwera SMS na Malince [raspbery pi / serwer SMS] - Uruchomienie usługi serwera SMS na Malince

    Demon smsd systematycznie sprawdza nasz modem pod kątem odebranych wiadomości, jeżeli jest jakakolwiek to odczytuje ją, dodaje do bazy danych i kasuje do momentu aż nie przeczyta wszystkich i cały proces powtarza, wysyłanie wiadomości odbywa się poprzez dodanie w bazie danych do tabeli outbox wpisu zawierającego jedynie numer telefonu i treść (160 znaków), po czym program sam po kilku sekundach wyśle.

    Pozdrawiam i życzę miłej zabawy.

    2 0
  • Fibaro
TME logo Szukaj w ofercie
Zamknij 
Wyszukaj w ofercie 200 tys. produktów TME
TME Logo