tutorial

Monitoring EVCC with Vigilmon

EVCC optimizes EV charging from solar surplus, balancing chargers, vehicles, and inverters in real time — a silent crash means your car charges from the grid instead of your roof. Here's how to monitor every component with Vigilmon.

EVCC (Electric Vehicle Charge Controller) is an open-source smart charging manager written in Go that maximizes solar self-consumption by coordinating your EV charger, solar inverter, grid meter, home battery, and vehicle APIs in real time. It exposes a web UI and REST API on port 7070. When EVCC crashes or loses its vehicle API connection, your EV starts drawing from the grid instead of your roof — often without any visible indication. Vigilmon watches every integration point so you catch failures before they cost you in electricity bills.

What You'll Set Up

  • Web UI and API availability monitor (port 7070)
  • EV charger connectivity check (OCPP/Modbus/HTTP)
  • Vehicle API integration health (Tesla/BMW/VW/etc.)
  • Solar inverter and meter data feed health
  • Grid meter connectivity monitor
  • Charge plan scheduler service check
  • Load balancing controller health
  • MQTT integration endpoint monitor
  • SQLite database connectivity check
  • Scheduled charging automation heartbeat
  • EVCC process heartbeat

Prerequisites

  • EVCC installed and running (binary or Docker)
  • EVCC accessible on port 7070
  • A free Vigilmon account

Step 1: Monitor the Web UI and REST API

EVCC serves its web UI and REST API on the same port 7070. A single monitor covers both:

  1. Log in to vigilmon.online and click Add Monitor.
  2. Set Type to HTTP / HTTPS.
  3. Enter http://your-evcc-host:7070.
  4. Set Check interval to 1 minute.
  5. Set Expected HTTP status to 200.
  6. Click Save.

Add a second monitor specifically for the API health endpoint:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/state.
  3. Expected status: 200.
  4. Body contains: "result" (EVCC API wraps all responses in a result envelope).
  5. Check interval: 1 minute.

The /api/state endpoint returns the full EVCC state including charger, vehicle, and inverter readings — a successful JSON response with "result" confirms the core runtime is healthy.


Step 2: Monitor EV Charger Connectivity

EVCC communicates with chargers via OCPP, Modbus, or HTTP APIs. When the charger goes offline or the protocol handler disconnects, EVCC can't control charging. Probe the charger's connectivity status via the EVCC API:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/loadpoints/0/status.
  3. Expected status: 200.
  4. Body contains: "chargerStatus" (any non-null status means EVCC can see the charger).
  5. Check interval: 2 minutes.

