Droga do pracy/szkoły – informacja o korkach

  • 0 Odpowiedzi
  • 9315 Wyświetleń

0 użytkowników i 1 Gość przegląda ten wątek.

*

Offline sztywniak

  • ***** 601
  • 23
  • Nazwa i wersja ID: HC2 3.60/ 4.37, Vera 1.7.1018
Droga do pracy/szkoły – informacja o korkach
« dnia: Marzec 24, 2015, 10:03:41 pm »
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($url8192);
}
fclose$url );
header(‚Content-Typeapplication/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.
« Ostatnia zmiana: Marzec 31, 2015, 10:38:54 pm wysłana przez marecki_0luk1 »