EVSTATS.ONLINE
Kezdőlap

Otthoni Docker

Otthoni Docker — teljes útmutató

Ez a leírás végigvezet azon, hogy a járműnapló a te gépeden fusson (natív Docker), az evstats.online pedig csak fiókot és felületet adjon. Nincs saját Tesla developer app: a Fleet API a közös evstats alkalmazáson megy, a Tesla-számla az üzemeltetőé.

1. Mit kapsz, és mit nem tárolunk nálunk

A te gépeden fut: Postgres, evstats-teslamate (Grafana nélküli TeslaMate-fork), TeslaMate API, Mosquitto, Cloudflare Tunnel.

Nincs gyári teslamate/grafana, nincs :3000-es dashboard, a TeslaMate UI-n nincs Dashboards menü. A grafikonok az evstats.online-on jelennek meg.

Az evstats.online-on marad: belépés, előfizetés, az API kulcs hash-e, a tunnel URL. GPS, VIN, utak, töltések, Tesla OAuth token: a te lemezeden. Ha a géped alszik, a dashboard: otthoni konténer nem elérhető.

2. Előfeltételek

• Linux (vagy Docker Desktop) Docker + Compose-szal.
• Az evstats-teslamate image Grafana nélkül (compose build a forkra, vagy evstats/teslamate:nogrfana). Nincs teslamate/grafana.
• Mindig bekapcsolt gép, ha élő webes adat kell.
• Ingyenes Cloudflare-fiók a Tunnelhez.
• evstats.online fiók, API kulcs, Otthoni Docker mód.
• Tesla-fiók a helyi TeslaMate UI-n (localhost:4000).

3. Fiók és API kulcs az evstats.online-on

