Jste zde

Jak poslat SMS prostřednictvím HWg-SMS-GW3

HWg-SMS-GW3 je brána pro odesílání poplachových SMS po síti LAN. I když je primárně určena pro použití s produkty a software HW group, její komunikační rozhraní nabízejí i použití se systémy třetích stran. Jak lze v těchto systémech HWg-SMS-GW3 použít?

Obecně lze SMS zprávu odeslat několika způsoby, běžnými v komunikaci mezi systémy. Při použití protokolu netGSM (SOAP-HTTP POST) lze XML soubor odeslat pomocí programu cURL, skriptu PHP nebo vyššího programového vybavení, například Nagios.
Funkce http GET umožňuje SMS odeslat pomocí WWW prohlížeče, programů Wget, cURL nebo např. PRTG. V systémech SNMP je pro tento účel využívána funkce Write. Ve všech případech je samotné odeslání poměrně jednoduché a skript nepotřebuje více než pár řádků kódu.

Odesílání SMS prostřednictvím protokolu net GSM

Protokol netGSM je založen na komunikaci prostřednictvím SOAP, neboli odeslání XML souboru pomocí HTTP POST. Popis komunikačního protokolu netGSM naleznete na adrese http://hw-group.us/product-version/netgsm

V pricipu jde o to, že se přes HTTP POST odešle soubor XML (service.xml) v následující podobě:

<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/">
  <soapenv:Header/>
  <soapenv:Body>
    <pos:QueueAdd>
      <Queue>GsmOut</Queue>
      <Gsm>
        <Cmd>SMS</Cmd>
        <Nmr>123456789</Nmr>
        <Text>Hello World!</Text>
      </Gsm>
    </pos:QueueAdd>
  </soapenv:Body>
</soapenv:Envelope>

Popis jednotlivých parametrů lze dohledat ve výše zmiňovaném popisu protokolu.

Odeslání XML souboru pomocí programu cURL

cURL je řádkový nástroj pro přenos dat po protokolech jako HTTP, FTP a dalších. cURL se skládá ze dvou částí - konzolové aplikace curl.exe a libcurl.dll - knihovny implementujicí všechny funkce programu curl; je možné ji využít při psaní vlastního programu/skriptu (existují vazby pro velkou část jazyků). cURL lze získat zdarma na adrese https://curl.haxx.se/ (https://curl.haxx.se/download.html) a je třeba při stahování pečlivě dbát na to jakou verzi stahujete. 32bitová verze Vám na 64 bitových Windows nebude fungovat, přestože se řádně spustí!

cURL se spouští z příkazového řádku příkazem

curl -X POST -T service.xml 192.168.100.169

kde

-X definuje metodu přenosu, v našem případě POST
-T určuje že se posílá soubor a jak se jmenuje (musí se nacházet ve stejném adresáři jako program curl.exe, jinak je třeba upravit cestu)
IP adresa je adresou HWg-SMS-GW3

V případě, že je HWg-SMS-GW3 zabezpečena uživatelském jménem a heslem, je třeba příkaz doplnit o autentizaci parametrem -u:

curl -X POST -T service.xml -u user:pass 192.168.100.169

odpovědí pak je:

C:\Users\volmr\Desktop\curl>curl -X POST -T service.xml -u user:pass 192.168.100.169
  % Total    % Received % Xferd  Average Speed   Time    Time     Time  Current
                                 Dload  Upload   Total   Spent    Left  Speed
  0   375    0     0    0     0      0      0 --:--:--  0:00:01 --:--:--     0<?xml version="1.0" encoding="utf-8"?>
<soapenv:Envelope xmlns:soapenv="http://schemas.xmlsoap.org/soap/envelope/" xmlns:pos="poseidonService.xsd">
<soapenv:Header/>
<soapenv:Body>
<pos:QueueAddResponse>
<Rslt>1</Rslt>
<ID>169</ID>
</pos:QueueAddResponse>
</soapenv:Body>
</soapenv:Envelope>
100   667  100   292  100   375    292    375  0:00:01  0:00:01 --:--:--   657

C:\Users\volmr\Desktop\curl>

Odeslání XML souboru pomocí PHP

PHP je v současnosti asi nejrozšířenější skriptovací jazyk v Open Source sféře tvorby webů.  Chcete-li posílat SMS z vašich webových stránek, je to velmi jednoduché a použít lze například tento script:

<?php

$type = "SMS";
$nmr = "+420111222333";
$text =  "Hello world!";

$host = "mysmsgw.domain.com";
$port = 80;
$user = "username";
$pass = "password";

$xml = "<soapenv:Envelope xmlns:soapenv=\"http://schemas.xmlsoap.org/soap/envelope/\">
    <soapenv:Header/>
    <soapenv:Body>
        <pos:QueueAdd>
            <Queue>GsmOut</Queue>
            <Gsm>
                <Cmd>".$type."</Cmd>
                <Nmr>".$nmr."</Nmr>
                <Text>".$text."</Text>
            </Gsm>
        </pos:QueueAdd>
    </soapenv:Body>
