Zum Inhalt

⚡ evcc Integration

Übersicht

Integration mit evcc für Wallbox-Management und Ladestatistiken.

Features

  • ✅ Systemstatus (PV, Batterie, Netz)
  • ✅ Ladepunkte überwachen
  • ✅ Ladevorgänge abrufen
  • ✅ Verbrauchsberechnung
  • ✅ Lademodus steuern
  • ✅ Tarife abrufen

Setup

1. evcc installieren

Siehe docs.evcc.io

2. Environment konfigurieren

EVCC_HOST=http://192.168.1.100:7070

3. Verbindung testen

curl http://localhost:3000/api/integrations/evcc/test

Response:

{
  "online": true,
  "siteTitle": "Zuhause",
  "loadpoints": 2,
  "configured": true
}

API Referenz

EvccBridge

import { EvccBridge } from '@integrations/evcc';

const evcc = new EvccBridge(process.env.EVCC_HOST);

// Status
const state = await evcc.getState();
console.log(`PV: ${state.pvPower}W, Grid: ${state.gridPower}W`);

// Ladepunkte
const loadpoints = await evcc.getLoadpoints();
loadpoints.forEach(lp => {
  console.log(`${lp.title}: ${lp.charging ? 'Lädt' : 'Bereit'}`);
});

// Sessions
const sessions = await evcc.getSessionsForMonth(2024, 12);

// Verbrauch berechnen
const stats = await evcc.calculateConsumption(2024, 12);
console.log(`Solar: ${stats.solarEnergy} kWh (${Math.round(stats.solarEnergy/stats.totalEnergy*100)}%)`);

// Modus setzen
await evcc.setMode(0, 'pv'); // Ladepunkt 0 auf PV-Modus

Lademodi

Mode Icon Description
off 🔴 Laden deaktiviert
now Sofort laden (volle Leistung)
minpv 🌤️ Minimum + PV-Überschuss
pv ☀️ Nur PV-Überschuss

Datenmodell

State

interface EvccState {
  siteTitle?: string;
  gridPower: number;      // Netzbezug (+ = Bezug, - = Einspeisung)
  homePower: number;      // Hausverbrauch
  pvPower: number;        // PV-Erzeugung
  batteryPower?: number;  // Batterie (+ = Laden, - = Entladen)
  batterySoc?: number;    // Batterie Ladestand %
  loadpoints: Loadpoint[];
}

Session

interface EvccSession {
  id: number;
  created: string;
  finished?: string;
  loadpoint: string;
  chargedEnergy: number;    // Wh
  solarPercentage: number;  // % Solaranteil
  price?: number;           // Kosten in €
}

Use Cases

Nebenkostenabrechnung

Ladevorgänge pro Mieter berechnen:

const sessions = await evcc.getSessionsForMonth(2024, 12);
const stats = await evcc.calculateConsumption(2024, 12);

// Für Abrechnung
const invoice = {
  period: '12/2024',
  totalKwh: stats.totalEnergy,
  solarKwh: stats.solarEnergy,
  gridKwh: stats.gridEnergy,
  cost: stats.totalCost,
  sessions: stats.sessions,
};

Best Practices

Cache TTL

evcc State hat kurze TTL (10s) da sich Werte schnell ändern.

Netzwerk

evcc muss im selben Netzwerk erreichbar sein. Für Remote-Zugriff VPN oder Cloudflare Tunnel nutzen.