Skip to content

Commit f607dde

Browse files
authored
[tesla] Adapt binding to changed API from Tesla backend (openhab#14922)
* Adapt binding to changed API from Tesla backend Signed-off-by: Kai Kreuzer <[email protected]>
1 parent fb16e90 commit f607dde

File tree

6 files changed

+228
-306
lines changed

6 files changed

+228
-306
lines changed

bundles/org.openhab.binding.tesla/README.md

+59-75
Original file line numberDiff line numberDiff line change
@@ -205,64 +205,64 @@ Bridge tesla:account:myaccount "My Tesla Account" [ refreshToken="xxxx" ] {
205205
demo.items:
206206

207207
```java
208-
DateTime TeslaEventstamp {channel="model3:myaccount:mycar:eventstamp"}
209-
String TeslaState {channel="model3:myaccount:mycar:state"}
210-
Number TeslaSpeed {channel="model3:myaccount:mycar:speed"}
211-
String TeslaShiftState {channel="model3:myaccount:mycar:shiftstate"}
212-
Number TeslaOdometer {channel="model3:myaccount:mycar:odometer"}
213-
Number TeslaRange {channel="model3:myaccount:mycar:range"}
214-
215-
Number TeslaBatteryLevel {channel="model3:myaccount:mycar:batterylevel"}
216-
Number TeslaPower {channel="model3:myaccount:mycar:power"}
217-
Number TeslaBatteryCurrent {channel="model3:myaccount:mycar:batterycurrent"}
218-
Number TeslaBatteryRange {channel="model3:myaccount:mycar:batteryrange"}
219-
Number TeslaEstBatteryRange {channel="model3:myaccount:mycar:estimatedbatteryrange"}
220-
Number TeslaIdealBatteryRange {channel="model3:myaccount:mycar:idealbatteryrange"}
221-
Number TeslaUsableBatteryLevel {channel="model3:myaccount:mycar:usablebatterylevel"}
222-
Switch TeslaPreconditioning {channel="model3:myaccount:mycar:preconditioning"}
223-
224-
Switch TeslaCharge {channel="model3:myaccount:mycar:charge"}
225-
Switch TeslaChargeToMax {channel="model3:myaccount:mycar:chargetomax"}
226-
227-
Dimmer TeslaChargeLimit {channel="model3:myaccount:mycar:chargelimit"}
228-
Number TeslaChargeRate {channel="model3:myaccount:mycar:chargerate"}
229-
String TeslaChargingState {channel="model3:myaccount:mycar:chargingstate"}
230-
Number TeslaChargerPower {channel="model3:myaccount:mycar:chargerpower"}
231-
Number TeslaTimeToFullCharge {channel="model3:myaccount:mycar:timetofullcharge"}
232-
Number TeslaMaxCharges {channel="model3:myaccount:mycar:maxcharges"}
233-
234-
Number TeslaChargerVoltage {channel="model3:myaccount:mycar:chargervoltage"}
235-
Number TeslaChargerPower {channel="model3:myaccount:mycar:chargerpower"}
236-
Number TeslaChargerCurrent {channel="model3:myaccount:mycar:chargercurrent"}
237-
238-
DateTime TeslaScheduledChargingStart {channel="model3:myaccount:mycar:scheduledchargingstart"}
239-
Dimmer TeslaSoC {channel="model3:myaccount:mycar:soc"}
240-
241-
Switch TeslaDoorLock {channel="model3:myaccount:mycar:doorlock"}
242-
Switch TeslaHorn {channel="model3:myaccount:mycar:honkhorn"}
243-
Switch TeslaStart {channel="model3:myaccount:mycar:remotestart"}
244-
Switch TeslaSentry {channel="model3:myaccount:mycar:sentrymode"}
245-
Switch TeslaLights {channel="model3:myaccount:mycar:flashlights"}
246-
Switch TeslaValet {channel="model3:myaccount:mycar:valetmode"}
247-
248-
Switch TeslaWakeup {channel="model3:myaccount:mycar:wakeup"}
249-
250-
Switch TeslaBatteryHeater {channel="model3:myaccount:mycar:batteryheater"}
251-
Switch TeslaFrontDefrost {channel="model3:myaccount:mycar:frontdefroster"}
252-
Switch TeslaRearDefrost {channel="model3:myaccount:mycar:reardefroster"}
253-
Switch TeslaLeftSeatHeater {channel="model3:myaccount:mycar:leftseatheater"}
254-
Switch TeslaRightSeatHeater {channel="model3:myaccount:mycar:rightseatheater"}
255-
256-
Switch TeslaHomelink {channel="model3:myaccount:mycar:homelink"}
257-
Location TeslaLocation {channel="model3:myaccount:mycar:location"}
258-
Number TeslaHeading {channel="model3:myaccount:mycar:heading"}
259-
DateTime TeslaLocationTime {channel="model3:myaccount:mycar:gpstimestamp"}
260-
261-
Switch TeslaAutoconditioning {channel="model3:myaccount:mycar:autoconditioning"}
262-
Number:Temperature TeslaTemperature {channel="model3:myaccount:mycar:temperature"}
263-
Number:Temperature TeslaTemperatureCombined {channel="model3:myaccount:mycar:combinedtemp"}
264-
Number:Temperature TeslaInsideTemperature {channel="model3:myaccount:mycar:insidetemp"}
265-
Number:Temperature TeslaOutsideTemperature {channel="model3:myaccount:mycar:outsidetemp"}
208+
DateTime TeslaEventstamp {channel="account:model3:myaccount:mycar:eventstamp"}
209+
String TeslaState {channel="account:model3:myaccount:mycar:state"}
210+
Number TeslaSpeed {channel="account:model3:myaccount:mycar:speed"}
211+
String TeslaShiftState {channel="account:model3:myaccount:mycar:shiftstate"}
212+
Number TeslaOdometer {channel="account:model3:myaccount:mycar:odometer"}
213+
Number TeslaRange {channel="account:model3:myaccount:mycar:range"}
214+
215+
Number TeslaBatteryLevel {channel="account:model3:myaccount:mycar:batterylevel"}
216+
Number TeslaPower {channel="account:model3:myaccount:mycar:power"}
217+
Number TeslaBatteryCurrent {channel="account:model3:myaccount:mycar:batterycurrent"}
218+
Number TeslaBatteryRange {channel="account:model3:myaccount:mycar:batteryrange"}
219+
Number TeslaEstBatteryRange {channel="account:model3:myaccount:mycar:estimatedbatteryrange"}
220+
Number TeslaIdealBatteryRange {channel="account:model3:myaccount:mycar:idealbatteryrange"}
221+
Number TeslaUsableBatteryLevel {channel="account:model3:myaccount:mycar:usablebatterylevel"}
222+
Switch TeslaPreconditioning {channel="account:model3:myaccount:mycar:preconditioning"}
223+
224+
Switch TeslaCharge {channel="account:model3:myaccount:mycar:charge"}
225+
Switch TeslaChargeToMax {channel="account:model3:myaccount:mycar:chargetomax"}
226+
227+
Dimmer TeslaChargeLimit {channel="account:model3:myaccount:mycar:chargelimit"}
228+
Number TeslaChargeRate {channel="account:model3:myaccount:mycar:chargerate"}
229+
String TeslaChargingState {channel="account:model3:myaccount:mycar:chargingstate"}
230+
Number TeslaChargerPower {channel="account:model3:myaccount:mycar:chargerpower"}
231+
Number TeslaTimeToFullCharge {channel="account:model3:myaccount:mycar:timetofullcharge"}
232+
Number TeslaMaxCharges {channel="account:model3:myaccount:mycar:maxcharges"}
233+
234+
Number TeslaChargerVoltage {channel="account:model3:myaccount:mycar:chargervoltage"}
235+
Number TeslaChargerPower {channel="account:model3:myaccount:mycar:chargerpower"}
236+
Number TeslaChargerCurrent {channel="account:model3:myaccount:mycar:chargercurrent"}
237+
238+
DateTime TeslaScheduledChargingStart {channel="account:model3:myaccount:mycar:scheduledchargingstart"}
239+
Dimmer TeslaSoC {channel="account:model3:myaccount:mycar:soc"}
240+
241+
Switch TeslaDoorLock {channel="account:model3:myaccount:mycar:doorlock"}
242+
Switch TeslaHorn {channel="account:model3:myaccount:mycar:honkhorn"}
243+
Switch TeslaStart {channel="account:model3:myaccount:mycar:remotestart"}
244+
Switch TeslaSentry {channel="account:model3:myaccount:mycar:sentrymode"}
245+
Switch TeslaLights {channel="account:model3:myaccount:mycar:flashlights"}
246+
Switch TeslaValet {channel="account:model3:myaccount:mycar:valetmode"}
247+
248+
Switch TeslaWakeup {channel="account:model3:myaccount:mycar:wakeup"}
249+
250+
Switch TeslaBatteryHeater {channel="account:model3:myaccount:mycar:batteryheater"}
251+
Switch TeslaFrontDefrost {channel="account:model3:myaccount:mycar:frontdefroster"}
252+
Switch TeslaRearDefrost {channel="account:model3:myaccount:mycar:reardefroster"}
253+
Switch TeslaLeftSeatHeater {channel="account:model3:myaccount:mycar:leftseatheater"}
254+
Switch TeslaRightSeatHeater {channel="account:model3:myaccount:mycar:rightseatheater"}
255+
256+
Switch TeslaHomelink {channel="account:model3:myaccount:mycar:homelink"}
257+
Location TeslaLocation {channel="account:model3:myaccount:mycar:location"}
258+
Number TeslaHeading {channel="account:model3:myaccount:mycar:heading"}
259+
DateTime TeslaLocationTime {channel="account:model3:myaccount:mycar:gpstimestamp"}
260+
261+
Switch TeslaAutoconditioning {channel="account:model3:myaccount:mycar:autoconditioning"}
262+
Number:Temperature TeslaTemperature {channel="account:model3:myaccount:mycar:temperature"}
263+
Number:Temperature TeslaTemperatureCombined {channel="account:model3:myaccount:mycar:combinedtemp"}
264+
Number:Temperature TeslaInsideTemperature {channel="account:model3:myaccount:mycar:insidetemp"}
265+
Number:Temperature TeslaOutsideTemperature {channel="account:model3:myaccount:mycar:outsidetemp"}
266266
```
267267

268268
demo.sitemap:
@@ -337,23 +337,7 @@ sitemap main label="Main"
337337
}
338338
Frame
339339
{
340-
Switch label="State" item=nTeslaState_chart icon=line mappings=[0="Hide", 1="Hour", 2="Day", 3="Week", 4="Month"]
341-
Chart item=nTeslaState period=h refresh=30000 visibility=[nTeslaState_chart==1]
342-
Chart item=nTeslaState period=D refresh=30000 visibility=[nTeslaState_chart==2]
343-
Chart item=nTeslaState period=W refresh=30000 visibility=[nTeslaState_chart==3]
344-
Chart item=nTeslaState period=M refresh=30000 visibility=[nTeslaState_chart==4]
345-
}
346-
Frame
347-
{
348-
Switch label="Battery" item=TeslaBatteryLevel_chart icon=line mappings=[0="Hide", 1="Hour", 2="Day", 3="Week", 4="Month"]
349-
Chart item=TeslaUsableBatteryLevel period=h refresh=30000 visibility=[TeslaBatteryLevel_chart==1]
350-
Chart item=TeslaUsableBatteryLevel period=D refresh=30000 visibility=[TeslaBatteryLevel_chart==2]
351-
Chart item=TeslaUsableBatteryLevel period=W refresh=30000 visibility=[TeslaBatteryLevel_chart==3]
352-
Chart item=TeslaUsableBatteryLevel period=M refresh=30000 visibility=[TeslaBatteryLevel_chart==4]
353-
}
354-
Frame
355-
{
356-
Mapview item=TeslaLocation height=10 icon=location
340+
Mapview item=TeslaLocation height=10
357341
}
358342
}
359343
}

