Wollte nur eben mal vermelden, dass ich meinen Tesla jetzt über die aktuelle API via cURL innerhalb eines simplen PHP-Scriptes ansprechen kann… hat schon was, den Tesla über die bash-shell hupen zu lassen
Aktuelle API-Dokumentation:
docs.timdorr.apiary.io/#
Allerdings bin ich nicht in Besitz einer client_id und client_secret, aber es gibt einen Weg: Man besorge sich token und vehicle_id über die APP Remote S und steigt dann gleich mit einem gültigen Token in die Geschichte ein.
(erreichbar über Anklicken des Logos oben in der Mitte)
Mein Code in PHP:
<?php
class SimpleTeslaAPI {
// Quick&Dirty Tesla API - Implementierung in PHP zum Nachvollziehen und weiterprogrammieren,
// 9.1.2016 (V1.1)
// von [email protected]
var $token;
var $vehicleID;
// Implementierung
function SimpleTeslaAPI() {
// !!!!!!!!! Hier Token und vehicle_id einsetzen !!!!!!!!!
$this->token = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
$this->vehicleID = "xxxxxxxxxx";
}
private function curlexec($command,$mode="GET",$params=array()) {
$url = 'https://owner-api.teslamotors.com/';
$ch = curl_init();
curl_setopt($ch,CURLOPT_SSL_VERIFYPEER, false);
curl_setopt($ch,CURLOPT_RETURNTRANSFER, true);
$params['vehicle_id']=$this->vehicleID;
if ( $mode == "POST" ) {
if ( $command == "oauth/token" ) {
curl_setopt($ch,CURLOPT_URL, $url.$command);
} else {
if ( $command == "wake_up" ) {
curl_setopt($ch,CURLOPT_URL, $url."api/1/vehicles/".$this->vehicleID."/wake_up");
} else {
curl_setopt($ch,CURLOPT_URL, $url."api/1/vehicles/".$this->vehicleID."/command/".$command);
}
curl_setopt($ch,CURLOPT_HTTPHEADER, array("Authorization:Bearer ".$this->token) );
}
curl_setopt($ch,CURLOPT_POST, 1);
curl_setopt($ch,CURLOPT_POSTFIELDS, $params);
} else {
if ( $command == "vehicles" ) {
curl_setopt($ch,CURLOPT_URL, $url."api/1/vehicles");
} else {
curl_setopt($ch,CURLOPT_URL, $url."api/1/vehicles/".$this->vehicleID."/data_request/".$command."?".join("&",$params));
}
curl_setopt($ch,CURLOPT_HTTPHEADER, array("Authorization:Bearer ".$this->token) );
}
$result = curl_exec($ch);
$rc=curl_getinfo($ch,CURLINFO_HTTP_CODE);
curl_close($ch);
return json_decode($result);
}
//Grundfunktionen
function vehicles() {
return $this->curlexec("vehicles","GET");
}
function wake_up() {
return $this->curlexec("wake_up","POST");
}
//data-requests
function charge_state() {
return $this->curlexec("charge_state","GET");
}
function climate_state() {
return $this->curlexec("climate_state","GET");
}
function drive_state() {
return $this->curlexec("drive_state","GET");
}
function gui_settings() {
return $this->curlexec("gui_settings","GET");
}
function vehicle_state() {
return $this->curlexec("vehicle_state","GET");
}
// commands
function charge_port_door_open() {
return $this->curlexec("charge_port_door_open","POST");
}
function charge_standard() {
return $this->curlexec("charge_standard","POST");
}
function charge_max_range() {
return $this->curlexec("charge_max_range","POST");
}
function set_charge_limit($percent) {
return $this->curlexec("set_charge_limit","POST",array("percent" => $percent ));
}
function charge_start() {
return $this->curlexec("charge_start","POST");
}
function charge_stop() {
return $this->curlexec("charge_stop","POST");
}
function flash_lights() {
return $this->curlexec("flash_lights","POST");
}
function honk_horn() {
return $this->curlexec("honk_horn","POST");
}
function door_unlock() {
return $this->curlexec("door_unlock","POST");
}
function door_lock() {
return $this->curlexec("door_lock","POST");
}
function set_temps($tempDriver, $tempPassenger) {
return $this->curlexec("set_temps","POST",array("driver_temp" => $tempDriver,"passenger_temp" => $tempPassenger ));
}
function auto_conditioning_start() {
return $this->curlexec("auto_conditioning_start","POST");
}
function auto_conditioning_stop() {
return $this->curlexec("auto_conditioning_stop","POST");
}
function sun_roof_control_state($state) {
return $this->curlexec("sun_roof_control","POST",array("state" => $state ));
}
function sun_roof_control_percent($percent) {
return $this->curlexec("sun_roof_control","POST",array("state" => "move", "percent" => $percent ));
}
function remote_start_drive($password) {
return $this->curlexec("remote_start_drive","POST",array("password" => $password ));
}
// deprecated
function trunk_open() {
return $this->curlexec("trunk_open","POST",array("which_trunk" => "rear" ));
}
}
// Main
$tesla = new SimpleTeslaAPI();
//wenns hupt, hat es funktioniert ;)
print_r($tesla->honk_horn());
// Beispiel Innenraumtemperatur
print_r($tesla->set_temps(22,22));