Wallbox
Wallbox EV chargers — Pulsar, Pulsar Plus, Commander 2, and Copper SB — via the myWallbox cloud REST API at api.wall-box.com. Reports per-charger live status (state, charging power, session energy, current limit) and lets you remotely resume, pause, lock, unlock, reboot, trigger firmware updates, and adjust the soft current limit.
One GEM device row = one myWallbox account. One zone per physical charger.
Prerequisites
- A myWallbox account (same credentials you use in the Wallbox mobile app) with at least one charger paired and online.
- The Wallbox unit must be online over Wi-Fi or built-in 4G — there is no public LAN API on Pulsar / Commander hardware. Every command round-trips the Wallbox cloud.
- Remote control must be enabled for the charger in the app (default on for residential commissioning; some commercial sites lock this down at install time).
Setup
- Add the device. In Admin → Devices, create a device with driver
wallbox. Subsystem is typicallyenergy. - Credentials. Fill in:
email— your myWallbox account email.password— your myWallbox password. Stored encrypted (gem-crypt:).
- Save and reload the device. The driver logs in, caches the JWT for ~2 h, and marks itself connected. Check the server log for
wallbox connected:. - Discover chargers. From Admin → Script Console (or any macro) run:
You'll get backawait GemApp.getInstance().command({device: <device_id>, action: 'get_chargers'});
{chargers: [{id, name, model, serial, group_name, status_id, max_charging_current, locked}, ...]}. - Create one zone per charger under that device. Set
zone.addressto the numeric chargeridfrom the discovery response. Subsystem isenergy.
Attribute Reference
Device
| Attribute | Required | Description |
|---|---|---|
email | yes | myWallbox login email. |
password | yes | myWallbox password — secure, encrypted on disk. |
status_interval | no | Status poll interval in ms. Default 30000. The API is rate-limited; values below ~10 s start drawing throttling and are not recommended. |
request_timeout | no | HTTPS request timeout in ms. Default 15000. Pulsar Plus on 4G has noticeably higher latency, so do not lower this. |
Zone
| Attribute | Description |
|---|---|
max_charging_current | Optional default current (A) used by set_current_limit when called without an amps argument. |
Zone State and Derived Attributes (written by the driver)
| Attribute | Description |
|---|---|
state | Coarse state — ready, disconnected, waiting, paused, scheduled, locked, charging, updating, error, unknown. |
status_label | Human label derived from the Wallbox status id (e.g. waiting for car demand). For unknown codes the label is code_<n>. |
status_id | Raw Wallbox status code (161-210 range). |
charging_power_kw | Live charging power. |
charging_speed_kmh | Estimated added range per hour (Wallbox cloud calculation). |
session_energy_kwh | Energy added in the current session. |
session_range_km | Range added in the current session. |
session_green_kwh | Portion of session energy attributed to renewable sources, if the account has solar integration. |
session_seconds | Elapsed session time. |
max_charging_current | Current soft cap in amps. |
depot_price | Per-kWh tariff (if configured in the app). |
grid_connection_type | e.g. single_phase / three_phase. |
ocpp_status | OCPP backend status string, when the charger is configured against an OCPP CSMS. |
Zone Address Format
zone.address is the numeric charger id as returned by get_chargers (typically a 5-7 digit integer). Not the serial number, and not the user-assigned name.
Commands
| Command | Args | Notes |
|---|---|---|
get_chargers | — | List every charger visible to the account, with id, name, model, serial, group, status, and current limit. |
get_status | address | Refresh and return raw /chargers/status/<id> payload for one charger. |
resume / start | address | Resume a paused session. POST remote-action 1. |
pause / stop | address | Pause an active session. POST remote-action 2. |
reboot | address | Reboot the charger. Use sparingly. POST remote-action 3. |
update_software | address | Trigger a pending OTA firmware update. POST remote-action 5. |
lock | address | Lock the charger (RFID / app required to start). POST remote-action 7. |
unlock | address | Unlock the charger so a connected car will charge. POST remote-action 8. |
set_current_limit | address, amps | Set the soft current limit in amps (6-80). PUT /v2/charger/<id> {maxChargingCurrent}. Falls back to zone.max_charging_current if no amps arg is given. |
refresh | — | Force an immediate status sweep across every zone. |
Known Limitations
- No native LAN API. Wallbox Pulsar / Commander hardware does not expose a documented local API; everything goes through the cloud. If
api.wall-box.comis unreachable, the driver cannot control or read state. - Status code stability. The 161-210 status code range is observed from the public app and the community ecosystem, not contractually guaranteed by Wallbox. New firmware can add codes. The driver tolerates this — unknown codes surface as
state: 'unknown',status_label: 'code_<n>'. - Current-limit clamp.
set_current_limitis silently clamped server-side to the installer-commissionedmax_available_current. Asking for 80 A on a 32 A install just gets you 32 A — no error. - Power Sharing / Power Boost. On multi-charger installs, current-limit PUTs against a slave charger id are ignored; you must target the master.
- Session history. This driver focuses on live state and control. Historical session export (
/v4/chargers/<id>/sessions) is not yet wired — fetch it directly via REST if needed. - Discharging (V2G).
status_id 196is mapped asdischargingfor forward compatibility, but no Wallbox model in the field exposes a V2G control surface yet. - OCPP backend. If the charger is bound to an external OCPP CSMS rather than myWallbox, some remote actions may return 200 but be ignored by the OCPP layer. Surface this via
ocpp_status.
Troubleshooting
wallbox login failed: http 403/http 401— Bad email or password. Reset via the mobile app then update the GEM password attribute.wallbox login: no jwt in response— Wallbox occasionally rotates the auth response shape. The driver triesbody.jwt,body.data.attributes.token, andbody.user.token. If you see this after a Wallbox cloud update, raise an issue with the response body (redact email).- Commands return
http 401repeatedly — JWT was rejected. The driver auto-refreshes once per call; if it loops, your account password has been changed elsewhere. http 429— You're being rate-limited. Raisestatus_intervalto 60000+ and stop hammeringrefresh.- State stuck on
disconnected— Charger lost Wi-Fi / 4G. Check the charger LED ring; the cloud only knows what the charger last reported. set_current_limitaccepted but charger does not change — Master/slave install (Power Sharing). Target the masterid, not the slave.
Verification Status
This driver was authored against community-maintained protocol notes (the wallbox Python library, Home Assistant wallbox integration, and the public myWallbox developer docs). Live verification against a real Pulsar Plus or Commander 2 is recommended before production deployment, with focus on:
- JWT response shape on the current
user-api.wall-box.comdeployment. - Whether
Partner: wallboxis still required on every call (it currently is — omitting it returns 403 on most endpoints). - Status code IDs returned by the latest firmware (5.x line).
set_current_limitclamp behavior on a sub-32A commissioned install.