Tesla Wall Charger (Gen3) API Statistics

The Gen 3 Tesla Wall Chargers with WIFI have an API available at a few URLs:

To parse these values into OpenHAB to be used for your rules create the following:

Tesla.Items

Group                       Tesla
Group                       WallCharger                                                                                            (Tesla)
Group                       gWallConnector_Vitals_Parse_json                                                                       (WallCharger)                            //JSON API: http://192.168.X.XX/api/1/vitals
Group                       gWallConnector_LifeTime_Parse_json                                                                     (WallCharger)                            //JSON API: http://192.168.X.XX/api/1/lifetime
Group                       gWallConnector_Version_Parse_json                                                                      (WallCharger)                            //JSON API: http://192.168.X.XX/api/1/version
//JSON
String                      G_Tesla_WallConnector_Vitals_JSON                         "Tesla WallConnector Vitals JSON: [%s]"
String                      G_Tesla_WallConnector_LifeTime_JSON                       "Tesla WallConnector LifeTime JSON: [%s]"
String                      G_Tesla_WallConnector_Version_JSON                        "Tesla WallConnector Version JSON: [%s]"
//Items parsed from http://192.168.X.XX/api/1/vitals
String                      G_Tesla_WallConnector_Vitals_contactor_closed             "contactor_closed"                           (gWallConnector_Vitals_Parse_json)
String                      G_Tesla_WallConnector_Vitals_vehicle_connected            "vehicle_connected"                          (gWallConnector_Vitals_Parse_json)
Number                      G_Tesla_WallConnector_Vitals_session_s                    "Sessions"                                   (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_grid_v                       "Grid Voltage"                               (gWallConnector_Vitals_Parse_json)
Number:Frequency            G_Tesla_WallConnector_Vitals_grid_hz                      "Grid Hertz"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricCurrent      G_Tesla_WallConnector_Vitals_vehicle_current_a            "Vehicle Amps"                               (gWallConnector_Vitals_Parse_json)
Number:ElectricCurrent      G_Tesla_WallConnector_Vitals_currentA_a                   "currentA_a"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricCurrent      G_Tesla_WallConnector_Vitals_currentB_a                   "currentB_a"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricCurrent      G_Tesla_WallConnector_Vitals_currentC_a                   "currentC_a"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricCurrent      G_Tesla_WallConnector_Vitals_currentN_a                   "currentN_a"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_voltageA_v                   "voltageA_v"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_voltageB_v                   "voltageB_v"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_voltageC_v                   "voltageC_v"                                 (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_relay_coil_v                 "relay_coil_v"                               (gWallConnector_Vitals_Parse_json)
Number:Temperature          G_Tesla_WallConnector_Vitals_pcba_temp_c                  "pcba_temp_c"                                (gWallConnector_Vitals_Parse_json)
Number:Temperature          G_Tesla_WallConnector_Vitals_handle_temp_c                "handle_temp_c"                              (gWallConnector_Vitals_Parse_json)
Number:Temperature          G_Tesla_WallConnector_Vitals_mcu_temp_c                   "mcu_temp_c"                                 (gWallConnector_Vitals_Parse_json)
Number:Time                 G_Tesla_WallConnector_Vitals_uptime_s                     "uptime_s"                                   (gWallConnector_Vitals_Parse_json)
Number                      G_Tesla_WallConnector_Vitals_input_thermopile_uv          "input_thermopile_uv"                        (gWallConnector_Vitals_Parse_json)
Number                      G_Tesla_WallConnector_Vitals_prox_v                       "prox_v"                                     (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_pilot_high_v                 "pilot_high_v"                               (gWallConnector_Vitals_Parse_json)
Number:ElectricPotential    G_Tesla_WallConnector_Vitals_pilot_low_v                  "pilot_low_v"                                (gWallConnector_Vitals_Parse_json)
Number:Energy               G_Tesla_WallConnector_Vitals_session_energy_wh            "session_energy_wh"                          (gWallConnector_Vitals_Parse_json)
Number                      G_Tesla_WallConnector_Vitals_config_status                "config_status"                              (gWallConnector_Vitals_Parse_json)
Number                      G_Tesla_WallConnector_Vitals_evse_state                   "evse_state"                                 (gWallConnector_Vitals_Parse_json)

//Items parsed from http://192.168.X.XX/api/1/lifetime
Number                      G_Tesla_WallConnector_Lifetime_contactor_cycles           "contactor_cycles"                           (gWallConnector_LifeTime_Parse_json)
Number                      G_Tesla_WallConnector_Lifetime_contactor_cycles_loaded    "contactor_cycles_loaded"                    (gWallConnector_LifeTime_Parse_json)
Number                      G_Tesla_WallConnector_Lifetime_thermal_foldbacks          "thermal_foldbacks"                          (gWallConnector_LifeTime_Parse_json)
Number:Temperature          G_Tesla_WallConnector_Lifetime_avg_startup_temp           "avg_startup_temp"                           (gWallConnector_LifeTime_Parse_json)
Number                      G_Tesla_WallConnector_Lifetime_charge_starts              "charge_starts"                              (gWallConnector_LifeTime_Parse_json)
Number:Energy               G_Tesla_WallConnector_Lifetime_energy_wh                  "energy_wh"                                  (gWallConnector_LifeTime_Parse_json)
Number                      G_Tesla_WallConnector_Lifetime_connector_cycles           "connector_cycles"                           (gWallConnector_LifeTime_Parse_json)
Number:Time                 G_Tesla_WallConnector_Lifetime_uptime_s                   "uptime_s"                                   (gWallConnector_LifeTime_Parse_json)
Number:Time                 G_Tesla_WallConnector_Lifetime_charging_time_s            "charging_time_s"                            (gWallConnector_LifeTime_Parse_json)

//Items parsed from http://192.168.X.XX/api/1/version
String                      G_Tesla_WallConnector_Version_firmware_version            "firmware_version"                           (gWallConnector_Version_Parse_json)
String                      G_Tesla_WallConnector_Version_part_number                 "part_number"                                (gWallConnector_Version_Parse_json)
String                      G_Tesla_WallConnector_Version_serial_number               "serial_number"                              (gWallConnector_Version_Parse_json)

Tesla.rules

val String filename = "Tesla.rules"
rule "Retrieve JSON Values from API"
when
    Time cron "0/30 * * * * ?"
then
    //val String apiURL = sendHttpGetRequest("http://192.168.X.XX/api/1/vitals")
G_Tesla_WallConnector_Vitals_JSON.sendCommand(sendHttpGetRequest("http://192.168.X.XX/api/1/vitals"))
G_Tesla_WallConnector_LifeTime_JSON.sendCommand(sendHttpGetRequest("http://192.168.X.XX/api/1/lifetime"))
G_Tesla_WallConnector_Version_JSON.sendCommand(sendHttpGetRequest("http://192.168.X.XX/api/1/version"))
end

rule "Tesla WallCharger: Parse JSON output for /vitals"
when
   Item G_Tesla_WallConnector_Vitals_JSON changed
then
logInfo(filename+".R1", "### Tesla WallCharger: Parse JSON output for /vitals ###")

{
   val String json = (G_Tesla_WallConnector_Vitals_JSON.state as StringType).toString
   gWallConnector_Vitals_Parse_json.members.forEach [ value |
      var String name = value.name.replace('G_Tesla_WallConnector_Vitals_','$.')
      value.postUpdate(transform("JSONPATH", name, json).replaceAll('"',''))
   ]
}
end

rule "Tesla WallCharger: Parse JSON output for /lifetime"
when
   Item G_Tesla_WallConnector_LifeTime_JSON changed
then
logInfo(filename+".R2", "### Tesla WallCharger: Parse JSON output for /lifetime ###")
{
   val String json = (G_Tesla_WallConnector_LifeTime_JSON.state as StringType).toString
   gWallConnector_LifeTime_Parse_json.members.forEach [ value |
      var String name = value.name.replace('G_Tesla_WallConnector_Lifetime_','$.')
      value.postUpdate(transform("JSONPATH", name, json).replaceAll('"',''))
   ]
}
end

rule "Tesla WallCharger: Parse JSON output for /version"
when
   Item G_Tesla_WallConnector_Version_JSON changed
then
logInfo(filename+".R3", "### Tesla WallCharger: Parse JSON output for /version ###")
{
   val String json = (G_Tesla_WallConnector_Version_JSON.state as StringType).toString
   gWallConnector_Version_Parse_json.members.forEach [ value |
      var String name = value.name.replace('G_Tesla_WallConnector_Version_','$.')
      value.postUpdate(transform("JSONPATH", name, json).replaceAll('"',''))
   ]
}

end

1 Like

Nice one! Do you know if there is also an API endpoint to send commands to the charger, e.g. start/stop charging or limiting the max charge current to make it work with non-Tesla vehicles without a network connectivity/missing OpenHAB binding?

Hi,
I try to use that rule but it doesn’t seems to parse the string data correctly anymore.
I’m unable do find how to change the rule (sorry, I’m not a dev)

Here is an extract of the log

15:25:00.961 [INFO ] [openhab.event.ItemStateChangedEvent  ] - Item 'G_Tesla_WallConnector_LifeTime_JSON' changed from {"contactor_cycles":53,"contactor_cycles_loaded":0,"alert_count":383,"thermal_foldbacks":0,"avg_startup_temp":30.5,"charge_starts":53,"energy_wh":104739,"connector_cycles":12,"uptime_s":619648,"charging_time_s":85376} to {"contactor_cycles":53,"contactor_cycles_loaded":0,"alert_count":383,"thermal_foldbacks":0,"avg_startup_temp":30.5,"charge_starts":53,"energy_wh":104739,"connector_cycles":12,"uptime_s":619649,"charging_time_s":85376}
15:25:00.961 [INFO ] [nhab.core.model.script.Tesla.rules.R2] - ### Tesla WallCharger: Parse JSON output for /lifetime ###
15:25:00.962 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_contactor_cycles' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.962 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_contactor_cycles_loaded' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.962 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_thermal_foldbacks' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.962 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_avg_startup_temp' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.963 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_charge_starts' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.963 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_energy_wh' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.963 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_connector_cycles' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.963 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_uptime_s' accepts: [DecimalType, QuantityType, UnDefType].
15:25:00.963 [WARN ] [ab.core.model.script.actions.BusEvent] - Cannot convert '{contactor_cycles:53,contactor_cycles_loaded:0,alert_count:383,thermal_foldbacks:0,avg_startup_temp:30.5,charge_starts:53,energy_wh:104739,connector_cycles:12,uptime_s:619649,charging_time_s:85376}' to a state type which item 'G_Tesla_WallConnector_Lifetime_charging_time_s' accepts: [DecimalType, QuantityType, UnDefType].

Thanks for your help.

edit : openhab 4.0.1 and tesla wall connector fw version 23.8.2+gce13e49b546382

I haven’t moved to OH 4.x still running on 3.4.0.

What does your .items file look like for these items? It looks like its not liking the type “Number”

You need to install “JsonPath Transformation Add-on”.
I tried and everything works fine.

1 Like

If you want can do it thought http binding. Something like this:

.things:

Thing http:url:tesla-wallcharger "Tesla Wall Charger" [
    baseURL="http://192.168.68.49/api/1/vitals",
    refresh=30] {
        Channels:
         Type string    : contactor_closed      "Contactor Closed"      [ stateTransformation="JSONPATH:$.contactor_closed" ]
         Type string    : vehicle_connected     "Vehicle Connected"     [ stateTransformation="JSONPATH:$.vehicle_connected" ]
         Type number    : currentA_a            "currentA"              [ stateTransformation="JSONPATH:$.currentA_a" ]
         Type number    : currentB_a            "currentB"              [ stateTransformation="JSONPATH:$.currentB_a" ]
         Type number    : currentC_a            "currentC"              [ stateTransformation="JSONPATH:$.currentC_a" ]
         Type number    : currentN_a            "currentN"              [ stateTransformation="JSONPATH:$.currentN_a" ]
         Type number    : voltageA_v            "voltageA"              [ stateTransformation="JSONPATH:$.voltageA_v" ]
         Type number    : voltageB_v            "voltageB"              [ stateTransformation="JSONPATH:$.voltageB_v" ]
         Type number    : voltageC_v            "voltageC"              [ stateTransformation="JSONPATH:$.voltageC_v" ]
         Type number    : pcba_temp_c           "pcba temp"             [ stateTransformation="JSONPATH:$.pcba_temp_c" ]
         Type number    : handle_temp_c         "handle temp"           [ stateTransformation="JSONPATH:$.handle_temp_c" ]
         Type number    : mcu_temp_c            "mcu temp"              [ stateTransformation="JSONPATH:$.mcu_temp_c" ]
         Type number    : session_energy_wh     "session energy"        [ stateTransformation="JSONPATH:$.session_energy_wh" ]
}

.items:

Group                           gTeslaWallCharger                       "Tesla Wall Charger"            <energy>                (gTesla)
String                          TeslaWallCharger_contactor_closed       "Contactor Closed [%s]"         <returnpipe>            (gTeslaWallCharger)     ["OpenState","Opening"]         {channel="http:url:tesla-wallcharger:contactor_closed"}
String                          TeslaWallCharger_vehicle_connected      "Vehicle Connected [%s]"        <returnpipe>            (gTeslaWallCharger)     ["OpenState","Opening"]         {channel="http:url:tesla-wallcharger:vehicle_connected"}
Number:ElectricCurrent          TeslaWallCharger_currentA_a             "Current A [%.1f %unit%]"       <energy>                (gTeslaWallCharger)     ["Measurement","Current"]       {channel="http:url:tesla-wallcharger:currentA_a"}
Number:ElectricCurrent          TeslaWallCharger_currentB_a             "Current B [%.1f %unit%]"       <energy>                (gTeslaWallCharger)     ["Measurement","Current"]       {channel="http:url:tesla-wallcharger:currentB_a"}
Number:ElectricCurrent          TeslaWallCharger_currentC_a             "Current C [%.1f %unit%]"       <energy>                (gTeslaWallCharger)     ["Measurement","Current"]       {channel="http:url:tesla-wallcharger:currentC_a"}
Number:ElectricCurrent          TeslaWallCharger_currentN_a             "Current N [%.1f %unit%]"       <energy>                (gTeslaWallCharger)     ["Measurement","Current"]       {channel="http:url:tesla-wallcharger:currentN_a"}
Number:ElectricPotential        TeslaWallCharger_voltageA_v             "voltage A [%.1f %unit%]"       <material_symbols_bolt> (gTeslaWallCharger)     ["Measurement","Voltage"]       {channel="http:url:tesla-wallcharger:voltageA_v"}
Number:ElectricPotential        TeslaWallCharger_voltageB_v             "voltage B [%.1f %unit%]"       <material_symbols_bolt> (gTeslaWallCharger)     ["Measurement","Voltage"]       {channel="http:url:tesla-wallcharger:voltageB_v"}
Number:ElectricPotential        TeslaWallCharger_voltageC_v             "Voltage C [%.1f %unit%]"       <material_symbols_bolt> (gTeslaWallCharger)     ["Measurement","Voltage"]       {channel="http:url:tesla-wallcharger:voltageC_v"}
Number:Temperature              TeslaWallCharger_pcba_temp_c            "pcba temp [%.1f %unit%]"       <temperature>           (gTeslaWallCharger)     ["Measurement","Temperature"]   {channel="http:url:tesla-wallcharger:pcba_temp_c"}
Number:Temperature              TeslaWallCharger_handle_temp_c          "handle temp [%.1f %unit%]"     <temperature>           (gTeslaWallCharger)     ["Measurement","Temperature"]   {channel="http:url:tesla-wallcharger:handle_temp_c"}
Number:Temperature              TeslaWallCharger_mcu_temp_c             "mcu temp [%.1f %unit%]"        <temperature>           (gTeslaWallCharger)     ["Measurement","Temperature"]   {channel="http:url:tesla-wallcharger:mcu_temp_c"}
Number:Energy                   TeslaWallCharger_session_energy_wh      "session energy [%.1f %unit%]"  <temperature>           (gTeslaWallCharger)     ["Measurement","Energy"]        {channel="http:url:tesla-wallcharger:session_energy_wh"}