Skip to main content

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

  1. Add the device. In Admin → Devices, create a device with driver wallbox. Subsystem is typically energy.
  2. Credentials. Fill in:
    • email — your myWallbox account email.
    • password — your myWallbox password. Stored encrypted (gem-crypt:).
  3. 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:.
  4. Discover chargers. From Admin → Script Console (or any macro) run:
    await GemApp.getInstance().command({device: <device_id>, action: 'get_chargers'});
    You'll get back {chargers: [{id, name, model, serial, group_name, status_id, max_charging_current, locked}, ...]}.
  5. Create one zone per charger under that device. Set zone.address to the numeric charger id from the discovery response. Subsystem is energy.

Attribute Reference

Device

AttributeRequiredDescription
emailyesmyWallbox login email.
passwordyesmyWallbox password — secure, encrypted on disk.
status_intervalnoStatus poll interval in ms. Default 30000. The API is rate-limited; values below ~10 s start drawing throttling and are not recommended.
request_timeoutnoHTTPS request timeout in ms. Default 15000. Pulsar Plus on 4G has noticeably higher latency, so do not lower this.

Zone

AttributeDescription
max_charging_currentOptional default current (A) used by set_current_limit when called without an amps argument.

Zone State and Derived Attributes (written by the driver)

AttributeDescription
stateCoarse state — ready, disconnected, waiting, paused, scheduled, locked, charging, updating, error, unknown.
status_labelHuman label derived from the Wallbox status id (e.g. waiting for car demand). For unknown codes the label is code_<n>.
status_idRaw Wallbox status code (161-210 range).
charging_power_kwLive charging power.
charging_speed_kmhEstimated added range per hour (Wallbox cloud calculation).
session_energy_kwhEnergy added in the current session.
session_range_kmRange added in the current session.
session_green_kwhPortion of session energy attributed to renewable sources, if the account has solar integration.
session_secondsElapsed session time.
max_charging_currentCurrent soft cap in amps.
depot_pricePer-kWh tariff (if configured in the app).
grid_connection_typee.g. single_phase / three_phase.
ocpp_statusOCPP 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

CommandArgsNotes
get_chargersList every charger visible to the account, with id, name, model, serial, group, status, and current limit.
get_statusaddressRefresh and return raw /chargers/status/<id> payload for one charger.
resume / startaddressResume a paused session. POST remote-action 1.
pause / stopaddressPause an active session. POST remote-action 2.
rebootaddressReboot the charger. Use sparingly. POST remote-action 3.
update_softwareaddressTrigger a pending OTA firmware update. POST remote-action 5.
lockaddressLock the charger (RFID / app required to start). POST remote-action 7.
unlockaddressUnlock the charger so a connected car will charge. POST remote-action 8.
set_current_limitaddress, ampsSet 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.
refreshForce 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.com is 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_limit is silently clamped server-side to the installer-commissioned max_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 196 is mapped as discharging for 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 tries body.jwt, body.data.attributes.token, and body.user.token. If you see this after a Wallbox cloud update, raise an issue with the response body (redact email).
  • Commands return http 401 repeatedly — 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. Raise status_interval to 60000+ and stop hammering refresh.
  • 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_limit accepted but charger does not change — Master/slave install (Power Sharing). Target the master id, 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.com deployment.
  • Whether Partner: wallbox is 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_limit clamp behavior on a sub-32A commissioned install.