bundles/org.openhab.binding.tesla/src/main/java/org/openhab/binding/tesla/internal/TeslaBindingConstants.java

+1-10
Original file line numberDiff line numberDiff line change
@@ -28,7 +28,7 @@ public class TeslaBindingConstants {
2828
public static final String API_NAME = "Tesla Client API";
2929
public static final String API_VERSION = "api/1/";
3030
public static final String PATH_COMMAND = "command/{cmd}";
31-
public static final String PATH_DATA_REQUEST = "data_request/{cmd}";
31+
public static final String PATH_DATA_REQUEST = "vehicle_data";
3232
public static final String PATH_VEHICLE_ID = "/{vid}/";
3333
public static final String PATH_WAKE_UP = "wake_up";
3434
public static final String PATH_ACCESS_TOKEN = "oauth/token";
@@ -71,15 +71,6 @@ public class TeslaBindingConstants {
7171
public static final String COMMAND_WAKE_UP = "wake_up";
7272
public static final String DATA_THROTTLE = "datathrottle";
7373

74-
// Tesla REST API vehicle states
75-
public static final String CHARGE_STATE = "charge_state";
76-
public static final String CLIMATE_STATE = "climate_state";
77-
public static final String DRIVE_STATE = "drive_state";
78-
public static final String GUI_STATE = "gui_settings";
79-
public static final String MOBILE_ENABLED_STATE = "mobile_enabled";
80-
public static final String VEHICLE_STATE = "vehicle_state";
81-
public static final String VEHICLE_CONFIG = "vehicle_config";
82-
8374
public static final String BINDING_ID = "tesla";
8475

8576
// List of all Thing Type UIDs

bundles/org.openhab.binding.tesla/src/main/java/org/openhab/binding/tesla/internal/TeslaChannelSelectorProxy.java

+1-1
Original file line numberDiff line numberDiff line change
@@ -514,7 +514,7 @@ public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, Str
514514
}
515515
},
516516
MANAGED_CHARGING_START("managed_charging_start_time", "managedchargingstart", StringType.class, false),
517-
MOBILE_ENABLED(TeslaBindingConstants.MOBILE_ENABLED_STATE, "mobileenabled", OnOffType.class, false) {
517+
MOBILE_ENABLED("mobile_enabled", "mobileenabled", OnOffType.class, false) {
518518
@Override
519519
public State getState(String s, TeslaChannelSelectorProxy proxy, Map<String, String> properties) {
520520
if ("true".equals(s)) {

bundles/org.openhab.binding.tesla/src/main/java/org/openhab/binding/tesla/internal/handler/TeslaAccountHandler.java

+3-2
Original file line numberDiff line numberDiff line change
@@ -36,6 +36,7 @@
3636
import org.openhab.binding.tesla.internal.discovery.TeslaVehicleDiscoveryService;
3737
import org.openhab.binding.tesla.internal.protocol.Vehicle;
3838
import org.openhab.binding.tesla.internal.protocol.VehicleConfig;
39+
import org.openhab.binding.tesla.internal.protocol.VehicleData;
3940
import org.openhab.binding.tesla.internal.protocol.sso.TokenResponse;
4041
import org.openhab.core.io.net.http.HttpClientFactory;
4142
import org.openhab.core.thing.Bridge;
@@ -225,10 +226,10 @@ protected Vehicle[] queryVehicles() {
225226
Vehicle[] vehicleArray = gson.fromJson(jsonObject.getAsJsonArray("response"), Vehicle[].class);
226227

227228
for (Vehicle vehicle : vehicleArray) {
228-
String responseString = invokeAndParse(vehicle.id, VEHICLE_CONFIG, null, dataRequestTarget, 0);
229+
String responseString = invokeAndParse(vehicle.id, null, null, dataRequestTarget, 0);
229230
VehicleConfig vehicleConfig = null;
230231
if (responseString != null && !responseString.isBlank()) {
231-
vehicleConfig = gson.fromJson(responseString, VehicleConfig.class);
232+
vehicleConfig = gson.fromJson(responseString, VehicleData.class).vehicle_config;
232233
}
233234
for (VehicleListener listener : vehicleListeners) {
234235
listener.vehicleFound(vehicle, vehicleConfig);

0 commit comments

Comments
 (0)