Hi,
In terms of the Token... this only last for 45 days. The script you made, will this ask for a new token every time it is run?
For some commands they require and extra "field/input"...
Like the Start Drive Command, this one requires a password as well
https://www.teslaapi.io/vehicles/commands
How do I incorporate this into the script?
I also made som changes to the script, for anyone that plans to do this, I can confirm this works:
PS: you must run the script once, so you can get your vehicle ID. Look in the logs and replace the 123 for CarID
In terms of the Token... this only last for 45 days. The script you made, will this ask for a new token every time it is run?
For some commands they require and extra "field/input"...
Like the Start Drive Command, this one requires a password as well
https://www.teslaapi.io/vehicles/commands
How do I incorporate this into the script?
I also made som changes to the script, for anyone that plans to do this, I can confirm this works:
PS: you must run the script once, so you can get your vehicle ID. Look in the logs and replace the 123 for CarID
Code:
-- Load modules
require('json')
require('ssl.https')
require('ltn12')
-- Set credentials for Tesla API
username = "abc" -- your email for tesla account
password = "123" -- your password for tesla account
password1 = "password" -- default do not change
client_id = "81527cff06843c8634fdc09e8ac0abefb46ac849f38fe1e431c2ef2106796384" -- default, do not change unless Tesla makes changes
client_secret = "c7257eb71a564034f9419ee651c7d0e5f7aa6bfbd18bafb5c5c033b093bb2fa3" -- default, do not change unless Tesla makes changes
function GetToken()
request_token_url = 'https://owner-api.teslamotors.com/oauth/token'
local response_body = {}
local request_body = "grant_type=" .. password1 .. "&client_id=" .. client_id .. "&client_secret=" .. client_secret .. "&email=" .. username .. "&password=" .. password
local body, code, hdrs, stat = ssl.https.request{
url = request_token_url;
method = "POST";
headers =
{
["Content-Type"] = "application/x-www-form-urlencoded";
["Content-Length"] = #request_body;
};
source = ltn12.source.string(request_body);
sink = ltn12.sink.table(response_body);
}
if code == 200 then
ret = table.concat(response_body)
ret = json.pdecode(ret)
return ret.access_token
end
end
-- Request token
if not API_Token then
API_Token = GetToken()
end
function RequestFromTesla(request)
request_url = 'https://owner-api.teslamotors.com/api/1/' .. request
local response_body = {}
local request_body = ""
local body, code, hdrs, stat = ssl.https.request{
url = request_url;
method = "GET";
headers =
{
["Content-Type"] = "application/json";
["Authorization"] = "Bearer " .. API_Token;
};
source = ltn12.source.string(request_body);
sink = ltn12.sink.table(response_body);
}
if code == 200 then
ret = table.concat(response_body)
ret = json.pdecode(ret)
return ret
else
API_Token = GetToken() -- request a new token
end
end
function WriteToTesla(request)
request_url = 'https://owner-api.teslamotors.com/api/1/' .. request
local response_body = {}
local request_body = ""
local body, code, hdrs, stat = ssl.https.request{
url = request_url;
method = "POST";
headers =
{
["Content-Type"] = "application/json";
["Authorization"] = "Bearer " .. API_Token;
};
source = ltn12.source.string(request_body);
sink = ltn12.sink.table(response_body);
}
if code == 200 then
ret = table.concat(response_body)
ret = json.pdecode(ret)
return ret
else
API_Token = GetToken() -- request a new token
end
end
-- Get products
products = RequestFromTesla('products')
log(products) -- Check here your Car ID
CarID = 123 -- run the script once, and look in the logs you will find a string called id_s this number is your vehicle ID, this should be replaced with the 123 in this field, remember to add "", then run script again, and you will get it to work!
-- Get onboarding data
onboarding_data = RequestFromTesla('users/onboarding_data')
log(onboarding_data)
-- unlock car
result = WriteToTesla('vehicles/' .. CarID .. '/command/door_unlock')
log(result)
BR,
Mr.D
Mr.D