If your charger exposes its own HTTP status endpoint, add a direct monitor too:

  1. Add monitor — Type: HTTP / HTTPS or TCP Port.
  2. URL/Host+Port: charger-specific (e.g., http://192.168.1.100/status for a go-e Charger).
  3. Check interval: 2 minutes.

For OCPP chargers, monitor the OCPP WebSocket port (typically 8887):

  1. Type: TCP Port.
  2. Host: your-evcc-host, Port: 8887.
  3. Check interval: 2 minutes.

Step 3: Monitor Vehicle API Integration

EVCC polls vehicle APIs (Tesla, BMW ConnectedDrive, Volkswagen WeConnect, etc.) to get State of Charge (SoC) and set charging limits. These API connections expire, rotate credentials, or hit rate limits. Monitor via the EVCC loadpoint SoC endpoint:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/vehicles/0/soc.
  3. Expected status: 200.
  4. Body contains: "result".
  5. Check interval: 5 minutes.

A null SoC value means the vehicle API is unreachable. For a tighter check, use a keyword assertion that rejects null:

Add Body does NOT contain: "result":null — some Vigilmon plans support negative keyword matching; if not, use the heartbeat pattern below.

For a heartbeat-based approach, run a probe script that checks the EVCC state for non-null SoC:

#!/bin/bash
# probe-evcc-vehicle.sh
SOC=$(curl -fsS "http://your-evcc-host:7070/api/vehicles/0/soc" \
  | python3 -c "import sys,json; d=json.load(sys.stdin); print(d['result'])")

if [ "$SOC" != "None" ] && [ "$SOC" != "null" ]; then
  curl -fsS "https://vigilmon.online/api/push/YOUR_VEHICLE_HEARTBEAT_KEY" > /dev/null
fi

Run every 5 minutes and set Expected interval to 10 minutes in Vigilmon.


Step 4: Monitor Solar Inverter and Meter Data Feed

EVCC reads solar production from your inverter or meter to determine how much surplus is available for charging. A stale inverter reading means EVCC will charge at the wrong rate:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/state.
  3. Expected status: 200.
  4. Body contains: "pvPower" (confirms the PV channel is present in state).
  5. Check interval: 2 minutes.

For a deeper check, probe the inverter directly (Fronius, SMA, Huawei, etc.):

# Fronius Solar API example
http://192.168.1.50/solar_api/v1/GetPowerFlowRealtimeData.fcgi

Add this as an HTTP monitor with Body contains: "Status":"0" (Fronius OK status).


Step 5: Monitor Grid Meter Connectivity

The grid meter tells EVCC whether the house is importing or exporting power — essential for solar surplus calculation. A missing grid reading causes EVCC to fall back to a safe (non-optimized) charging mode:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/state.
  3. Body contains: "gridPower".
  4. Check interval: 1 minute.

If your grid meter has its own HTTP interface (Shelly EM, KOSTAL, Tibber Pulse, etc.), add a direct monitor:

  1. Type: HTTP / HTTPS or TCP Port.
  2. Point to the meter's own status endpoint or port.
  3. Check interval: 1 minute.

Step 6: Monitor the Charge Plan Scheduler

EVCC's charge planner allows scheduling "charge to 80% by 7 AM" type automations. The planner depends on the core runtime being healthy and the vehicle SoC being available. Monitor plan status:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/loadpoints/0/plan.
  3. Expected status: 200.
  4. Body contains: "result".
  5. Check interval: 5 minutes.

Step 7: Monitor Load Balancing Controller

If you use EVCC's phase switching or household load management features, the load balancing controller must stay in sync with your house meter. Monitor its state:

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/state.
  3. Body contains: "homePower" (home power consumption — zero or missing means load management is blind).
  4. Check interval: 2 minutes.

Step 8: Monitor MQTT Integration

Many EVCC setups push state to Home Assistant or other automation platforms via MQTT. Monitor the MQTT broker's port:

  1. Add monitor — Type: TCP Port.
  2. Host: your-mqtt-broker-host, Port: 1883 (or 8883 for TLS).
  3. Check interval: 2 minutes.

For a topic-level check, run a probe that subscribes and asserts a recent message:

#!/bin/bash
# probe-evcc-mqtt.sh
MSG=$(mosquitto_sub -h your-mqtt-broker -t "evcc/#" -C 1 -W 10)
if [ -n "$MSG" ]; then
  curl -fsS "https://vigilmon.online/api/push/YOUR_MQTT_HEARTBEAT_KEY" > /dev/null
fi

Run every 2 minutes via cron with Expected interval of 5 minutes in Vigilmon.


Step 9: Monitor SQLite Database Connectivity

EVCC logs historical charging sessions to a SQLite database. A corrupted or locked SQLite file causes EVCC to fail on startup or silently lose session data:

Add a probe that checks the EVCC sessions API (backed by SQLite):

  1. Add monitor — Type: HTTP / HTTPS.
  2. URL: http://your-evcc-host:7070/api/sessions.
  3. Expected status: 200.
  4. Body contains: "result".
  5. Check interval: 5 minutes.

For a direct SQLite integrity check, run periodically:

#!/bin/bash
# probe-evcc-sqlite.sh
DB_PATH="/path/to/evcc.db"
if sqlite3 "$DB_PATH" "PRAGMA integrity_check;" | grep -q "^ok$"; then
  curl -fsS "https://vigilmon.online/api/push/YOUR_SQLITE_HEARTBEAT_KEY" > /dev/null
fi

Step 10: EVCC Process Heartbeat

Ensure the EVCC Go process itself is alive with a systemd-based heartbeat:

# /etc/systemd/system/evcc-heartbeat.service
[Unit]
Description=EVCC Vigilmon heartbeat
After=evcc.service

[Service]
Type=oneshot
ExecStart=/usr/bin/curl -fsS "https://vigilmon.online/api/push/YOUR_PROCESS_HEARTBEAT_KEY"
# /etc/systemd/system/evcc-heartbeat.timer
[Unit]
Description=Run EVCC heartbeat every minute

[Timer]
OnBootSec=60
OnUnitActiveSec=60
After=evcc.service

[Install]
WantedBy=timers.target
systemctl daemon-reload
systemctl enable --now evcc-heartbeat.timer

In Vigilmon, create a Heartbeat monitor with Expected interval: 2 minutes.


Alerting Configuration

  1. In Vigilmon, go to Alert Channels and add your preferred destination (email, Telegram, Slack, webhook to Home Assistant).
  2. Set Alert after: 2 consecutive failures for web UI and API monitors.
  3. Set Alert after: 1 failure for the vehicle API heartbeat — a missed SoC update means unoptimized charging.
  4. Set Alert after: 1 missed heartbeat for the process heartbeat.
  5. Enable Recovery alerts so you know when EVCC reconnects to a vehicle or inverter after a blip.

Summary

| Monitor | Type | Interval | |---|---|---| | Web UI (port 7070) | HTTP | 1 min | | REST API /api/state | HTTP + keyword | 1 min | | EV charger connectivity | HTTP + keyword | 2 min | | OCPP port (8887) | TCP Port | 2 min | | Vehicle API SoC | Heartbeat | 10 min | | Solar inverter data feed | HTTP + keyword | 2 min | | Grid meter | HTTP + keyword | 1 min | | Charge plan scheduler | HTTP + keyword | 5 min | | Load balancing controller | HTTP + keyword | 2 min | | MQTT broker port | TCP Port | 2 min | | MQTT topic freshness | Heartbeat | 5 min | | SQLite API / integrity | HTTP + keyword | 5 min | | EVCC process (systemd) | Heartbeat | 2 min |

EVCC sits between your solar production, your grid connection, and your vehicle — a crash or stale sensor reading silently costs money every time your car charges. These monitors give you visibility into every integration point so a dropped Tesla API token or a Modbus timeout triggers an alert before your morning commute drains from the grid.

Sign up for a free Vigilmon account to get started.

Monitor your app with Vigilmon

Free plan — 5 monitors, no credit card required. Up and running in 60 seconds.

Start free →