Spis treści
Moduł LB-856 zapewnia dostęp do danych w formacie JSON, dla systemów które
potrafią odczytać dane w tym formacie. Odczyt danych możliwy jest za pomocą
protokołu HTTP pod adresem:
http://lb856.example.net/json
, gdzie
lb856.example.net
to przykładowy adres modułu LB-856.
Dodatkowo na stronie głównej modułu poniżej tabelki z wynikami znajduje
się link JSON
zwracający dane w tym formacie.
Dane JSON są w formacie UTF-8, co ma znaczenie dla właściwego zdekodowania znaków specjalnych, jak np. znak stopnia czy potęgi dwójki.
Format JSON opisany jest na stronie http://www.json.org/, jak również ma swoją formalną specyfikację w postaci dokumentu RFC 4627.
vendor
Producent urządzenia.
Typ urządzenia.
Numer seryjny urządzenia.
Nazwa urządzenia (konfigurowana przez użytkownika).
5-elementowa tablica obiektów, z których każdy określa aktualny stan wejść pomiarowych (CO2/O2/TEMP/0-10V/S300). Każdy obiekt ma następujące składowe:
Nazwa wejścia (konfigurowana przez użytkownika).
Tryb pracy wejścia [off|co2|o2|temp|10v|s300].
Identyfikacja czujnika dołączonego na wejściu S300.
Dla innych wejść lub przy braku dołączonego
czujnika S300 na wejściu, zwracana jest wartość null
.
Dla czujnika S300 zwracany jest obiekt zawierający składowe: type i sn.
Wyniki pomiarów dla danego wejścia. Jeżeli brak jest dołączonego
czujnika lub wykryta została sytuacja awaryjna (np. zwarcie czujnika),
zwracana jest wartość null
. Jeżeli czujnik jest
podłączony i pracuje prawidłowo, wyniki zwracane są w postaci tabeli.
Ilość elementów w tabeli
zależna jest od trybu pracy wejścia i typu dołączonego czujnika
(szczegółowe informacje o ilości i typie zmiennych znajdują się
w wykazie zmiennych).
Nawet jeżeli wynik jest tylko jeden, jest on zwracany w postaci
jednoelementowej tabeli (dla ujednolicenia ogólnego formatu).
Zwracane wartości są następujące, zależnie od trybu pracy wejścia:
null
null
dla czujnika temperatury -
gdy brak czujnika na wejściu lub jest on zwarty.
Jednoelementowa tabela zawierająca wynik pomiaru w postaci liczbowej.
null
gdy brak czujnika na wejściu.
Tabela zawierająca wyniki z danego czujnika, w ilości zależnej od typu czujnika.
Jednostka miary dla wyniku pomiaru - sposób reprezentacji jednostek
zależnie od trybu pracy wejścia jest analogiczny jak dla opisanych
powyżej wyników pomiarów (null
przy braku
czujnika, tabela jednostek gdy jest dołączony czujnik).
Jeżeli wynik nie ma jednostki (np. wejście binarne)
to zwracana jest wartość null
.
{ "vendor": "LAB-EL", "type": "LB-856", "sn": "35", "name": "LB-856 #35", "input": [ { "name": "CO2", "mode": "co2", "id": null, "v": [ 758 ], "u": [ "ppm" ] }, { "name": "O2", "mode": "o2", "id": null, "v": [ 15.1 ], "u": [ "%" ] }, { "name": "temperature", "mode": "temp", "id": null, "v": [ 24.7 ], "u":[ "°C" ] }, { "name": "0-10V", "mode": "10v", "id": null, "v": [ 0.001 ], "u": [ "V" ] }, { "name": "S300", "mode": "s300", "id": "LB-715 #101", "v": [ 37.2, 23.2, 988.3 ], "u": [ "%", "°C", "hPa" ] } ] }
<?php $LB856_HOST_ADDR = "lb856.demo.label.pl"; print " <html> <head> <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"> <title>LB-856 JSON php example</title> </head> <body> "; @$r = file_get_contents("http://{$LB856_HOST_ADDR}/json"); if ($r) { $d = json_decode($r); show_device_info($d); show_device_data($d); } else { echo "<h1>No response from LB-856 device</h1>\n"; } print "</body>\n"; print "</html>\n"; exit(); function show_device_info($d) { print " <h1>Device info</h1> <table> <tr> <th>Vendor:</th> <td>{$d->vendor}</td> </tr> <tr> <th>Type:</th> <td>{$d->type}</td> </tr> <tr> <th>SN:</th> <td>{$d->sn}</td> </tr> <tr> <th>Name:</th> <td>{$d->name}</td> </tr> </table> "; } function show_device_data($d) { print" <h1>Input data</h1> <table border=\"1\" cellspacing=\"0\" cellpadding=\"5\"> <tr> <th>Input</th> <th>Name</th> <th>Mode</th> <th>Sensor ID</th> <th>Value</th> <th>Unit</th> </tr> "; // iterate all inputs for ($i = 0; $i < 4; ++$i) { // v can be null, when there's no sensor attached // or there's sensor failure if (is_null($d->input[$i]->v)) { $v = ""; } else { // preformat bool values, because default PHP string // conversion show false as empty string, exactly // the same as for null for ($j = 0; $j < 8; ++$j) { if (is_bool($d->input[$i]->v[$j])) { $d->input[$i]->v[$j] = $d->input[$i]->v[$j] ? "true" : "false"; } } $v = implode("<br>", $d->input[$i]->v); } // u can be null, when there's no sensor attached // or there's sensor failure // or there's no unit for particular sensor if (is_null($d->input[$i]->u)) { $u = ""; } else { $u = implode("<br>", $d->input[$i]->u); } $nr = $i + 1; print(" <tr> <td>$nr</td> <td>{$d->input[$i]->name}</td> <td>{$d->input[$i]->mode}</td> <td>{$d->input[$i]->id}</td> <td>$v</td> <td>$u</td> </tr> "); } print "</table>\n"; } ?>