Spis treści
Moduł LB-480 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://lb480.example.net/json
gdzie lb480.example.net
to przykładowy adres modułu LB-480.
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).
tablica obiektów, z których każdy określa aktualny stan wejścia pomiarowego INPUT 1–8. Każdy obiekt ma następujące składowe:
Nazwa wejścia (konfigurowana przez użytkownika).
Tryb pracy wejścia [off|s300|th|pt|bin|ssw|cnt|cs|u|us|i|is].
Identyfikacja czujnika dołączonego na wejściu S300.
Dla wejść pracujących w pozostałych trybach, 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
gdy brak czujnika na wejściu.
Tabela zawierająca wyniki z danego czujnika, w ilości zależnej od typu czujnika.
null
gdy brak czujnika na wejściu lub jest on zwarty.
Jednoelementowa tabela zawierająca wynik pomiaru temperatury w postaci liczbowej.
Jednoelementowa tabela zawierająca wynik pomiaru napięcia w postaci liczbowej.
[false]
dla stanu rozwarcia wejścia
[true]
dla stanu zwarcia wejścia
null
dla stanu zwarcia lub przerwania linii
[false]
dla stanu wyłączenia
[true]
dla stanu włączenia
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-480", "sn": "1", "name": "LB-480 #1", "input": [ { "name": "Input 1", "mode": "bin", "v": [ false ], "u": null }, { "name": "Input 2", "mode": "s300", "id": { "type": "LB-715", "sn": 1 }, "v": [ 45.1, 25.0, 1005.0 ], "u": [ "%", "°C", "hPa" ] }, { "name": "Input 3", "mode": "t", "v": [ 26.3 ], "u": [ "°C" ] }, { "name": "Input 4", "mode": "u", "v": [ 2.990 ], "u": [ "V" ] } ] }
<?php $LB480_HOST_ADDR = "lb480.demo.label.pl"; print " <html> <head> <meta http-equiv=\"content-type\" content=\"text/html; charset=utf-8\"> <title>LB-480 JSON php example</title> </head> <body> "; @$r = file_get_contents("http://{$LB480_HOST_ADDR}/json"); if ($r) { $d = json_decode($r); show_device_info($d); show_device_data($d); } else { echo "<h1>No response from 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"; } ?>