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:
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
cześć,
OdpowiedzUsuń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
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.
UsuńCzy to jeszcze działa ? Czy API google nie jest już płatne ?
OdpowiedzUsuń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.
Usuń