Fahrzeit

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
    })

Irgendwie schaffe ich es nicht das virtuelle device anzuhängen.

bitte in datei verkehrsinfo.vib kopieren:

{“name”:“Verkehrsinfo”,“type”:“virtual_device”,“properties”:{“deviceIcon”:237,“currentIcon”:“238”,“log”:"",“logTemp”:"",“mainLoop”:"",“ui.Direction.value”:“A2B”,“ui.Distance.value”:“20”,“ui.Time.value”:“26”,“ui.curTime.value”:“07:24:43”,“visible”:“true”,“rows”:[{“type”:“label”,“elements”:[{“id”:1,“lua”:false,“waitForResponse”:false,“caption”:“Richtung”,“name”:“Direction”,“favourite”:false,“main”:false}]},{“type”:“label”,“elements”:[{“id”:2,“lua”:false,“waitForResponse”:false,“caption”:“Zeit”,“name”:“curTime”,“favourite”:false,“main”:false}]},{“type”:“label”,“elements”:[{“id”:3,“lua”:false,“waitForResponse”:false,“caption”:“Distanz”,“name”:“Distance”,“favourite”:false,“main”:false}]},{“type”:“label”,“elements”:[{“id”:4,“lua”:false,“waitForResponse”:false,“caption”:“Dauer”,“name”:“Time”,“favourite”:false,“main”:false}]},{“type”:“button”,“elements”:[{“id”:5,“lua”:true,“waitForResponse”:false,“caption”:“Home to Work”,“name”:“A2B”,“empty”:false,“msg”:“fibaro:setGlobal(“GoogleMaps”, “A2B”);”,“buttonIcon”:238,“favourite”:false,“main”:true},{“id”:6,“lua”:true,“waitForResponse”:false,“caption”:“Work to Home”,“name”:“B2A”,“empty”:false,“msg”:“fibaro:setGlobal(“GoogleMaps”, “B2A”);”,“buttonIcon”:237,“favourite”:false,“main”:false}]}]},“actions”:{“pressButton”:1,“setSlider”:2,“setProperty”:2}}

Mach ein zip draus und lade es dann hoch.

Hoggle,

Danke.

Hier das Device

Super! Danke Dir für die Info.

Hast du es ausprobiert. Angeblich funktioniert die Lokalisierung im HC2 nicht so besonders. Ich würde gerne meinen Carport steuern. Also Licht an, Tor auf, Tor zu, Licht aus, Eingangstür frei schalten.

Bin gerade dabei einzelne Scenen manuell zu starten. Licht funktioniert schon.

Gerhard,

verstehe die Frage: “Hast du es ausprobiert” nicht.
1:1 Ersatz für Lokalisierung ist die Lösung sicher nicht.
In der Regel sollte die Genauigkeit relativ genau sein da die Verkehrslage berücksichtigt wird, aber Tür entsperren würde ich sicher nicht damit.

Falls du Android hast kannst dir auch eine Szene erstellen welche die GoogleMaps Variable auf B2A ändert.
Diese Szene kannst mit dem “Scene” Widget starten welches Du auf den Homescreen legen kannst.

Mein Fehler. Ich dachte du nutzt die Lokalisierung im HC2, aber ist ja ein Trigger der ausschließlich GoogleMaps -Informationen nutzt.