</soapenv:Envelope>";

$fp = @fsockopen($host, $port, $errno, $errstr, 30);
if (!$fp) {
    echo "$host:$port: $errstr ($errno)\r\n";
}
else {
    fwrite($fp, "POST /service.xml HTTP/1.0\r\n");
    fwrite($fp, "User-Agent: MyPHPTest\r\n");
    fwrite($fp, sprintf("Host: %s\r\n", $host));
    fwrite($fp, sprintf("Authorization: Basic %s\r\n", base64_encode($user . ":" . $pass)));
    fwrite($fp, sprintf("Content-Length: %d\r\n\r\n", strlen($xml)));

    fwrite($fp, $xml);
    while (!feof($fp)) {
        echo fgets($fp, 128);
    }
    fclose($fp);
}

?>

Stačí vyplnit adresu, port, uživatelské jméno a heslo vaší HWg-SMS-GW3 a vše hned funguje. Proměnné $type,  $nmr a $text lze pochopitelně přenášet z jiných scriptů.

Odeslání SMS z programu Nagios

Nagios používá skripty psané v jazyce Perl. Pro tyto účely je k dispozici script notify-poseidon-sms.pl od německé firmy Netways, který umí odesílat až 160 znaků pomocí příkazu:

./notify-poseidon-sms.pl -H 192.0.2.10 -M "Test message" -D 123456789

Kde
-H – (Host) IP adresa HWg-SMS-GW3
-M – (Message) text zprávy
-D – (Destination) Telefonní číslo kam se zpráva má poslat

Nepříjemné je, že tento script umí jen zasílat SMS a neumí prozvánět což je však snadná úprava například ve stylu notify-poseidon-call.pl (viz přílohy) a nepodporuje autentizaci na úrovni http.

Příklad použití pod Windows pak vypadá takto:

C:\Users\volmr\Desktop\curl>perl notify-poseidon-sms.pl -H 192.168.100.169 -M "Hello World!" -D 777232759
OK, message sent with ID 1 to '777232759'

C:\Users\volmr\Desktop\curl>

Odesílání SMS pomocí funkce HTTP GET

HTTP GET je metoda, při které se všechny parametry předávají přímo v URL adrese. Tato metoda se často používá pro jednoduché aplikace, protože umožňuje snadné ladění a není programátorsky nijak náročná. Stačí volat celou adresu za pomoci příslušných parametrů:

values.xml?Cmd=SMS&Nmr=00420123456789&Text=Hello World!

Kde:
Values.xml – soubor v GW který má příkaz zpracovat. Používá se právě values.xml nebo service.xml
Cmd – příkaz co má GW udělat : SMS – pro odeslání SMS, CALL – pro prozvonění
Nmr – telefonní číslo národním nebo mezinárodním formátu. Místo znaménka „+“ se doporučuje používat 00, aby klienti neměli potřebu nahrazovat znak „+“ entitou
Text – Vlastní text zprávy v UTF-8

Nepříjemné je, že metoda HTTP GET je nativní pro zobrazování WWW stránek a nelze ji tedy jednoduše zabezpečit proti zneužití (bylo by třeba nastavit WWW Security, což naopak znemožní volné prohlížení webu HWg-SMS-GW3). Navíc i v takovém případe jsou přihlašovací údaje odesílané otevřeně v URL:

http://user:pass@192.168.1.1/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello 20World!

Z tohoto důvodu je zasílání zpráv pomocí metody HTTP GET standardně vypnuté a je třeba ho nejprve ručně povolit na záložce GSM Modem:

Odeslání SMS pomocí WWW prohlížeče

Do adresního řádku WWW prohlížeče zadáme URL adresu HWg-SMS-GW3 včetně požadovaných příkazů:

http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!

Po odeslání na nás vyskočí potvrzení o odeslání zprávy ve formátu XML:

<Root>
  <QueueAddResponse>
    <Rslt>1</Rslt>
    <ID>2</ID>
  </QueueAddResponse>
</Root>

 

Odeslání SMS pomocí programu Wget

GNU Wget je řádková utilita, která slouží jako jednoduchý ale výkonný http klient. Implementuje přenos souborů přes protokoly HTTP, HTTPS a FTP. Získat ji lze na adrese https://www.gnu.org/software/wget/ verze pro Windows jsou pak k dispozici na adrese http://gnuwin32.sourceforge.net/packages/wget.htm

Použití utility wget je velmi jednoduché – stačí zadat stejný příkaz jako do adresního řádku prohlížeče, ale s ohledem na to, že wget neumí přenést více než jeden parametr v URL, je třeba celou URL uzavřít do uvozovek.

wget "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!"

Výsledek pak v příkazovém řádku vypadá takto:

C:\Users\volmr\Desktop\wget>wget "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!"
--2017-12-28 15:56:35--  http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello%20World!
Connecting to 192.168.100.169:80... connected.
HTTP request sent, awaiting response... 200 Ok
Length: unspecified [text/xml]
Saving to: 'values.xml@Cmd=SMS&Nmr=777232759&Text=Hello%20World!.1'

