Kako bismo mogli raditi s podacima koje smo poslali na Sigfox mrežu s našeg uređaja, moramo upogoniti PHP skriptu koja će prihvatiti te podatke i spremiti ih u format spreman za obradu.

 Kako bismo mogli poruke slati u naše PHP skripte, moramo pokrenuti server, što ćemo u ovom članku napraviti lokalno te ćemo emulirati naše poruke kako bismo provjerili funkcionalnost skripti. PHP, tj. Hypertext Preprocessor je univerzalni programski jezik, razvijen za uporabu na web stranicama. Nama to omogućava iznimno jednostavno slanje podataka te njihovu obradu. Ako do sada niste još čuli ili koristili PHP, preporučamo da pogledate ovaj tutorial, trebao bi vas brzo naučiti osnovama koje ćemo koristiti. (P.S. Google je vaš najbolji prijatelj).

Kako bismo mogli pokrenuti server na kojemu ćemo izvoditi PHP kod, moramo prvo instalirati XAMPP.

XAMPP je aplikacija koja na bilo kojoj poznatijoj platformi (Windows, OSx ili Linux) samo s nekoliko klikova omogućava pokretanje Apache servera koji može pokretati PHP kod. Za preuzimanje XAMPP-a te pomoć pri instalaciji pogledajte više tu. Nakon instalacije XAMPP-a, trebamo ga pokrenuti kao administrator (na mojem računalu se XAMPP nalazi na C:\xampp\xampp-control.exe) te pritom pokrenuti MySql i Apache servise. Ako ne razumijete u potpunosti zašto radimo neke stvari, preporučamo vam da pogledate Phpknowhow članak u kojemu ćete naučiti kako ga koristiti na detaljnijoj razini.

Kako bismo provjerili funkcionalnost našeg servera, pokrenut ćemo prvo jednostavnu skriptu koja bi nam trebala ispisati sadržaj na stranicu pomoću HTML-a i PHP-a.

<html>
    <head>
    </head>
    <body>
        <h1> SigFox PHP Skripta </h1>
        <?php
            echo("Pozdrav iz PHP-a!");
        ?>
    </body>
</html>

Skriptu možemo spremiti kao SigfoxSkripta.php u htdocs folder (preopručljivo unutar foldera scripts, kojega je potrebno napraviti) koji se nalazi unutar XAMPP instalacije (u mojem slučaju C:\xampp\htdocs\scripts). Kako se naš server nalazi na localhost serveru, a sve datoteke koje XAMPP pokreće se nalaze unutar htdocs servera, to znači da možemo našoj skripti pristupiti na linku: localhost/scripts/SigfoxSkripta.php te bi nakon što ju pokrenemo u web pregledniku rezultat trebao biti sljedeći:

Sada kada znamo da nam je server funkcionalan, možemo napisati kod koji će obraditi nadolazeće poruke. Prvo ćemo dodati kod koji nam omogućava postavljanje podataka koji idu na downlink. Downlink poruke su poruke koje mi šaljemo prema našem Sigfox uređaju, a u ovom slučaju će ti podaci biti odgovor na naše poruke koje šaljemo s našeg uređaja.

<form method="post">
   <br><br>
   Downlink data (hex):<br>0x
   <input type="text" name="downlink" maxlength="16" size="16">
   <input type="submit" value="Spremi">
</form>

<?php
   if(isset($_POST['downlink']))
   {
      $message = str_pad($_POST['downlink'], 16, "0", STR_PAD_LEFT);
      $payload = array($data_array->id=>array('downlinkData'=>$message));
      file_put_contents('downlink_data.json', json_encode($payload, JSON_PRETTY_PRINT));
      echo "<br>";
      echo "Downlink: 0x".$message;
   }
?>

Prvi dio koda je običan HTML kod pomoću kojega radimo unos kao POST metodu. Svaka HTTP stranica može primati POST, GET i druge metode koje nam omogućavaju slanje i primanje podataka među njima. Post metoda će se izvršiti nakon što unesemo podatke u <input type="text"... te stisnemo gumb koji je upisan kao <input type="submit"...

