Spin EV Charger
The Spin EV Charger integrationIntegrations connect and integrate Home Assistant with your devices, services, and more. [Learn more] connects Home Assistant to Exicom Spin EV chargers over Bluetooth Low Energy.
The charger is read directly through Home Assistant’s Bluetooth stack. There is no cloud service and no vendor account involved.
Use it to track the energy your vehicle uses in the Energy dashboard, start and stop charging from automations, for example to charge during off-peak hours, and get notified when the charger reports a problem.
Use cases
The Spin EV Charger integration is useful in scenarios like the following:
- Track how much energy each charging session uses and add the charger to the Energy dashboard to see what EV charging costs over time.
- Start charging when your off-peak tariff begins, and stop it before the peak tariff starts.
- Pause charging while other large loads, such as an oven or a heat pump, are running, to stay below the limit of your electrical service.
- Get a notification when your vehicle is plugged in, when a charging session ends, or when the charger reports a problem.
Supported devices
The following device has been verified to work with this integration:
- Exicom Spin AC wall charger
The charger advertises its serial number as its Bluetooth name, in the form 123456789012_ab12. Some units advertise it with a leading space, which Home Assistant ignores when matching.
Prerequisites
- A Bluetooth adapter or an ESPHome Bluetooth proxy in range of the charger. The proxy must have active connections enabled, because the charger is read over a GATT connection rather than from its advertisements.
- No other Bluetooth client connected to the charger during setup. The charger accepts one Bluetooth client at a time, so close the vendor phone app before adding the integration.
Configuration
To add the Spin EV Charger device to your Home Assistant instance, use this My button:
Manual configuration steps
If the above My button doesn’t work, you can also perform the following steps manually:
-
Browse to your Home Assistant instance.
-
In the bottom right corner, select the
Add Integration button. -
From the list, select Spin EV Charger.
-
Follow the instructions on screen to complete the setup.
Home Assistant discovers chargers that are in range and advertising. If your charger is not offered automatically, add the integration manually and pick it from the list of discovered devices. Setup connects to the charger and reads a value from it, so a charger that is out of range or already claimed by another client cannot be added.
Configuration options
How the integration uses the charger’s single Bluetooth slot. Reconnect each poll (the default) gives the slot up between polls, which leaves the vendor phone app usable. Stay connected holds the slot for Home Assistant, which makes polling faster and less prone to failure, but locks every other client out of the charger, the phone app included.
Changing this option reloads the integration.
Supported functionality
Sensors
The integration creates the following sensors:
- State: What the charger is doing. One of Available, Starting up, Starting, Charging, Paused by vehicle, Paused by charger, Finishing, Idle, Fault, or Out of service.
- Power: Power currently being delivered, in watts (W).
- Current: Current currently being delivered, in amperes (A).
- Session energy: Energy delivered during the current or most recent charging session, in kilowatt-hours (kWh). This value resets when a new session starts.
- Lifetime energy: Total energy the charger has delivered over its life, in kilowatt-hours (kWh). Use this sensor when adding the charger to the Energy dashboard.
Binary sensors
- Plug: On while a vehicle is plugged in. The charger cannot tell while it is starting up or out of service, so the sensor is off then.
- Problem: On while the charger reports at least one active alarm, such as a mains fault or an open earth wire.
Switches
- Charging: Starts and stops a charging session. The switch is on while a session is open, including while it is paused by the vehicle or by the charger, since a paused session resumes without a command. A vehicle must be plugged in for charging to start.
Spin EV Charger automation examples
The integration talks to the charger locally, so automations that read or control the charger keep working without an internet connection. Here are a few ideas to get you started.
You don’t need to edit YAML to use these examples. Copy a YAML snippet from this page, open the visual automation editor in Home Assistant, and press Ctrl+V (or Cmd+V on Mac). Home Assistant automatically converts the pasted YAML into the visual editor format, whether it’s a full automation, a single trigger, a condition, or an action.
Automation: Charge during off-peak hours
If your electricity tariff is cheaper at night, you can leave the vehicle plugged in and start charging when the off-peak period begins.
- Trigger: Time: 22:00
-
Condition: State: The Plug binary sensor is on
-
Entity: Plug sensor of the charger (
binary_sensor.ev_charger_plug)
-
Entity: Plug sensor of the charger (
-
Action: Turn on switch
-
Target: Charging switch of the charger (
switch.ev_charger_charging)
-
Target: Charging switch of the charger (
YAML example for charging during off-peak hours
alias: "Start EV charging at off-peak hours"
triggers:
- trigger: time
at: "22:00:00"
conditions:
- condition: state
entity_id: binary_sensor.ev_charger_plug
state: "on"
actions:
- action: switch.turn_on
target:
entity_id: switch.ev_charger_charging
Automation: Get notified when the charger reports a problem
The Problem binary sensor turns on when the charger reports an alarm, such as a mains fault. A notification lets you check on the charger before you need the vehicle.
-
Trigger: State: The Problem binary sensor turns on
-
Entity: Problem sensor of the charger (
binary_sensor.ev_charger_problem)
-
Entity: Problem sensor of the charger (
-
Action: Send a notification message
-
Target: Your notification entity (
notify.my_device) -
Message:
The EV charger reports a problem.
-
Target: Your notification entity (
YAML example for a problem notification
alias: "Notify when the EV charger reports a problem"
triggers:
- trigger: state
entity_id: binary_sensor.ev_charger_problem
to: "on"
actions:
- action: notify.send_message
target:
entity_id: notify.my_device
data:
message: "The EV charger reports a problem."
Automation: Get notified when a charging session ends
When the charging session closes, a notification tells you how much energy the session delivered.
-
Trigger: State: The Charging switch turns off
-
Entity: Charging switch of the charger (
switch.ev_charger_charging)
-
Entity: Charging switch of the charger (
-
Action: Send a notification message with the Session energy sensor value
-
Target: Your notification entity (
notify.my_device) -
Message:
Charging finished after {{ states('sensor.ev_charger_session_energy') }} kWh.
-
Target: Your notification entity (
YAML example for a session summary notification
alias: "Notify when EV charging ends"
triggers:
- trigger: state
entity_id: switch.ev_charger_charging
from: "on"
to: "off"
actions:
- action: notify.send_message
target:
entity_id: notify.my_device
data:
message: >
Charging finished after
{{ states('sensor.ev_charger_session_energy') }} kWh.
Data updates
The integration pollsData polling is the process of querying a device or service at regular intervals to check for updates or retrieve data. By defining a custom polling interval, you can control how frequently your system checks for new data, which can help optimize performance and reduce unnecessary network traffic. [Learn more] the charger over Bluetooth. The interval follows what the charger is doing:
- Every 60 seconds while a charging session is open, which includes sessions paused by the vehicle or by the charger, since those can resume without a command.
- Every 5 minutes otherwise, so that a slot handed back between polls leaves the phone app long uncontested stretches.
The charger is also read again about 2 seconds after a command, once it has had time to report the new state. The interval is not configurable. Entities become unavailable when the charger cannot be reached, for example when it is out of range or another Bluetooth client holds its slot.
Known limitations
Bluetooth connections
- The charger accepts only one Bluetooth client at a time. While Home Assistant is talking to it, the vendor phone app cannot connect, and vice versa. Which side wins in between polls is what the Bluetooth connection option decides.
- Each charger needs a free active connection slot on the Bluetooth adapter or proxy that reaches it. A charger set to Reconnect each poll only uses a slot while it is being read, while a charger set to Stay connected occupies one for as long as it is configured.
Charger control
- Setting the charging current is not supported.
- The charger refuses to start charging with no vehicle plugged in, and refuses to stop when no session is open. The charger does not say why it refused, so Home Assistant shows the same error for every refusal.
- A command needs the charger’s Bluetooth slot, the same as a poll. While the vendor phone app holds the slot, commands fail.
Troubleshooting
No charger is found during setup
Symptom: “No Spin EV charger was found over Bluetooth”
Setup reports that no charger was found.
Resolution
To resolve this issue, try the following steps:
- Check that the charger is powered on.
- Close the vendor phone app, and stop any other tool that may be connected to the charger.
- Confirm the charger appears in Settings > Connectivity > Bluetooth > Advertisement monitor, with a name in the form
123456789012_ab12. - Move an ESPHome Bluetooth proxy closer to the charger, or place a local Bluetooth adapter near it.
- Make sure the proxy has active connections enabled. A passive-only adapter can see the charger advertise but cannot read from it.
The charger cannot be connected to
Symptom: “Failed to connect”
Setup finds the charger but fails to read from it.
Description
Another Bluetooth client already holds the charger’s single slot, or the charger is at the edge of range.
Resolution
To resolve this issue, try the following steps:
- Close the vendor phone app and try again.
- Check Settings > Connectivity > Bluetooth > Connection monitor and confirm the adapter or proxy has a free active connection slot.
- Move the charger, the proxy, or the adapter so they are closer together.
The charger refuses to start or stop charging
Symptom: “The charger refused the command”
Turning the Charging switch on or off reports that the charger refused the command.
Resolution
To resolve this issue, try the following steps:
- To start charging, check that the vehicle is plugged in and that the State sensor does not show Starting up.
- To stop charging, check that the State sensor shows a session in progress. If no session is open, there is nothing to stop.
The sensors become unavailable
Symptom: All charger sensors show as unavailable
The charger was set up successfully, but its sensors later become unavailable.
Resolution
To resolve this issue, try the following steps:
- Check whether the vendor phone app, or another client, is connected to the charger. It is holding the slot that Home Assistant needs.
- Verify that the adapter or proxy that reaches the charger still has free active connection slots.
- If the charger is reached through a proxy at the edge of its range, move the proxy closer, or prefer an Ethernet-connected proxy.
- Set the Bluetooth connection option to Stay connected, which keeps the slot claimed rather than competing for it at every poll.
Removing the integration
This integration follows standard integration removal.
To remove an integration instance from Home Assistant
- Go to Settings > Devices & services and select the integration card.
- Next to the entry you want to remove, select the three dots
menu. Then, select Delete. - Depending on the integration, the entries are listed under one of the following headings:
- Devices
- Hubs
- Services
- Integration entries
- Depending on the integration, the entries are listed under one of the following headings:
- To confirm, select Delete.
- Home Assistant also deletes the devices and entities of the entry.
- If Home Assistant asks you to restart, restart Home Assistant.
- If Home Assistant asks whether to also delete the application credentials, select Remove or Keep.
- If you keep them, Home Assistant uses them automatically when you add the integration again.
- To delete them later, refer to Deleting application credentials.