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.