1. Lépj be: https://evstats.online/login.php
2. Nyisd meg a Fiókom oldalt a tenantodon (pl. https://slug.evstats.online/account.php).
3. A „API hozzáférés” kártyán másold ki a kulcsot (szem ikon). Ez lesz az EVSTATS_API_TOKEN a .env-ben — ugyanaz, mint a TeslaMate API token.
4. Az „Otthoni Docker” kártyán válaszd: Otthoni Docker (adat nálad).
5. Az URL mezőt majd a Cloudflare Tunnel https címével töltöd ki (5. lépés). Előtte is elmentheted a módot.

4. Cloudflare Tunnel (titkosított kapcsolat)

A router nem engedi befelé a hubot. A cloudflared konténer kifelé, TLS-sel kapcsolódik.

1. Regisztrálj: https://one.dash.cloudflare.com/
2. Zero Trust → Networks → Tunnels → Create a tunnel → Cloudflared.
3. Másold a Tunnel tokent a .env CLOUDFLARE_TUNNEL_TOKEN mezőjébe.
4. Public hostname: adj egy https címet (saját domain aldomainje, vagy a Cloudflare által adott *.cfargotunnel.com).
5. Service type: HTTP. URL: http://teslamateapi:8080 (a compose belső neve, ne localhost).
6. Mentsd. A nyilvános cím pl. https://teslamateapi.valami.cfargotunnel.com — ezt írd a Fiókom „Otthoni API URL” mezőbe, záró perjel nélkül.

5. Fájlok a gépeden

Hozz létre egy mappát, pl. ~/evstats-home. Másold bele a lenti három fájlt: docker-compose.yml, .env, mosquitto-no-auth.conf. Az oldal alján mindhárom letölthető.

A .env-ben töltsd ki:
• EVSTATS_API_TOKEN — a Fiókom API kulcsa
• CLOUDFLARE_TUNNEL_TOKEN — a CF tunnel token
• DATABASE_PASS — erős helyi jelszó
• ENCRYPTION_KEY — pl. openssl rand -hex 32 (ezt soha ne küldd a hubra)
• TESLA_AUTH_CLIENT_ID — hagyd a mintában lévőt (közös evstats app, nem titok)
• TZ=Europe/Budapest

Ne commitold a .env fájlt. A Tesla CLIENT_SECRET nem kell, és nem is szabad a gépedre tenni ebből a körből.

# Másold .env névre és töltsd ki. Soha ne commitold a .env fájlt.

# A Fiókom oldalon generált kulcs (ugyanaz, mint a TeslaMate API token)
EVSTATS_API_TOKEN=

# A Cloudflare Tunnel nyilvános URL-je (ezt írd be az evstats.online Fiókomba is)
# pl. https://teslamateapi.example.cfargotunnel.com
HOME_PUBLIC_URL=

# Cloudflare Zero Trust → Networks → Tunnels → token
CLOUDFLARE_TUNNEL_TOKEN=

# TeslaMate adatbázis jelszó (helyi, erős)
DATABASE_PASS=

# TeslaMate titkosító kulcs (helyi, 32+ karakter, soha ne a hubra)
ENCRYPTION_KEY=

# Közös evstats Fleet API alkalmazás — ez NEM titok (client_id).
# A Tesla-számla az evstats üzemeltetőjénél marad ebben a körben.
TESLA_AUTH_CLIENT_ID=6dd3aca8-3d8a-4150-9b89-d55dde3f6370

TESLA_API_HOST=https://fleet-api.prd.eu.vn.cloud.tesla.com
TZ=Europe/Budapest
# evstats.online — otthoni natív Docker stack
# Hivatalos image-ek. Nincs saját agent.
# https://github.com/ — lásd README.md

services:
  database:
    image: postgres:17
    restart: unless-stopped
    environment:
      POSTGRES_USER: teslamate
      POSTGRES_PASSWORD: ${DATABASE_PASS}
      POSTGRES_DB: teslamate
    volumes:
      - teslamate-db:/var/lib/postgresql/data
    healthcheck:
      test: ["CMD-SHELL", "pg_isready -U teslamate"]
      interval: 10s
      timeout: 5s
      retries: 10

  teslamate:
    # Grafana nélküli evstats fork (AGPL). Gyári teslamate/teslamate + teslamate/grafana NINCS.
    image: evstats/teslamate:nogrfana
    build:
      context: ../evstats-teslamate
      dockerfile: Dockerfile
    restart: unless-stopped
    depends_on:
      database:
        condition: service_healthy
    environment:
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - DATABASE_USER=teslamate
      - DATABASE_PASS=${DATABASE_PASS}
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - DATABASE_PORT=5432
      - MQTT_HOST=mosquitto
      - TZ=${TZ:-Europe/Budapest}
      - CAPTIVE_PORTAL=false
      - TESLA_API_HOST=${TESLA_API_HOST:-https://fleet-api.prd.eu.vn.cloud.tesla.com}
      - TESLA_AUTH_HOST=https://fleet-auth.prd.vn.cloud.tesla.com
      - TESLA_AUTH_PATH=/oauth2/v3
      - TESLA_AUTH_CLIENT_ID=${TESLA_AUTH_CLIENT_ID}
    ports:
      - "127.0.0.1:4000:4000"

  teslamateapi:
    image: tobiasehlert/teslamateapi:latest
    restart: unless-stopped
    depends_on:
      database:
        condition: service_healthy
    environment:
      - ENCRYPTION_KEY=${ENCRYPTION_KEY}
      - DATABASE_USER=teslamate
      - DATABASE_PASS=${DATABASE_PASS}
      - DATABASE_NAME=teslamate
      - DATABASE_HOST=database
      - DATABASE_PORT=5432
      - MQTT_HOST=mosquitto
      - TZ=${TZ:-Europe/Budapest}
      - API_TOKEN=${EVSTATS_API_TOKEN}
    expose:
      - "8080"

  mosquitto:
    image: eclipse-mosquitto:2
    restart: unless-stopped
    command: mosquitto -c /mosquitto-no-auth.conf
    volumes:
      - ./mosquitto-no-auth.conf:/mosquitto-no-auth.conf:ro

  cloudflared:
    image: cloudflare/cloudflared:latest
    restart: unless-stopped
    command: tunnel --no-autoupdate run
    environment:
      - TUNNEL_TOKEN=${CLOUDFLARE_TUNNEL_TOKEN}
    depends_on:
      - teslamateapi

volumes:
  teslamate-db:
listener 1883
allow_anonymous true
persistence false

6. Indítás

A mappában (az evstats-teslamate fork a compose mellett legyen, Grafana nélkül):

docker compose build teslamate
docker compose up -d
docker compose ps

Nincs Grafana, nincs :3000. A TeslaMate UI csak a gépeden: http://127.0.0.1:4000 — Tesla belépés és autó párosítás. A grafikonok az evstats.online dashboardon.

A virtual key a közös evstats/evtolto domainhez tartozik.

7. Összekötés a webes felülettel

1. Fiókom → Otthoni Docker mód bekapcsolva.
2. Otthoni API URL = a tunnel https címe (ugyanaz, mint HOME_PUBLIC_URL lenne).
3. Mentés.
4. Dashboard: ha a tunnel él, zöld sáv („Otthoni konténer kapcsolódva”). Ha nem, sárga sáv.
5. Az Insights oldal home módban a dashboardra visz: a részletes SQL nálunk nincs, a napló nálad van. A TeslaMate UI (localhost:4000) a teljes előzmény.

Kulcs csere: Fiókom → új API token → írd be a .env EVSTATS_API_TOKEN-be → docker compose up -d teslamateapi

8. Napi használat és leállítás

Élő webes adat: a compose fusson, a gép ne aludjon, a tunnel legyen healthy (Cloudflare dashboard).

Leállítás: docker compose down — a volume (teslamate-db) megmarad, a napló nem vész el.

Frissítés: docker compose pull && docker compose up -d

Az evstats fiók törlése NEM törli a te Docker volume-odat. Állítsd le a compose-t, ha már nem kell.

9. Biztonság

• TeslaMate 4000 csak 127.0.0.1.
• A tunnel csak a teslamateapi:8080-at húzza ki; minden kéréshez kell az API token.
• ENCRYPTION_KEY, DATABASE_PASS, Tesla token soha ne kerüljön e-mailbe vagy az evstats szerverre.
• A Tesla CLIENT_SECRET-et ne másold a .env-be.
• A Cloudflare-fiók és a tunnel token a tied; ha kompromittálódik, rotáld a tunnelt és az API kulcsot.

10. Tesla-számla (fontos)

Otthon a TeslaMate a közös evstats TESLA_AUTH_CLIENT_ID-vel hívja a Fleet API-t. A Tesla pay-per-use számla az üzemeltetőé, nem a tied. A sűrű poll a mi Tesla-költségünket növeli. A saját Tesla developer app ebben a körben nincs. Leapmotor (későbbi profil) nem Tesla-számla.

11. Hibaelhárítás

Dashboard sárga / nem elérhető: docker compose ps; cloudflared log: docker compose logs cloudflared; a CF hostname HTTP URL-je teslamateapi:8080 legyen, ne a 4000.

401 a weben: az EVSTATS_API_TOKEN nem egyezik a Fiókom kulccsal, vagy a teslamateapi nem indult újra tokencsere után.

TeslaMate nem kér autót: nyisd a http://127.0.0.1:4000-et a Docker hoston, ne a tunnelen.

Adatbázis: a volume neve teslamate-db. docker compose down -v TÖRÖLI a naplót — ne használd, ha kellenek az utak.

Fájlok letöltése