
Run smart EV charging locally, verify the web service, and add controlled remote access
evcc is an open-source EV charge controller and home energy management system designed to run on your own hardware. This guide installs the stable evcc package on an apt-based Linux distribution, starts the system service, configures the web interface, and verifies the local HTTP endpoint before any tunnel is created. After the local installation works, we show how to connect it to an HTTP tunnel with Localtonet. The result is a practical installation-first workflow for reaching the evcc interface or its REST API without configuring inbound router port forwarding.
What you are installing
evcc combines EV charging control with local home energy management. It can collect information such as grid consumption, solar production, household load, vehicle state of charge, and battery state. Depending on the configured equipment, it can use that information to coordinate charging, respond to available solar energy, work with dynamic electricity tariffs, and distribute available power across charging points.
The project includes a responsive web interface as well as REST and MQTT APIs for home automation integrations. Its plugin system supports technologies including HTTP, MQTT, Modbus, WebSocket, JavaScript, Go, and shell scripts. This makes evcc useful both as an interactive local application and as a service that other systems can query or control.
In this article, “evcc” refers to the evcc.io smart-charging and home energy management project. It should not be confused with the EV communication controller abbreviation used in ISO 15118 implementations.
Prerequisites and installation scope
The following installation procedure applies to apt-based Linux distributions such as Debian and Ubuntu. The official evcc documentation recommends its dedicated Linux image as the easier option for a Raspberry Pi. For other Linux distributions, use the current evcc Docker or manual installation documentation rather than adapting the APT commands without verification.
You need a Linux account with permission to run sudo, working internet access for package retrieval, and a browser for the initial web configuration. The logged-in Linux account must not be named evcc, because the package installation creates a dedicated user with that name.
The official installation procedure pipes the evcc repository setup script into a privileged shell. Confirm that you are using the current official evcc installation instructions and review the script if required by your security policy. Do not substitute an unverified repository URL.
Install evcc on Debian or Ubuntu
Install the required repository dependencies
Open a terminal on the Linux host and install the Debian keyring, archive keyring, HTTPS transport, and curl packages required by the documented APT setup.
sudo apt install -y debian-keyring debian-archive-keyring apt-transport-https curl
Add the stable evcc APT repository
Add the repository for the current stable release. The evcc documentation also offers an unstable repository, but nightly builds may be unstable and are not used in this installation.
curl -1sLf 'https://dl.evcc.io/public/evcc/stable/setup.deb.sh' | sudo -E bash
Update the package list and install evcc
Refresh APT metadata after adding the repository, then install the evcc package. The installation creates the dedicated evcc service account.
sudo apt update
sudo apt install -y evcc
Grant serial-device access if required
This step is needed only when your evcc configuration uses a serial interface. It adds the service account to the plugdev group so it can access applicable USB or serial devices without running as root.
sudo usermod -a -G plugdev evcc
Start the evcc system service
Start evcc through systemd. The packaged installation runs evcc as a background service rather than requiring a terminal session to remain open.
sudo systemctl start evcc
Open the local web interface
On the evcc host, open http://localhost:7070. Set an administrator password and configure your devices through the web interface. Do not continue to remote exposure until this local page loads correctly.
Configure evcc through the web interface

The web interface is the recommended configuration method. Settings entered there are saved automatically in the evcc database. Start with an administrator password, then add only the chargers, meters, vehicles, batteries, inverters, or other devices actually present in your installation. Hardware support does not guarantee that every device can be discovered automatically, so follow the current evcc instructions for each integration.
A traditional configuration-file workflow is also available. If you choose it, the configuration file must be stored at /etc/evcc.yaml. After creating or changing that file, restart the service:
sudo systemctl restart evcc
Do not maintain conflicting settings in multiple places without understanding how the installed evcc version handles them. For a new installation, the browser-based workflow is the simpler documented approach.
If you need to customize environment variables or command-line behavior for the APT installation, use sudo systemctl edit evcc. Do not edit /lib/systemd/system/evcc.service directly, because APT package updates can overwrite that file.
Verify the local service before creating a tunnel
Remote access cannot repair a service that is stopped, misconfigured, or unreachable locally. Verify the systemd service, review its logs, and load the web interface from the evcc host first. This separates application problems from tunneling or network problems.
Check the systemd service status
Confirm that systemd reports evcc as running. The output can also show recent startup failures and the active process.
sudo systemctl status evcc
Review recent log entries
Inspect the service journal for configuration errors, unavailable devices, permission problems, or startup failures.
sudo journalctl -u evcc --since "yesterday"
Load the loopback endpoint
Open http://127.0.0.1:7070 in a browser on the evcc computer. If the browser is on another computer in the same network, replace 127.0.0.1 with the verified IP address or hostname of the evcc host.
Confirm the configured devices behave correctly
Check that the interface displays the expected charging and energy information. If a meter, charger, or vehicle is not working, resolve that integration before introducing remote access.
Choose the correct Localtonet tunnel target