values.xml@Cmd=SMS&Nmr=777232     [ <=>                                              ]     118  --.-KB/s    in 0s

2017-12-28 15:56:35 (5.48 MB/s) - 'values.xml@Cmd=SMS&Nmr=777232759&Text=Hello%20World!.1' saved [118]

C:\Users\volmr\Desktop\wget>

Odeslání SMS pomocí programu cURL

Použití aplikace cURL je identické použití utility wget. Na příkaz

curl "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!"

Odpoví aplikace takto:

C:\Users\volmr\Desktop\curl>curl "http://192.168.100.169/values.xml?Cmd=SMS&Nmr=777232759&Text=Hello World!"
<?xml version="1.0" encoding="utf-8"?>
<Root>
<QueueAddResponse>
<Rslt>1</Rslt>
<ID>4</ID>
</QueueAddResponse>
</Root>
C:\Users\volmr\Desktop\curl>

Výsledkem je pochopitelně odeslaná zpráva

Odesílání SMS z programu PRTG

PRTG Network Monitor představuje úplné řešení pro monitorování sítí kombinující odborné znalosti společnosti Paessler s komplexní sadou monitorovacích funkcí, snadno ovladatelným a intuitivním rozhraním a nejmodernějším monitorovacím nástrojem, který je vhodný pro všechny typy sítí.

PRTG Network Monitor je schopen odesílat SMS prostřednictvím metody HTTP GET a pro jeho aktivaci stačí nastavit už jen URL kam se mají zprávy posílat. To se prování pomocí Enterprise Console (aplikace nebo WWW rozhraní) menu Setup > Systém Administration > Notification Delivery, kde do pole Custom URL vepíšete:

http://IP_adresa/values.xml?Cmd=SMS&Nmr=%SMSNUMBER&Text=%SMSTEXT

tím zařídíte, že systémové proměnné SMSNUMBER a SMSTEXT se budou vkládat na správná místa v URL.

A pokud by HWg-SMS-GW3 byla chráněna jménem a heslem, obgobně jako v předchozím případě použijete zápis:

http://user:pass@IP_adresa/values.xml?Cmd=SMS&Nmr=%SMSNUMBER&Text=%SMSTEXT

Odesílání SMS pomocí SNMP funkce Write (snmpset)

Od verze FW 1.1.3 podporuje HWg-SMS-GW3 odesílání SMS a prozvonění prostřednictvím SNMP. K tomu slouží SNMP write, či přesněji SNMP funkce SET. Je však třeba zapsat postupně všechny 3 požadovaná OID pro cílové číslo, text zprávy a funkci (SMS/prozvonění/sms+prozvonění). K tomu slouží následující OID:

  • msgQueueNmr (OID .1.3.6.1.4.1.21796.4.10.2.2.0) - (povinné) Cílové telefonní číslo v národním nebo mezinárodním formátu. Lze zadat v mezinárodním formátu se znakem „+“ i „00“
  • msgQueueCmd (OID .1.3.6.1.4.1.21796.4.10.2.3.0) - (povinné) příkaz definující co se má stát 1=sms,2=ring,3=sms+ring
  • msgQueueText (OID .1.3.6.1.4.1.21796.4.10.2.1.0) - (povinné) text zprávy. Pokud chceme pouze prozvonění není třeba zadávat

 

V praxi pak mohou jednotlivé příkazy vypadat například takto:

snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759
snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.1.0 s "Hello World!"
snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 1

Po aplikaci v příkazovém řádku se jeví takto:

C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759
SNMPv2-SMI::enterprises.21796.4.10.2.2.0 = INTEGER: 777232759

C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.1.0 s "Hello World!"
SNMPv2-SMI::enterprises.21796.4.10.2.1.0 = STRING: "Hello World!"

C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 1
SNMPv2-SMI::enterprises.21796.4.10.2.3.0 = INTEGER: 1

C:\usr\bin>

Příkaz na prozvonění pak vypadá takto:

snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759
snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 2

a odpověď na něj takto:

C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.2.0 i: 777232759
SNMPv2-SMI::enterprises.21796.4.10.2.2.0 = INTEGER: 777232759

C:\usr\bin>snmpset -v 1 -c private 192.168.100.169 1.3.6.1.4.1.21796.4.10.2.3.0 i: 2
SNMPv2-SMI::enterprises.21796.4.10.2.3.0 = INTEGER: 2

C:\usr\bin>

HWg-SMS-GW3 je brána pro odesílání poplachových SMS po síti LAN. HWg-SMS-GW3 je primárně určena pro použití s produkty a software HW group s.r.o., ale její komunikační rozhraní jsou dostatečně zdokumentována, aby se dala použít i se systémy 3 stran.

HWg-SMS GW 3 na obchod.hw.cz

Hodnocení článku: