Codziennie rano zawożę córkę do szkoły, dokąd mamy 2 drogi. Bardzo często zdarza się że natrafiamy na korek i żałujemy że nie wybraliśmy innej trasy.
Postanowiłem więc wyposażyć nasz domek w funkcję powiadamiania przy wyjściu z domu o tym którą drogą dojedziemy szybciej.
Funkcja potrafi także wyświetlać teoretyczny czas przejazdu na który mogę zawsze zerknąć.
Do realizacji wykorzystałem Google Maps które do obliczania/wyznaczania trasy wykorzystuje informacje o natężeniu ruchu.
Jeżeli chcesz u siebie zrealizować taką funkcję to zapoznaj się z opisem technicznym Google Maps API
https://developers.google.com/maps/documentation/directions/?hl=pl
a także wygeneruj sobie klucz który będzie potrzebny aby pobierać dane
https://code.google.com/apis/console/?noredirect
Gotowy link do pobierania informacji o trasie wygląda następująco :
https://maps.googleapis.com/maps/api/directions/json?origin=Warszawa%20jerozolimskie%20186&destination=Warszawa%20Jerozolimskie%201&key=Twój_klucz
Wynik tego linka zwraca w wyniku tabele danych JSON zawierająca szczegółowe informacje o trasie.
Ze względu na to że Google wymaga aby połączenie było realizowane po SSL musimy zbudować sobie prosty serwerek proxy.
Tworzymy więc plik PHP o treści :
<?php
$url = fopen( ‚https://maps.googleapis.com/maps/api/directions/json?origin=ADRES_ZRODLOWY&destination=ADRES_DOCELOWY&key=Twoj_klucz’, ‚r’ );
$wynik = ”;
while (!feof($url)) {
$wynik .= fread($url, 8192);
}
fclose( $url );
header(‚Content-Type: application/json’);
print_r($wynik);
?>
który umieszczamy na dowolnym hostingu.
Następnie tworzymy wirtualne urządzenie które pobierze nam dane do centralki HC2.
HC2 = Net.FHttp(„TWOJ_HOSTING”,80);
dane ,status, errorCode = HC2:GET(„/PLIKPHP.php”);
ajson=json.decode(dane)
dist=ajson.routes[1].legs[1].distance.value
fibaro:call(834,’setProperty’,’ui.Label1.value’,tostring(dist))
dur=ajson.routes[1].legs[1].duration.value
fibaro:call(834,’setProperty’,’ui.Label2.value’,tostring(dur))
fibaro:debug(dur)
fibaro:call(834,’setProperty’,’ui.Label3.value’,tostring(„Opóźnienie „..(600-tonumber(dur))))
Przyjemnego korzystania.