Once evcc works locally, an HTTP tunnel is the appropriate Localtonet tunnel family for its browser interface and HTTP-based API. The Localtonet client establishes an outbound connection to one of our relay servers. This provides a public URL without requiring an inbound router port-forwarding rule, a public IP address, firewall changes, or VPN setup.
The local target must be the IP address and port that the Localtonet client can actually reach. If the client runs on the same Linux host as evcc, the verified loopback endpoint uses 127.0.0.1 and port 7070. If the Localtonet client runs on another device, use the evcc host address that worked during LAN verification. Do not use 127.0.0.1 from a different computer, because loopback always refers to the computer on which the client is running.
| Access method | Best for | Important behavior |
|---|---|---|
| Local loopback | Testing on the evcc host | Use the documented local endpoint at 127.0.0.1:7070. |
| Local network address | Testing from another trusted LAN device | Use the verified hostname or IP address of the evcc computer instead of loopback. |
| Localtonet HTTP tunnel | Remote browser or HTTP API access | Maps a public HTTPS address to the reachable local evcc HTTP target while the client and tunnel are running. |
Expose the verified evcc service with Localtonet
Install and run the Localtonet client
Install the current Localtonet application on the Linux host running evcc or on another device that can reach the verified evcc endpoint. Use the installation method shown for your operating system in the current Localtonet dashboard or documentation.
Authenticate the intended device
Select the device using its device-specific authentication token. Treat this token as a secret and never place it in an article, script, public repository, screenshot, or shared configuration.
Select an available relay server
Choose a currently available server or region from the product interface. Availability can vary, so obtain the valid value from the dashboard rather than copying a hardcoded server code.
Create an HTTP tunnel to evcc
Create an HTTP tunnel and set its local target to the evcc address and port already proven to work. When the Localtonet client and evcc run on the same host, that target is normally 127.0.0.1 on port 7070. Use a verified LAN address when they run on different devices.
Start the tunnel
Creating a tunnel does not start it. Use the Start button, then wait for the selected client and tunnel to show that they are connected.
Test the assigned public address
Open the assigned public URL from a separate network and confirm that the evcc interface responds. If you need the REST API, use only API paths documented for your installed evcc version. This guide does not guess API routes, request bodies, or authentication behavior.
Set the evcc administrator password before starting the tunnel. Expose only the service you need, keep evcc and the host updated, protect Localtonet device tokens, and stop or delete the tunnel when remote access is no longer required. A tunnel provides connectivity, but it does not remove the need for application authentication, least privilege, and careful API-client credential handling.
Troubleshooting the connection path

If the public URL does not work, test the path in order. First confirm that sudo systemctl status evcc reports a running service. Next, open http://127.0.0.1:7070 on the evcc host. If the Localtonet client is on another machine, verify that the same machine can reach evcc through the chosen LAN address. Only after those checks should you inspect the Localtonet client connection, selected device, relay selection, local target, and tunnel state.
Remember that a configured tunnel is not necessarily active. The tunnel is available only while the selected Localtonet client is connected and the tunnel is running. Restarting evcc can temporarily make the target unavailable, while stopping the Localtonet client or tunnel removes public access even if evcc continues to work locally.
For maintenance, APT installations can be updated after checking evcc release notes for breaking changes. Refresh the package list and upgrade the package with the documented commands:
sudo apt update
sudo apt --only-upgrade install -y evcc
Test the local interface again after an update before relying on remote access. If you use a traditional configuration file, keep a backup of /etc/evcc.yaml. The database is typically stored at /var/lib/evcc/evcc.db, although the actual storage location should be confirmed in the evcc startup log.
Frequently asked questions
Which local port does the documented evcc Linux installation use?
The documented APT installation exposes the web interface at http://localhost:7070, and local verification uses http://127.0.0.1:7070. If you deliberately customize evcc networking, verify the resulting address and port before configuring Localtonet.
Should I configure evcc before creating the Localtonet tunnel?
Yes. Start evcc, set an administrator password, configure the required devices, inspect the service status and logs, and confirm that the local web interface works. This prevents local application errors from being mistaken for tunnel problems.
Can the Localtonet client run on a different device?
Yes, provided that device can reach the evcc HTTP service. Use the verified LAN IP address or hostname of the evcc host as the tunnel target. Do not use 127.0.0.1 unless the client runs on the same computer as evcc.
Does creating a Localtonet tunnel immediately make evcc reachable?
No. The tunnel must be started after it is created. Public access also depends on the selected Localtonet client being connected and the evcc service continuing to run.
Can I use the public URL for the evcc REST API?
An HTTP tunnel can carry HTTP requests to the same reachable evcc service. Use API routes and request formats documented for your installed evcc version, and preserve the application’s authentication requirements. Do not expose credentials in URLs, logs, scripts, or public repositories.
Does this setup require router port forwarding or a public IP address?
No. The Localtonet client establishes an outbound connection to our relay server, so the workflow does not require inbound router port forwarding or a public IP address.
Connect your verified evcc service with Localtonet
Install evcc, confirm that its local interface is working, secure the administrator account, and then create an HTTP tunnel to the verified local endpoint. With Localtonet, you can reach the service through an assigned public address while keeping the tunnel lifecycle under your control.
Get Started Free →