This custom integration provides comprehensive monitoring and control of Eveus EV chargers in Home Assistant, featuring advanced state tracking, dynamic update intervals, smart current control, energy monitoring, and improved SOC tracking.
- New in Version 2.1.0
- Prerequisites
- Features
- Installation
- Configuration
- UI Configuration
- Notifications
- Troubleshooting
- Support
- License
- Immediate SOC updates when input numbers change - no more waiting for refresh cycles
- Optimized SOC calculations with intelligent caching for faster response times
- Reduced memory usage through optimized data structures and smarter caching
- Smoother sensor updates with improved data processing pipelines
- Enhanced network efficiency using persistent connections and keep-alive
- Lower CPU usage through cached lookups and consolidated operations
- Improved connection persistence - fewer "device unavailable" errors
- Smart retry logic with exponential backoff - automatic recovery from network issues
- Enhanced connection monitoring - detailed visibility of charger connectivity
- Keep-alive connections maintain stable communication longer
- Optimized error handling for better recovery from network issues
- Consolidated duplicate code for more efficient operation
- Standardized entity management ensuring consistent behavior
- Better error messages making troubleshooting easier
- Fixed timezone handling for accurate time displays
- Streamlined sensor creation reduces code complexity
- Dynamic Update Frequency: 30-second updates when charging, 60-second updates when idle
- Enhanced State Management: Immediate and reliable switch state updates
- Improved Device Info: Accurate firmware version display and better identification
- Modular Architecture: Better maintainability and reliability
- Zero Breaking Changes: Full backward compatibility maintained
Before installing the integration, you must create these helper entities in Home Assistant:
- Go to Settings → Devices & Services → Helpers
- Click the "+ CREATE HELPER" button
- Choose "Number"
- Create each of these helpers with the exact input_number names:
input_number:
ev_battery_capacity:
name: "EV Battery Capacity"
min: 10
max: 160
step: 1
unit_of_measurement: "kWh"
mode: slider # Optional but recommended
icon: mdi:car-battery
# This is the total usable capacity of your EV's battery (e.g., 80 kWh for Tesla Model 3 LR)
# Used to calculate accurate SOC percentages and remaining charging time
# Should match the value in your EV's manual or settings
ev_initial_soc:
name: "Initial EV State of Charge"
min: 0
max: 100
step: 1
unit_of_measurement: "%"
mode: slider # Optional but recommended
icon: mdi:battery-charging-40
# This should be set to your EV's current SOC displayed on the dashboard before starting to charge
# Must be updated at the beginning of each charging session for accurate calculations
# This acts as your starting point for SOC tracking
ev_soc_correction:
name: "Charging Efficiency Loss"
min: 0
max: 10
step: 0.1
initial: 7.5 # Default efficiency loss
unit_of_measurement: "%"
mode: slider # Optional but recommended
icon: mdi:chart-bell-curve
# Accounts for energy lost during charging due to heat, cable resistance, etc.
# Typical values are 5-10% (7.5% is a good starting point)
# Adjust this value based on comparing the integration's SOC with your EV's actual SOC
ev_target_soc:
name: "Target SOC"
min: 80
max: 100
step: 10
initial: 80 # Default target
unit_of_measurement: "%"
mode: slider # Optional but recommended
icon: mdi:battery-charging-high
# Set the desired SOC you want to reach for this charging session
# Used to calculate "Time to Target SOC" and can be used for automation triggers
# Many users set this to 80-90% for daily charging to preserve battery health
Important: The integration will verify these helpers exist during setup and display an error if any are missing or incorrectly configured.
- Real-time voltage, current, and power monitoring with improved accuracy
- Session and total energy tracking with persistent storage
- Temperature monitoring (box and plug) with enhanced precision
- Ground connection safety monitoring
- Battery voltage monitoring
- Energy counters with cost tracking (in UAH)
- Enhanced session time formatting with days, hours, and minutes
- Smart data caching to minimize device queries
- Accurate State of Charge monitoring (kWh and percentage)
- Dynamic time-to-target calculation with efficiency correction
- Comprehensive session time tracking
- Smart SOC estimation based on charging patterns
- Real-time efficiency adjustments during charging
- Accurate remaining time calculations based on current conditions
- Dynamic update intervals based on charging state
- Smart retry logic with exponential backoff
- Efficient state caching and restoration
- Enhanced error handling and recovery
- Comprehensive connection monitoring
- Automatic recovery from network issues
- Detailed diagnostic reporting
- Dynamic charging current control (8-16A or 8-32A based on model)
- Reliable start/stop charging control
- One charge mode support
- Counter reset functionality
- Current adjustment with safety limits
- Improved command reliability
- Immediate state feedback
- Connection quality metrics
- Detailed error tracking and reporting
- Temperature monitoring with improved accuracy
- Ground connection monitoring
- Enhanced status reporting
- Comprehensive error logging
- System performance monitoring
-
Access HACS
- Open your Home Assistant dashboard
- On the sidebar menu, find and click on "HACS"
- This will open the HACS main page
-
Add Custom Repository
- In the top-right corner of the HACS page, click on the three vertical dots (â‹®) menu
- From the dropdown menu, select "Custom repositories"
- A dialog box will appear asking for repository information
- Fill in the following information:
- In the "Repository" field, paste this URL:
https://github.com/ABovsh/eveus
- In the "Category" dropdown menu, select "Integration"
- In the "Repository" field, paste this URL:
- Click the "ADD" button
-
Install the Integration
- After adding the repository, go back to the HACS main page
- Click on the "Integrations" section
- In the search box at the top, type "Eveus"
- The Eveus EV Charger integration should appear in the results
- Click on the "Eveus EV Charger" card
- On the integration detail page, click the "DOWNLOAD" button in the bottom-right corner
- A confirmation dialog will appear - click "DOWNLOAD" again
- Wait for the download to complete (this should only take a few seconds)
-
Restart Home Assistant
- After successful installation, you need to restart Home Assistant
- Go to your Home Assistant main menu (sidebar)
- Click on "Configuration"
- Click on "Server Controls"
- Under the "Server management" section, click the "RESTART" button
- Wait for Home Assistant to restart completely (this may take several minutes)
- Download the repository
- Copy the
custom_components/eveus
directory to your Home Assistant'scustom_components
folder - Restart Home Assistant
- Create all required helper entities as described in Prerequisites
- Go to Configuration → Integrations
- Click "+ Add Integration"
- Search for "Eveus"
- Enter the following details:
- IP Address
- Username
- Password
- Charger Model (16A or 32A)
Entity | Name | Description | Unit |
---|---|---|---|
sensor.eveus_ev_charger_voltage | Voltage | Current voltage measurement | V |
sensor.eveus_ev_charger_current | Current | Actual charging current | A |
sensor.eveus_ev_charger_power | Power | Current charging power | W |
sensor.eveus_ev_charger_current_set | Current Set | Configured charging current limit | A |
sensor.eveus_ev_charger_session_energy | Session Energy | Energy used in current session | kWh |
sensor.eveus_ev_charger_session_time | Session Time | Duration of current charging session | - |
sensor.eveus_ev_charger_total_energy | Total Energy | Total lifetime energy delivered | kWh |
sensor.eveus_ev_charger_counter_a_energy | Counter A Energy | Primary energy counter | kWh |
sensor.eveus_ev_charger_counter_b_energy | Counter B Energy | Secondary energy counter | kWh |
sensor.eveus_ev_charger_counter_a_cost | Counter A Cost | Primary counter cost | â‚´ |
sensor.eveus_ev_charger_counter_b_cost | Counter B Cost | Secondary counter cost | â‚´ |
Entity | Name | Description | Unit |
---|---|---|---|
sensor.eveus_ev_charger_soc_energy | SOC Energy | Current battery charge | kWh |
sensor.eveus_ev_charger_soc_percent | SOC Percent | Current battery charge | % |
sensor.eveus_ev_charger_time_to_target_soc | Time to Target SOC | Estimated charging time remaining | - |
Entity | Name | Description |
---|---|---|
sensor.eveus_ev_charger_state | State | Current charger state (Standby, Connected, Charging, etc.) |
sensor.eveus_ev_charger_substate | Substate | Detailed status (Limited by User, Energy Limit, etc.) |
sensor.eveus_ev_charger_ground | Ground | Ground connection status |
sensor.eveus_ev_charger_connection_quality | Connection Quality | Network connection reliability percentage |
sensor.eveus_ev_charger_system_time | System Time | Charger's internal time |
sensor.eveus_ev_charger_battery_voltage | Battery Voltage | Charger's backup battery voltage |
Entity | Name | Description | Unit |
---|---|---|---|
sensor.eveus_ev_charger_box_temperature | Box Temperature | Internal temperature | °C |
sensor.eveus_ev_charger_plug_temperature | Plug Temperature | Plug temperature | °C |
Entity | Name | Description |
---|---|---|
number.eveus_ev_charger_charging_current | Charging Current | Set charging current limit (8-16A or 8-32A based 6D40 on model) |
switch.eveus_ev_charger_stop_charging | Stop Charging | Start/stop charging (inverted: off=charging, on=stopped) |
switch.eveus_ev_charger_one_charge | One Charge | Enable single charge session mode |
switch.eveus_ev_charger_reset_counter_a | Reset Counter A | Clear primary energy counter |
Entity | Name | Description |
---|---|---|
sensor.eveus_ev_charger_primary_rate_cost | Primary Rate Cost | Base electricity rate |
sensor.eveus_ev_charger_active_rate_cost | Active Rate Cost | Currently active rate with name |
sensor.eveus_ev_charger_rate_2_cost | Rate 2 Cost | Secondary time-based rate |
sensor.eveus_ev_charger_rate_3_cost | Rate 3 Cost | Tertiary time-based rate |
sensor.eveus_ev_charger_rate_2_status | Rate 2 Status | Schedule 2 enabled/disabled state |
sensor.eveus_ev_charger_rate_3_status | Rate 3 Status | Schedule 3 enabled/disabled state |
- Set the correct EV battery capacity
- Set the current state of charge (initial_soc) - changes are now reflected immediately!
- Adjust the efficiency correction if needed
- Set your desired target SOC
- Monitor charging progress with improved SOC sensors
- Check the new time-to-target estimation
- Monitor connection stability with the connection quality sensor
- Adjust current if needed using the slider
- Any changes to input numbers (initial SOC, target SOC, etc.) are reflected immediately
- Reset Counter A before starting a new session
- Record efficiency for future reference
- Check total energy usage in session history
- Review connection quality metrics
This card provides a comprehensive view of all charging information and controls in a clean, organized layout:
type: entities
entities:
- entity: sensor.eveus_ev_charger_soc_percent
name: SOC (%)
icon: mdi:battery-charging-80
- entity: sensor.eveus_ev_charger_soc_energy
name: SOC (kWh)
icon: mdi:battery
- entity: sensor.eveus_ev_charger_time_to_target_soc
name: Time to Target
icon: mdi:clock-time-four
- type: divider
- entity: sensor.eveus_ev_charger_state
name: Charger State
icon: mdi:car-electric
- entity: sensor.eveus_ev_charger_substate
name: Substate
icon: mdi:car-cog
- type: divider
- entity: sensor.eveus_ev_charger_power
name: Power (W)
icon: mdi:flash
- entity: sensor.eveus_ev_charger_counter_a_energy
name: Session Energy (kWh)
icon: mdi:counter
- type: divider
- entity: number.eveus_ev_charger_charging_current
name: Current (A)
icon: mdi:current-ac
- entity: input_number.ev_initial_soc
name: Initial SOC (%)
icon: mdi:calendar-clock
- entity: input_number.ev_target_soc
name: Target SOC (%)
icon: mdi:target
- entity: input_number.ev_soc_correction
name: SOC Correction (%)
icon: mdi:chart-bell-curve
- entity: input_number.ev_battery_capacity
name: Battery Capacity (kWh)
icon: mdi:car-battery
- type: divider
- entity: switch.eveus_ev_charger_one_charge
name: One Charge Mode
icon: mdi:power-plug
- entity: switch.eveus_ev_charger_stop_charging
name: Stop Charging
icon: mdi:stop-circle
- entity: switch.eveus_ev_charger_reset_counter_a
name: Reset Energy Counter
icon: mdi:reload
show_header_toggle: false
For a more interactive and visually appealing control experience, you can use this advanced control panel with sliders and buttons:
- Interactive sliders for precise control of charging current and initial SOC
- One-touch buttons for common actions like resetting counters or stopping charging
- Visual feedback with animations and color changes
- Confirmation dialogs for critical actions to prevent accidents
- Haptic feedback for touch devices (phones/tablets)
-
Install Required Cards:
- Go to HACS
- Search for and install "Slider Button Card" and "Button Card"
- Restart Home Assistant
-
Add the YAML Configuration:
- Go to your dashboard
- Click the three dots in the top right → Edit Dashboard
- Click the + button to add a new card
- Select "Manual" card
- Paste this code:
type: vertical-stack
cards:
- type: horizontal-stack
cards:
- type: custom:slider-button-card
entity: number.eveus_ev_charger_charging_current
name: Current
compact: true
slider:
direction: left-right
background: gradient
use_state_color: true
show_track: true
min: 8
max: 16
step: 1
icon:
show: true
icon: mdi:flash
tap_action:
action: more-info
haptic: light
show_name: true
show_state: true
unit: " A"
show_attribute: false
action_button:
show: false
styles:
slider:
height: 35px
width: 95%
background: rgba(var(--rgb-primary-text-color), 0.1)
card:
padding: 4px
height: 55px
border-radius: var(--ha-card-border-radius, 12px)
box-shadow: var(--ha-card-box-shadow, none)
name:
font-size: 12px
font-weight: bold
padding-top: 4px
color: var(--primary-text-color)
state:
font-size: 16px
font-weight: bold
color: var(--primary-text-color)
- type: custom:slider-button-card
entity: input_number.ev_initial_soc
name: Init SOC
compact: true
slider:
direction: left-right
background: gradient
use_state_color: true
show_track: true
min: 0
max: 100
step: 1
icon:
show: true
icon: mdi:battery
tap_action:
action: more-info
haptic: light
show_name: true
show_state: true
unit: "%"
show_attribute: false
action_button:
show: false
styles:
slider:
height: 35px
width: 95%
background: rgba(var(--rgb-primary-text-color), 0.1)
card:
padding: 4px
height: 55px
border-radius: var(--ha-card-border-radius, 12px)
box-shadow: var(--ha-card-box-shadow, none)
name:
font-size: 12px
font-weight: bold
padding-top: 4px
color: var(--primary-text-color)
state:
font-size: 16px
font-weight: bold
color: var(--primary-text-color)
- type: horizontal-stack
cards:
- type: custom:button-card
entity: switch.eveus_ev_charger_reset_counter_a
name: Reset Counter
icon: mdi:restart
size: 30%
color_type: card
color: var(--info-color, "#3949AB")
tap_action:
action: toggle
confirmation:
text: Reset the energy counter?
exemptions: []
haptic: success
hold_action:
action: more-info
haptic: light
styles:
card:
- border-radius: var(--ha-card-border-radius, 12px)
- height: 45px
- padding: 4px
- margin: 2px
- box-shadow: var(--ha-card-box-shadow, none)
- transition: all 0.2s ease-in-out
name:
- font-size: 12px
- font-weight: bold
- padding-top: 2px
- color: var(--primary-text-color)
- transition: color 0.2s ease-in-out
icon:
- width: 20px
- color: var(--primary-text-color)
- transition: color 0.2s ease-in-out
state:
- value: "off"
styles:
card:
- background-color: var(--card-background-color)
- border: 1px solid var(--divider-color)
- transform: scale(1)
- value: "on"
styles:
card:
- opacity: 0.9
- background-color: var(--info-color)
- transform: scale(0.95)
name:
- color: var(--primary-background-color)
icon:
- color: var(--primary-background-color)
- type: custom:button-card
entity: switch.eveus_ev_charger_one_charge
name: OneCharge
icon: mdi:ev-station
size: 35%
color_type: card
color: var(--success-color, "#2E7D32")
tap_action:
action: toggle
haptic: success
hold_action:
action: more-info
haptic: light
styles:
card:
- border-radius: var(--ha-card-border-radius, 12px)
- height: 45px
- padding: 4px
- margin: 2px
- box-shadow: var(--ha-card-box-shadow, none)
- transition: all 0.2s ease-in-out
name:
- font-size: 12px
- font-weight: bold
- padding-top: 2px
- color: var(--primary-text-color)
- transition: color 0.2s ease-in-out
icon:
- width: 22px
- color: var(--primary-text-color)
- transition: color 0.2s ease-in-out
state:
- value: "off"
styles:
card:
- background-color: var(--card-background-color)
- border: 1px solid var(--divider-color)
- transform: scale(1)
- value: "on"
styles:
card:
- background-color: var(--success-color)
- animation: pulse 2s infinite
- transform: scale(0.95)
name:
- color: var(--primary-background-color)
icon:
- color: var(--primary-background-color)
- type: custom:button-card
entity: switch.eveus_ev_charger_stop_charging
name: Stop Charging
icon: mdi:stop-circle
size: 35%
color_type: card
color: var(--error-color, "#C62828")
tap_action:
action: toggle
confirmation:
text: Stop charging session?
exemptions: []
haptic: warning
hold_action:
action: more-info
haptic: light
styles:
card:
- border-radius: var(--ha-card-border-radius, 12px)
- height: 45px
- padding: 4px
- margin: 2px
- box-shadow: var(--ha-card-box-shadow, none)
- transition: all 0.2s ease-in-out
name:
- font-size: 12px
- font-weight: bold
- padding-top: 2px
- color: var(--primary-text-color)
- transition: color 0.2s ease-in-out
icon:
- width: 22px
- color: var(--primary-text-color)
- transition: color 0.2s ease-in-out
state:
- value: "off"
styles:
card:
- background-color: var(--card-background-color)
- border: 1px solid var(--divider-color)
- transform: scale(1)
- value: "on"
styles:
card:
- background-color: var(--error-color)
- animation: pulse 1s infinite
- transform: scale(0.95)
name:
- color: var(--primary-background-color)
icon:
- color: var(--primary-background-color)
Note: You may need to adjust the charging current slider's min and max values based on your charger model (8-16A for 16A models or 8-32A for 32A models).
Tip: For the best experience, place this control panel on your mobile dashboard for easy access when near your vehicle.
You can set up automations to receive notifications about your EV charging status. These will alert you when charging starts, completes, or when the current changes.
- Go to Settings > Automations & Scenes
- Click "+ Create Automation"
- Choose "Create new automation" and select "Start with an empty automation"
- Set up the following automations:
This automation notifies you when your EV begins charging:
- Download the YAML from 301_EV_Charging_Started.yaml
- Open the file in a text editor and copy all the content
- In Home Assistant, after creating an empty automation:
- Click the three dots in the top right corner
- Select "Edit in YAML"
- Delete any default content
- Paste the YAML content from the downloaded file
- Replace
notify.notify
or similar with your notification service (e.g.,notify.mobile_app_your_phone
) - Click "Save"
This automation notifies you when the charging current changes:
- Download the YAML from 302_EV_Charging_CurrentChanged.yaml
- Create a new empty automation as described above
- Edit in YAML mode and paste the content from the downloaded file
- Replace the notification service with your preferred notification method
- Click "Save"
This automation notifies you when charging is complete:
- Download the YAML from 303_EV_Charging_Completed.yaml
- Create a new empty automation as described above
- Edit in YAML mode and paste the content from the downloaded file
- Replace the notification service with your preferred notification method
- Click "Save"
Tip: If you're using Telegram, set your notification service to
notify.telegram
or your specific Telegram notification service name in each automation.
If you encounter issues:
- Check all helper entities are properly configured
- Monitor the connection_quality sensor for network issues
- Verify network connectivity to the charger
- Check the logs for detailed error messages
- Restart the integration if needed
If you're experiencing issues with the SOC calculations or other sensors, follow these debugging steps:
Add the following to your configuration.yaml
file:
logger:
default: info
logs:
custom_components.eveus.ev_sensors: debug
custom_components.eveus.utils: debug
custom_components.eveus.sensor: debug
custom_components.eveus: warning
Restart Home Assistant and check the logs for detailed information about sensor calculations.
Copy and paste this template into Developer Tools > Template to get a comprehensive diagnostic report:
{# Debug template for Eveus SOC Sensors #}
{% set debug_data = {
'inputs': {
'initial_soc': states('input_number.ev_initial_soc'),
'battery_capacity': states('input_number.ev_battery_capacity'),
'soc_correction': states('input_number.ev_soc_correction'),
'target_soc': states('input_number.ev_target_soc')
},
'sensors': {
'iem1': states('sensor.eveus_ev_charger_counter_a_energy'),
'soc_energy': states('sensor.eveus_ev_charger_soc_energy'),
'soc_percent': states('sensor.eveus_ev_charger_soc_percent'),
'time_to_target': states('sensor.eveus_ev_charger_time_to_target_soc'),
'power': states('sensor.eveus_ev_charger_power')
}
} %}
{# Calculation Preparation #}
{% set initial_soc = debug_data.inputs.initial_soc|float(0) %}
{% set battery_capacity = debug_data.inputs.battery_capacity|float(0) %}
{% set soc_correction = debug_data.inputs.soc_correction|float(0) %}
{% set energy_charged = debug_data.sensors.iem1|float(0) %}
{# Validity Check #}
{% set input_valid = (
initial_soc != 0 and
battery_capacity != 0 and
energy_charged != 'unknown' and
energy_charged != 'unavailable'
) %}
{# Calculations #}
{% if input_valid %}
{% set initial_kwh = (initial_soc / 100) * battery_capacity %}
{% set efficiency = (1 - soc_correction / 100) %}
{% set charged_kwh = energy_charged * efficiency %}
{% set total_kwh = initial_kwh + charged_kwh %}
{% set soc_energy = total_kwh|round(2) %}
{% set soc_percent = ((total_kwh / battery_capacity) * 100)|round(0) %}
{% else %}
{% set soc_energy = 'Cannot calculate - missing inputs' %}
{% set soc_percent = 'Cannot calculate - missing inputs' %}
{% endif %}
### Eveus SOC Sensor Debug Report ###
## Required Input Entities ##
{% for name, value in debug_data.inputs.items() %}
- input_number.ev_{{ name }}: {{ value }}
{% endfor %}
## Sensor Values ##
{% for name, value in debug_data.sensors.items() %}
- {{ name }}: {{ value }}
{% endfor %}
## Entity Existence Check ##
{% set check_entities = [
'input_number.ev_initial_soc',
'input_number.ev_battery_capacity',
'input_number.ev_soc_correction',
'input_number.ev_target_soc',
'sensor.eveus_ev_charger_counter_a_energy',
'sensor.eveus_ev_charger_power'
] %}
{% for entity_id in check_entities %}
- {{ entity_id }}: {{ states(entity_id) != 'unknown' and states(entity_id) != 'unavailable' }}
{% endfor %}
## Expected Values ##
- Expected SOC Energy: {{ soc_energy }}
- Expected SOC Percent: {{ soc_percent }}
## Calculation Details ##
{% if input_valid %}
Initial SOC: {{ initial_soc }}%
Battery Capacity: {{ battery_capacity }} kWh
Efficiency Correction: {{ soc_correction }}%
Energy Charged: {{ energy_charged }} kWh
Initial Energy: {{ initial_kwh }} kWh
Efficiency Factor: {{ efficiency }}
Charged Energy (with efficiency): {{ charged_kwh }} kWh
Total Energy: {{ total_kwh }} kWh
{% else %}
Cannot perform calculations due to missing inputs.
{% endif %}
Issue | Possible Solution |
---|---|
SOC sensors show "unknown" | Verify all required helper entities are created with exact names |
"Missing input entity" error | Check that all input_number entities exist and have valid values |
SOC calculations don't update immediately | This issue has been fixed - SOC updates happen instantly when you change input values |
Automation errors | Update entity names in automations to match integration's naming pattern (eveus_ev_charger_*) |
Connection failures | Verify network connectivity, check IP address, username, and password |
Incorrect SOC calculations | Set initial SOC to match your EV's current charge level |
Wrong time display | Integration now handles timezone correctly including DST; restart HA if issues persist |
If you encounter persistent issues:
- Remove the integration
- Restart Home Assistant
- Delete any remaining eveus entities (if any)
- Add the integration again
- Recreate any missing input_number entities
For bugs and feature requests, please open an issue on GitHub.
This project is licensed under the MIT License - see the LICENSE file for details.