• Droga do pracy/szkoły – informacja o korkach

    korki_drog

    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.

    korki

    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.

     

    Categories: Inteligentny dom

    Tagi: ,

    Comments are currently closed.