Tesla Wall Connector (Gen 3)
Local-LAN telemetry driver for the Tesla Wall Connector Gen 3. The driver polls the unit's published /api/1/vitals, /api/1/lifetime, and /api/1/version endpoints over plain HTTP and surfaces the state, per-phase electrical values, session energy, and lifetime counters as device attributes.
This driver is monitoring-only. The Wall Connector does not expose a public local control API — current-limit, start, and stop are reserved for the Tesla mobile app and the protected vehicle-bus pairing flow. If you need to throttle or schedule charging programmatically, use a separate load-shed device (smart breaker, contactor) in front of the Wall Connector.
Prerequisites
- Tesla Wall Connector Gen 3 (model 1457768-xx-x or newer). Gen 2 / HPWC units use a different LCD-only firmware and do not expose this API.
- Firmware 23.x or newer is recommended. Older firmware exposes the same paths with a slightly smaller vitals payload; missing fields are tolerated by the driver.
- The Wall Connector must be joined to the same LAN as the GEM server. The unit's own setup AP (used during commissioning) is not the same network it operates on once joined to your Wi-Fi.
- A DHCP reservation on the unit's MAC is strongly recommended. The unit advertises itself via mDNS as
TeslaWallConnector_<serial>.local, but this driver does not use mDNS — it talks to a fixed IP.
Setup steps
- Find the Wall Connector's IP on your DHCP server (look for hostname
TeslaWallConnector_*) and pin it via a DHCP reservation. - Open
http://<ip>/api/1/versionin a browser to confirm the API responds. You should see a JSON document withfirmware_versionandpart_number. If you get a connection refused or a redirect to the setup AP, the unit has not finished joining the LAN. - In GEM, Admin → Devices → Add Device, pick driver
tesla_wall_connector, set theipattribute. Save. - Watch the device row's attributes appear over the next few status cycles:
evse_state,vehicle_connected,session_energy_wh, etc.
Attribute reference
Required
| Attribute | Type | Description |
|---|---|---|
ip | string | LAN IP of the Wall Connector. |
Optional
| Attribute | Type | Default | Description |
|---|---|---|---|
port | int | 80 | HTTP port. |
status_interval | int | 15000 | Poll interval in ms. The Wall Connector tolerates as low as 5000ms. |
request_timeout | int | 10000 | HTTP request timeout in ms. |
Telemetry attributes (set by the driver)
| Attribute | Type | Source |
|---|---|---|
evse_state | string | vitals.evse_state mapped: starting, ready, connected, charging, reduced_charge, stopped, fault, error, updating. Unknown codes pass through as state_<n>. |
contactor_closed | bool | True when the unit's contactor has closed (vehicle drawing or about to draw current). |
vehicle_connected | bool | True when a vehicle is plugged in (regardless of charging state). |
session_seconds | int | Elapsed time on the current session. Resets to 0 when the vehicle disconnects. |
session_energy_wh | int | Energy delivered in the current session. Resets on disconnect. |
grid_voltage_v | float | Measured grid voltage. |
grid_frequency_hz | float | Measured grid frequency. |
vehicle_current_a | float | Total current drawn by the vehicle. |
voltage_a_v / voltage_b_v / voltage_c_v | float | Per-phase voltage (single-phase installs only populate A). |
current_a_a / current_b_a / current_c_a | float | Per-phase current. |
charging_power_w | int | Sum of per-phase V×I. 0 when not charging. |
handle_temp_c / pcba_temp_c / mcu_temp_c | float | Internal temperatures. Useful for thermal-foldback diagnosis. |
uptime_seconds | int | Seconds since the unit last booted. |
current_alert_count | int | Count of active fault/alert codes. 0 in normal operation. |
current_alerts | string | Comma-joined alert names when present. Omitted when empty. |
lifetime_energy_wh | int | Cumulative energy delivered (from /api/1/lifetime). |
lifetime_charge_starts | int | Cumulative count of charge starts. |
lifetime_sessions | int | Cumulative count of charge sessions. |
lifetime_uptime_s | int | Cumulative seconds of unit uptime. |
lifetime_thermal_foldbacks | int | Cumulative count of thermal-foldback events. |
lifetime_avg_session_energy_wh | int | Average energy per session (lifetime). |
The lifetime counters are polled at ~1/10 the cadence of vitals (every ~10 status cycles) to keep load on the unit low.
Zone address format
This driver does not use zones (supports_zones: false). All telemetry lives on the device row.
Known limitations
- No control commands. No way to set current limit, start, or stop a charge from the local API. Tesla intentionally did not expose this and we won't reverse-engineer the protected pairing flow.
- Gen 2 / HPWC not supported. Older Wall Connectors have no IP interface.
- evse_state mapping is firmware-specific. Codes 1, 2, 4, 5, 6, 7, 8, 9, 11 are mapped to labels. Anything else surfaces as
state_<n>so you can spot new firmware variants in attribute history. - No event push. Telemetry is polling-only. The default 15s cadence means a brief plug-in / plug-out can be missed; lower
status_intervalif that matters for your use case.
Troubleshooting
- Connection refused on port 80. The unit has not fully joined the LAN, or it's still on its setup AP. Re-run the Tesla One app commissioning flow.
evse_statestaysconnectedbut no current draws. The vehicle is plugged in but not requesting charge (charge limit reached, scheduled charging deferred, locked). This is normal.current_alert_count> 0. Checkcurrent_alertsfor the comma-joined alert names. Common ones includeWCD_ALERT_GROUND_FAULT,WCD_ALERT_THERMAL_LIMIT_REACHED. These pass through verbatim from the unit.- Attributes flicker between values. Per-phase voltage / current normally fluctuate by a few tenths even when not charging. Use coarser thresholds on attribute_triggers (e.g.,
>= 5Ainstead of> 0A) to avoid trigger storms.