Czas drogi do pracy/domu w Domoticz

Tym razem mała, przydatna ciekawostka dla osób, które dojeżdżają do pracy trochę dalej niż kilka kilometrów – podawanie czasu dojazdu jako element w Domoticz. Za przykładem użytkownika Mastair z forum Domoticz.

Idea bardzo mi się spodobała, szczególnie dla żony, która do pracy na kilkadziesiąt kilometrów. Oczywiście można odpalić Google Maps i sprawdzić w nich, ale planując tablet na ścianę z Domoticz i kalendarzem naszej rodziny – taki gadżet może być dla niej przydatny.

Na 'dzień dobry’ będziemy potrzebować zarejestrowania się jako Google developer i pozyskania klucza do API (tak ogólnie – interfejs programistyczny). Polling interval (czas co jaki jest odpytywany Google) nie powinien być zbyt mały, ponieważ bezpłatne jest 2500 zapytań dziennie.

https://developers.google.com/maps/documentation/directions/get-api-key

Lub posługujemy się kodem jak poniżej.

„””
<plugin key=”TravelTimes” name=”Travel Times” author=”mastair” version=”1.0.0″>
    <params>
        <param field=”Mode1″ label=”From address” width=”200px” required=”true”/>
        <param field=”Mode2″ label=”To address” width=”200px” required=”true”/>
        <param field=”Mode5″ label=”Google API Key” width=”200px” required=”true”/>
        <param field=”Mode6″ label=”Polling interval (s)” width=”40px” required=”true”/>
    </params>
</plugin>
„””
import Domoticz
import json
import urllib.request
import urllib.parse

#variables
mode            = „driving”
directionsURL   = „https://maps.googleapis.com/maps/api/directions/json?origin=%s&destination=%s=&transit_mode=driving&departure_ti$
defaultPollingInterval = 120

def onStart():
    Domoticz.Debug(„onStart called”)

    if (len(Devices) == 0):
        Domoticz.Device(Name=”Travel time”, Unit=1, TypeName=”Custom”, Options={„Custom”: „1;minutes”}).Create()
        Domoticz.Device(Name=”Travel delay”, Unit=2, TypeName=”Custom”, Options={„Custom”: „1;%”}).Create()

    Domoticz.Heartbeat(pollingInterval())
    return True

def onHeartbeat():
    updateSensors()
    return True

def updateSensors():
    try:
        Domoticz.Debug(„getDelay called”)

        # Call Directions API
        url = directionsURL % (urllib.parse.quote(fromAddress()), urllib.parse.quote(toAddress()), apiKey())
        request = urllib.request.urlopen(url)
        data = json.loads(request.read().decode(’utf-8′))

        if „error_message” in data:
            Domoticz.Error(„Error retrieving travel times from Google Maps API: %s” % data[„error_message”])
            return

        # Get durations
        normal_duration = int(data[„routes”][0][„legs”][0][„duration”][„value”]/60.0)
        current_duration = int(data[„routes”][0][„legs”][0][„duration_in_traffic”][„value”]/60.0)
        delay = round((float)(current_duration – normal_duration)/normal_duration*100)

        # Update devices
        if 1 in Devices:
            Devices[1].Update(nValue = current_duration, sValue = str(current_duration))

        if 2 in Devices:
            Devices[2].Update(nValue = delay, sValue = str(delay))
    except:
        Domoticz.Error(„Error retrieving travel times from Google Maps API”)

####### GETTERS FOR PARAMETERS ########
def pollingInterval():
    try:
        return int(Parameters[„Mode6”])
    except:
        Domoticz.Error(„Error converting polling interval to integer, using %s seconds as polling interval” %defaultPollingInterval)
        return defaultPollingInterval

def fromAddress():
    return Parameters[„Mode1”]

def toAddress():
    return Parameters[„Mode2”]

def apiKey():
    return Parameters[„Mode5”]

############## NOT USED ##############
def onStop():
    return True

def onConnect(Status, Description):
    return True

def onMessage(Data, Status, Extra):
    return True

def onCommand(Unit, Command, Level, Hue):
    return True

def onNotification(Name, Subject, Text, Status, Priority, Sound, ImageFile):
    return True

def onDisconnect():
    return True

Zapisujemy na przykład w /home/pi/domoticz/plugins/TravelTimes pod nazwą plugin.py.

Później jeszcze nadanie odpowiednich praw:

sudo chmod 755 /home/pi/domoticz/plugins/TravelTimes/plugin.py

Konieczny jest restart Domoticz, aby pojawił się nowy dodatek. Gdy już będziemy go mieli, po prostu wpisujemy:
– Skąd (zasady identyczne jak przy wpisywaniu adresów w Google maps)
– Dokąd
– Klucz API Google
– Czas, co jaki Domoticz ma odpytywać Google

4 komentarze do “Czas drogi do pracy/domu w Domoticz”

  1. cześć,
    działa Ci ten serwis dalej? bo mi zabija domoticza całkiem.. nie potrafię zdebugować problemu. Po dodaniu sprzętu nie pojawia się nic w zakładce urządzenia (komunikat o dodaniu mam pomyślny – udało się, szukaj w urządzeniach), a po ok minucie cały domoticz wisi

    Odpowiedz
  2. Cześć. Przed chwilą sprawdziłem (miałem ten plugin wyłączony, bo przestał być przydatny) i działa bez problemu. Jak już Domoticz ruszy (a ma czasem problemy przy ładowaniu pluginów), to chodzi i poprawnie pokazuje czas podróży na podstawie Google.

    Odpowiedz
  3. Fakt, może tak teraz być. Na pewno można wygenerować konto bilingowe z jakimś pakietem danych darmowo na rok, później może się okazać, że ilość danych jest tak znikoma, że opłata będzie albo zerowa, albo znikoma.

    Odpowiedz

Dodaj komentarz