Zatim se u PHP dijelu koda provjerava POST metoda s tekstualnog input elementa. Ako bismo sada upisali u tekstualni input element neku vrijednost te stisnuli spremi, upisali bi se podaci u downlink_data.json datoteku, koju ćemo kasnije koristiti.

Sada ćemo napraviti dio skripte koji će prikazivati poruke poslane sa Sigfox mreže, odnosno poruke koje ćemo mi poslati pomoću POST metode:

<?php
   $json=file_get_contents('./uplink_data.json', true);
   $data_array = json_decode($json);

   echo "<table>";
      echo "<tr align=\"left\">";
         echo "<td>TIME:</td>";
         echo "<td>ID (hex):</td>";
         echo "<td>DATA (hex):</td>";
      echo "</tr>";
    
      echo "<tr align=\"right\">";
         echo "<td>".date("M d Y H:i:s", $data_array->time)."</td>";
         echo "<td>0x".$data_array->id."</td>";
         echo "<td>0x".$data_array->data."</td>";
      echo "</tr>";
   echo "</table>";
?>

U ovom PHP kodu se zapravo nalazi jednostavna HTML tablica koja prikazuje podatke spremljene u uplink_data.json datoteci. Ta datoteka sadrži informacije o našoj poruci poslanoj na Sigfox mrežu prema uređaju. Važno je da ovaj kod stavite prije prve PHP skripte s obzirom na to da ona koristi varijablu deklariranu u ovoj. 

Sada moramo napraviti novu skriptu koja će reagirati kada pristigne nova poruka sa Sigfox mreže. Nazvat ćemo ju data.php:

<?php
   header('Content-Type:application/json');

   if ($_SERVER['REQUEST_METHOD']!=='POST')
   {
      header("HTTP/1.0 405 Mora biti POST");
      die();
   }

   $_POST = json_decode(file_get_contents('php://input'), true);
   if (is_null($_POST['id'])){
      header("HTTP/1.0 204 Nema sadrzaja");
      die();
   }
   //8 bytes message
   file_put_contents('uplink_data.json', json_encode($_POST, JSON_PRETTY_PRINT));
   if($_POST['ack']=='true')
   {
      $payload=file_get_contents('./downlink_data.json', true);
      echo $payload;
   }
?>

Ova skripta provjerava nadolazeće POST metode te provjerava jesu li ispravne. Ako je poruka ispravna, spremit će njen sadržaj u datoteku "downlink_data.json" iz koje će naša druga skripta dobiti te podatke.

Kako bismo testirali funkcionalnost našeg koda, iskoristit ćemo Postman, alat za razvijanje web API-ja, no mi ćemo ga koristiti za jednostavno slanje POST metode u kojoj se nalazi naša Sigfox poruka. Za instalaciju i više o programu možete vidjeti tu.

Za naše potrebe, napraviti ćemo novi Request, dati ćemo mu ime SigfoxReq te ga spremiti u folder Sigfox. Pod body tab ćemo odabrati raw te JSON(application/json), a u sam body ćemo upisati podatke:

U time varijablu smo spremili trenutno vrijeme pomoću Postmanovih "Enviroment" varijabli, u ID smo stavili ID našeg uređaja (ili bilo koji nasumični ID), u data smo stavili našu poruku te u ack true ili false ovisno želimo li odgovor ili ne. 

Nakon što pošaljemo poruku upisanu u postman, prema data.php skripti možemo vidjeti da smo dobili odgovor natrag:

koji bi trebao biti jednak onome kojemu smo upisali u downlink_data.json datoteku. A ako odemo na našu stranicu možemo vidjeti da se u tablici nalaze podaci poslani u POST requestu.

U idućem članku pozabavit ćemo se radom na Sigfox backendu te procesom slanja poruka po Sigfox mreži gdje ćemo vidjeti da možemo svaku poruku proslijediti pomoću POST metode.

Saznaj sve na vrijeme

Želiš da novosti o razvoju nacionalne IoT mreže same pronalaze put do tvog online sandučića? Ispuni prijavu za newsletter i ispunit ćemo ti želju.

Prijavi me