Hallo,
ich möchte eine Lösung für die Fahrzeit von A nach B mit Hilfe eines Skriptes welches die Google Maps API verwendet nicht vorenthalten.
Ist ein Prove of Concept.
Anwendungsmöglichkeiten gibt es sicher viele.
z.B. Zeitgesteuert in der Früh Fahrzeit prüfen un RGB Licht entsprechend einstellen.
Oder wenn man in der Firma wegfährt wird zeitgerecht die Heizung hochgefahren.
z.zt. kann man die Abfragen über das virtuelle Device durchführen, aber das kann ma leicht Zeit oder Sensor gesteuert machen.
Viel Spass.
Variable “GoogleMaps” anlegen
Szene <NAME FREI DEFINIERBAR" anlegen.
Virtuelle Device ID in Szene ändern. (Verkehrsinfo)
API Key von Google in Szene eintragen. gibts auf: https://developers.google.com/maps/documentation/directions/intro#Introduction
Aus maps.google.com Startposition und Zielposition in Szene kopieren: (fetter Teil)
https://www.google.at/maps/place/Stephansplatz+1,+1010+Wien/@48.2087105,16.3704659,17z/
--[[
%% properties
%% events
%% globals
GoogleMaps
--]]
local vDevID = XXX -- change to your device ID
local key ='YOUR KEY' --enter your APP Key
local locationA = 'YOUR LOCATION'
local locationB = 'YOUR LOCATION'
local dir = fibaro:getGlobalValue("GoogleMaps")
if dir == 'A2B' then
origin = locationA
destination = locationB
elseif dir == 'B2A' then
origin =locationB
destination =locationA
else
fibaro:abort()
end
local http = net.HTTPClient()
fibaro:debug("TRIGGER="..dir)
fibaro:setGlobal("GoogleMaps", "");
http:request('https://maps.googleapis.com/maps/api/directions/json?origin=' ..origin ..'&destination=' ..destination ..'&departure_time=now&key=' ..key, {
success = function(resp)
if resp.status == 200 then
--fibaro:debug(resp.data) -- zum debugen einbinden
local a1 = string.find(resp.data, 'duration_in_traffic',1)
a1 = string.find(resp.data, 'value',a1)
a1 = string.find(resp.data, ':',a1+1)
local a2 = string.find(resp.data, '}',a1)-1
local b =math.ceil(tonumber(string.sub(resp.data, a1+1,a2))/60)
fibaro:debug(b ..' Minuten')
fibaro:call(vDevID, "setProperty", "ui.Time.value", b)
fibaro:call(vDevID, "setProperty", "ui.curTime.value", os.date("%H:%M:%S"))
fibaro:call(vDevID, "setProperty", "ui.Direction.value", dir)
local a1 = string.find(resp.data, 'distance',1)
a1 = string.find(resp.data, 'value',a1)
a1 = string.find(resp.data, ':',a1+1)
local a2 = string.find(resp.data, '}',a1)-1
local b =math.ceil(tonumber(string.sub(resp.data, a1+1,a2))/1000)
fibaro:debug(b ..' km')
fibaro:call(vDevID, "setProperty", "ui.Distance.value", b)
fibaro:call(vDevID, "setProperty", "ui.curTime.value", os.date("%H:%M:%S"))
fibaro:call(vDevID, "setProperty", "ui.Direction.value", dir)
else
fibaro:debug(resp.status)
fibaro:call(vDevID, "setProperty", "ui.Time.label", 'NOT RECEIVED')
fibaro:call(vDevID, "setProperty", "ui.Distance.value", 'NOT RECEIVED')
fibaro:call(vDevID, "setProperty", "ui.curTime.value", os.date("%H:%M:%S"))
fibaro:call(vDevID, "setProperty", "ui.Direction.value", dir)
end
end
})