tesla
This library provides a wrapper around the API to easily query and command the a Tesla Model S remotely in Go.
Library Documentation
https://godoc.org/github.com/jsgoecke/tesla
API Documentation
View Tesla JSON API Documentation
This is unofficial documentation of the Tesla JSON API used by the iOS and Android apps. The API provides functionality to monitor and control the Model S (and future Tesla vehicles) remotely. The project provides both a documention of the API and a Go library for accessing it.
Installation
go get github.com/jsgoecke/tesla
Tokens
You may get your tokens to use as client_id and client_secret here.
Usage
Here's an example (more in the /examples project directory):
func main() {
client, err := tesla.NewClient(
&tesla.Auth{
ClientID: os.Getenv("TESLA_CLIENT_ID"),
ClientSecret: os.Getenv("TESLA_CLIENT_SECRET"),
Email: os.Getenv("TESLA_USERNAME"),
Password: os.Getenv("TESLA_PASSWORD"),
})
if err != nil {
panic(err)
}
vehicles, err := client.Vehicles()
if err != nil {
panic(err)
}
vehicle := vehicles[0]
status, err := vehicle.MobileEnabled()
if err != nil {
panic(err)
}
fmt.Println(status)
fmt.Println(vehicle.HonkHorn())
// Autopark
// Use with care, as this will move your car
vehicle.AutoparkForward()
vehicle.AutoparkReverse()
// Use with care, as this will move your car
// Stream vehicle events
eventChan, errChan, err := vehicle.Stream()
if err != nil {
fmt.Println(err)
return
} else {
for {
select {
case event := <-eventChan:
eventJSON, _ := json.Marshal(event)
fmt.Println(string(eventJSON))
case err = <-errChan:
fmt.Println(err)
if err.Error() == "HTTP stream closed" {
fmt.Println("Reconnecting!")
eventChan, errChan, err := vehicle.Stream()
if err != nil {
fmt.Println(err)
return
}
}
}
}
}
}
Examples
Credits
Thank you to Tim Dorr who did the heavy lifting to document the Tesla API and also created the model-s-api Ruby Gem.
Current Issues
Right now Tesla appears to have broken the Autopark and Homelink commands of their API in a recent cloud API update. I have started a thread here and will update as information becomes available. And fix if/when the community discovers the fix. Keep an eye on these two issues for resolution:
Copyright & License
Copyright (c) 2016-Present Jason Goecke. Released under the terms of the MIT license. See LICENSE for details.