Traffic with Google Maps in Domoticz
Moderator: leecollings
-
- Posts: 24
- Joined: Thursday 07 January 2016 7:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
I adjusted the script just like yours and this is the output..
2016-05-04 13:30:00.418 LUA: {
"geocoded_waypoints" : [ {}, {} ],
"routes" : [],
"status" : "ZERO_RESULTS"
}
2016-05-04 13:30:00.418 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_google.lua: /home/pi/domoticz/scripts/lua/script_time_google.lua:56: attempt to index field '?' (a nil value)
2016-05-04 13:30:00.418 LUA: {
"geocoded_waypoints" : [ {}, {} ],
"routes" : [],
"status" : "ZERO_RESULTS"
}
2016-05-04 13:30:00.418 Error: EventSystem: in /home/pi/domoticz/scripts/lua/script_time_google.lua: /home/pi/domoticz/scripts/lua/script_time_google.lua:56: attempt to index field '?' (a nil value)
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
what if you write the exact same url into a browser?
Try to curl the url you use in the browser instead the one mixed up with variables
Try to curl the url you use in the browser instead the one mixed up with variables
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 24
- Joined: Thursday 07 January 2016 7:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
Curl gives the exact same result like in a normal browser.
pi@raspberrypi ~/domoticz/scripts/lua $ curl "https://maps.googleapis.com/maps/api/di ... le-API-Key"
{
"geocoded_waypoints" : [
{
"geocoder_status" : "OK",
"place_id" : "EjhWYW4gTGVldXdlbmhvZWtsYWFuIDUzLTU1LCA0OTA0IEtQIE9vc3RlcmhvdXQsIE5lZGVybGFuZA",
"types" : [ "street_address" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJ-zDCwLhvxkcREbu0NLbbhRI",
"types" : [ "street_address" ]
}
],
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 52.1154437,
"lng" : 5.1058217
},
"southwest" : {
"lat" : 51.6188531,
"lng" : 4.8544003
}
},
"copyrights" : "Map data ©2016 Google",
"legs" : [
{
"distance" : {
"text" : "65.0 km",
"value" : 65016
},
"duration" : {
"text" : "43 mins",
"value" : 2579
},
"end_address" : "Atoomweg 60, 3542 AB Utrecht, Netherlands",
"end_location" : {
"lat" : 52.1106402,
"lng" : 5.062270199999999
},
"start_address" : "Van Leeuwenhoeklaan 53-55, 4904 KP Oosterhout, Netherlands",
"start_location" : {
"lat" : 51.6200264,
"lng" : 4.8544003
},
pi@raspberrypi ~/domoticz/scripts/lua $ curl "https://maps.googleapis.com/maps/api/di ... le-API-Key"
{
"geocoded_waypoints" : [
{
"geocoder_status" : "OK",
"place_id" : "EjhWYW4gTGVldXdlbmhvZWtsYWFuIDUzLTU1LCA0OTA0IEtQIE9vc3RlcmhvdXQsIE5lZGVybGFuZA",
"types" : [ "street_address" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJ-zDCwLhvxkcREbu0NLbbhRI",
"types" : [ "street_address" ]
}
],
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 52.1154437,
"lng" : 5.1058217
},
"southwest" : {
"lat" : 51.6188531,
"lng" : 4.8544003
}
},
"copyrights" : "Map data ©2016 Google",
"legs" : [
{
"distance" : {
"text" : "65.0 km",
"value" : 65016
},
"duration" : {
"text" : "43 mins",
"value" : 2579
},
"end_address" : "Atoomweg 60, 3542 AB Utrecht, Netherlands",
"end_location" : {
"lat" : 52.1106402,
"lng" : 5.062270199999999
},
"start_address" : "Van Leeuwenhoeklaan 53-55, 4904 KP Oosterhout, Netherlands",
"start_location" : {
"lat" : 51.6200264,
"lng" : 4.8544003
},
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
I changed my lat/lon with yours and base on the miniscript published before, this is the result in the log:
In the first row you can see the three result obtained from
Code: Select all
LUA: distanza 65.0 km distanzan 65.016 duration 43 mins
LUA: {
"geocoded_waypoints" : [
{
"geocoder_status" : "OK",
"place_id" : "EjhWYW4gTGVldXdlbmhvZWtsYWFuIDUzLTU1LCA0OTA0IEtQIE9vc3RlcmhvdXQsIE5lZGVybGFuZA",
"types" : [ "street_address" ]
},
{
"geocoder_status" : "OK",
"place_id" : "ChIJ-zDCwLhvxkcREbu0NLbbhRI",
"types" : [ "street_address" ]
}
],
"routes" : [
{
"bounds" : {
"northeast" : {
"lat" : 52.1154437,
"lng" : 5.1058217
},
"southwest" : {
"lat" : 51.6188531,
"lng" : 4.8544003
}
},
"copyrights" : "Map data ©2016 Google",
"legs" : [
{
"distance" : {
"text" : "65.0 km",
"value" : 65016
},
"duration" : {
"text" : "43 mins",
"value" : 2579
},
"duration_in_traffic" : {
"text" : "43 mins",
"value" : 2581
},
"end_address" : "Atoomweg 60, 3542 AB Utrecht, Netherlands",
"end_location" : {
"lat" : 52.1106402,
"lng" : 5.062270199999999
},
"start_address" : "Van Leeuwenhoeklaan 53-55, 4904 KP Oosterhout, Netherlands",
"start_location" : {
"lat" : 51.6200264,
"lng" : 4.8544003
},
"steps" : [
{
"distance" : {
"text" : "0.2 km",
"value" : 213
},
"duration" : {
"text" : "1 min",
"value" : 33
},
"end_location" : {
"lat" : 51.6188929,
"lng" : 4.856876199999999
},
Code: Select all
distancet = gmaps.routes[1].legs[1].distance.text
distance = gmaps.routes[1].legs[1].distance.value/1000
duration = gmaps.routes[1].legs[1].duration_in_traffic.text
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 24
- Joined: Thursday 07 January 2016 7:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
Now i am really lost. I will start from scratch again later en will let you know..
Thanks for your help so far !
Thanks for your help so far !
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
try to share all the script (without personal information)...
Maybe it can be helpful
Maybe it can be helpful
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 24
- Joined: Thursday 07 January 2016 7:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
Oke here is the code i copied
Code: Select all
---------------------------------
--Script to calculate duration and distance between two points using Google Maps
--Author : woody4165 based on Neutrino Traffic with Waze, updated by G3rard
--Date : 9 April 2016
---------------------------------
commandArray={}
time = os.date("*t")
day = tonumber(os.date("%w"))
--idx of devices for capturing the travel minutes in both direction
idxtraffic='668'
idxroute='669'
--usual traveltime (mins)
usualtimehomework = 45
usualtimeworkhome = 45
-- Coordinates starting point
fromx="4.85461"
fromy="51.62021"
-- Coordinates destination point
tox="5.06212"
toy="52.11058"
--Google Api Key
key='xxxxxxxxxxxxxxxxxxxxx'
--determine workday (Mo-Fri)
if (day > 0 and day < 6) then
week=true; weekend=false
else
week=false; weekend=true
end
--determine time (6:00-9:00, 15:00-18:00)
if ((time.hour > 5 and time.hour < 14) or (time.hour == 9 and time.min < 1)) then
mattina=true; sera=false
elseif ((time.hour > 14 and time.hour < 18) or (time.hour == 19 and time.min < 1)) then
mattina=false; sera=true
else
mattina=false; sera=false
end
--calculate traveltime
function traveltime(fromx,fromy,tox,toy)
--import JSON.lua library
json = (loadfile "/home/pi/domoticz/scripts/lua/JSON.lua")()
-- get data from Google Maps and decode it in gmaps
local jsondata = assert(io.popen('curl "https://maps.googleapis.com/maps/api/directions/json?origin='..fromx..','..fromy..'&destination='..tox..','..toy..'&departure_time=now&key='..key..'"'))
local jsondevices = jsondata:read('*all')
jsondata:close()
local gmaps = json:decode(jsondevices)
print(jsondevices)
-- Read from the data table, and extract duration and distance in value. Divide distance by 1000 and duration_in_traffic by 60
distancet = gmaps.routes[1].legs[1].distance.text
distance = gmaps.routes[1].legs[1].distance.value/1000
duration = gmaps.routes[1].legs[1].duration_in_traffic.value/60
summary = gmaps.routes[1].summary
print("Distance "..distance.." distancet "..distancet.." duration "..duration)
-- mins round the duration
mins=math.ceil(duration)
return mins
end
--weekday (Mo-Fri) and time between 7:00-9:00
if (week and mattina) then
--every 10 minutes
if((time.min % 10)==0) then
traffic=traveltime(fromx,fromy,tox,toy)
message=tostring(traffic)..'min per andare in ufficio alle '..("%02d:%02d"):format(time.hour, time.min)..' percorso '..tostring(summary)
print(message)
--send message if traveltime is longer than usual
if(traffic > usualtimehomework) then
os.execute('curl --data chat_id=xxxxxxxx --data-urlencode "text='..message..'" "https://api.telegram.org/botxxxxxxxxxxxxx/sendMessage" ')
-- commandArray['SendNotification']=message
end
--return a text to the device (eg. 12 mins)
commandArray[1]={['UpdateDevice'] =idxtraffic..'|0|' .. tostring(traffic)}
commandArray[2]={['UpdateDevice'] =idxroute..'|0|' .. tostring(message)}
end
--weekday (Mo-Thu) and time between 16:00-19:00
elseif (week and sera) then
--every 10 minutes
if((time.min % 10)==0) then
traffic=traveltime(tox,toy,fromx,fromy)
message=tostring(traffic)..'min per andare a casa alle '..("%02d:%02d"):format(time.hour, time.min)..' percorso '..tostring(summary)
print(message)
--send message if traveltime is longer than usual
-- if(traffic > usualtimeworkhome) then
-- os.execute('curl --data chat_id=xxxxxx --data-urlencode "text='..message..'" "https://api.telegram.org/botxxxxxxxxx/sendMessage" ')
-- commandArray['SendNotification']=message
-- end
--return a text to the device (eg. 12 mins)
commandArray[1]={['UpdateDevice'] =idxtraffic..'|0|' .. tostring(traffic)}
commandArray[2]={['UpdateDevice'] =idxroute..'|0|' .. tostring(message)}
end
else
-- set device to 0 to prevent device get the last value after working hour
zero=0
commandArray[1]={['UpdateDevice'] =idxtraffic..'|0|' .. tostring(zero)}
commandArray[2]={['UpdateDevice'] =idxroute..'|0|' .. tostring(zero)}
end
return commandArray
-
- Posts: 24
- Joined: Thursday 07 January 2016 7:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
I think i found something.. When i replace the variables ..fromx..','..fromy.. and ..tox..','..toy.. it works....
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
Well done!
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 267
- Joined: Tuesday 14 January 2014 14:50
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
@Bran2000 - I'm stuck at the point you were just before this. Can you let me know the new JSON.lua that you copied to make it work for you please?bran2000 wrote:ok thanks i copied a new JSON.lua and now it seems to work, my switch is working.
the home-work switch is working it indicates a number. Sure it will be great with a graph, to bad i have to wait a new stable version.
i'll wait the afternoon to check the work-home is working
Running Domoticz on Pi3 with RFXtrx433e. LWRF power sockets and dimmer switches. Integrated my existing wirefree alarm PIRs and door contacts with domoticz. Geofencing with Pilot. Harmony Hub. Tado for Heating. Now playing with mysensors.
-
- Posts: 60
- Joined: Saturday 20 June 2015 10:16
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
hi,
i don't remember which one i used but it's definitely one of those
just download the JSON.lua file :
http://regex.info/blog/lua/json
if it's not working, try this one with the wiki :
https://www.domoticz.com/wiki/Lua_-_json.lua
i don't remember which one i used but it's definitely one of those
just download the JSON.lua file :
http://regex.info/blog/lua/json
if it's not working, try this one with the wiki :
https://www.domoticz.com/wiki/Lua_-_json.lua
-
- Posts: 267
- Joined: Tuesday 14 January 2014 14:50
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
Ok, thanks for that. I can see the script is running in the log. Suppose I now need to wait until Monday morning to see if it works. Going to be a long weekend
Running Domoticz on Pi3 with RFXtrx433e. LWRF power sockets and dimmer switches. Integrated my existing wirefree alarm PIRs and door contacts with domoticz. Geofencing with Pilot. Harmony Hub. Tado for Heating. Now playing with mysensors.
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
Since here is determined if it's week or weekend
You can change here from week to weekend (and then revert it back) to check it right now or tomorrow
Just look for
and
Code: Select all
--determine workday (Mo-Fri)
if (day > 0 and day < 6) then
week=true; weekend=false
else
week=false; weekend=true
end
Just look for
Code: Select all
if (week and mattina) then
Code: Select all
if (week and sera) then
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 267
- Joined: Tuesday 14 January 2014 14:50
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
I did this and it's all working. Thank you very much.woody4165 wrote:Since here is determined if it's week or weekend
You can change here from week to weekend (and then revert it back) to check it right now or tomorrowCode: Select all
--determine workday (Mo-Fri) if (day > 0 and day < 6) then week=true; weekend=false else week=false; weekend=true end
Just look for
andCode: Select all
if (week and mattina) then
Code: Select all
if (week and sera) then
Running Domoticz on Pi3 with RFXtrx433e. LWRF power sockets and dimmer switches. Integrated my existing wirefree alarm PIRs and door contacts with domoticz. Geofencing with Pilot. Harmony Hub. Tado for Heating. Now playing with mysensors.
-
- Posts: 60
- Joined: Sunday 20 September 2015 17:37
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2.3072
- Location: Sweden
- Contact:
Re: Traffic with Google Maps in Domoticz
Ill have a issue, the lua script dont run at all. Ive putted it in the folder with the other lua that ill have. And those are working, why does not the new one?
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
I have the script in the Events inside the Domoticz web interface (Setup->More Options->Events).
I never tried from lua folder.
In any case, have you checked file permissions?
I never tried from lua folder.
In any case, have you checked file permissions?
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 60
- Joined: Sunday 20 September 2015 17:37
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 2.3072
- Location: Sweden
- Contact:
Re: Traffic with Google Maps in Domoticz
Did not know that you could put lua in there now. But it aint show anything in the log file even if ill put it in events.
-
- Posts: 476
- Joined: Monday 14 March 2016 13:55
- Target OS: Linux
- Domoticz version: beta
- Location: Rome, Italy
- Contact:
Re: Traffic with Google Maps in Domoticz
If the script runs inside domoticz, should say the event has been triggered every minute, if you chose as event type Time.
If it's outside, I think there should be something to modify, probably.
In any case, as you can see inside the script it will update the devices only during some hours...
If it's outside, I think there should be something to modify, probably.
In any case, as you can see inside the script it will update the devices only during some hours...
Cubietruck - Linux cubietruck 4.13.16 (Debian GNU/Linux 8 (jessie)) + Domoticz + RFLink, Xiaomi Gateway, Owl USB, Yeelight Color and B/W, ESP8266, Broadlink RM2, Netatmo Thermostat
-
- Posts: 24
- Joined: Thursday 07 January 2016 7:49
- Target OS: Raspberry Pi / ODroid
- Domoticz version:
- Contact:
Re: Traffic with Google Maps in Domoticz
Perhaps an idea is to integrate presence detection in the following way ?
If athome then stop sending the notifications workhome
if atwork then stop sending the notifications homework.
If athome then stop sending the notifications workhome
if atwork then stop sending the notifications homework.
-
- Posts: 24
- Joined: Monday 27 April 2015 20:33
- Target OS: Raspberry Pi / ODroid
- Domoticz version: 3.8258
- Location: Netherlands
- Contact:
Re: Traffic with Google Maps in Domoticz
Thanks for this script! I implemted it twice while I want to measure several locations over time.
I run the script every 5 minutes and when I look in the log I see the variables overwritten each 5 minutes with the same value.
It does not harm but if I want to see the status of 12h ago I have to dig through >10 pages of logging.
I want to improve the writing of the logging by first doing a check what the previous value was and if there is a difference than write out the new values. Normally I read and write values and status via commandArray['DeviceName']
But the following part of code is new to me:
I understand that this is an easy way of writing values but is there also a construction for reading the current value based on the idx??
I run the script every 5 minutes and when I look in the log I see the variables overwritten each 5 minutes with the same value.
It does not harm but if I want to see the status of 12h ago I have to dig through >10 pages of logging.
I want to improve the writing of the logging by first doing a check what the previous value was and if there is a difference than write out the new values. Normally I read and write values and status via commandArray['DeviceName']
But the following part of code is new to me:
Code: Select all
commandArray[1]={['UpdateDevice'] =idxtraffic..'|0|' .. tostring(traffic)}
Who is online
Users browsing this forum: No registered users and 1 guest