Prepare Home Assistant weather export to InfluxDB
Prepare Home Assistant weather export to InfluxDB
This commit is contained in:
@@ -290,8 +290,8 @@ Legende Status:
|
|||||||
| `glances` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `glances.kaleschke.info` | — |
|
| `glances` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `glances.kaleschke.info` | — |
|
||||||
| `scrutiny` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `scrutiny.kaleschke.info`, Git-Stack | `privileged` später prüfen |
|
| `scrutiny` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `scrutiny.kaleschke.info`, Git-Stack | `privileged` später prüfen |
|
||||||
| `speedtest-tracker` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `speedtest.kaleschke.info` | — |
|
| `speedtest-tracker` | ✅ | `frontend_net` | Traefik + Middleware | aktiv via `speedtest.kaleschke.info` | — |
|
||||||
| `grafana` | ✅ vorbereitet | `frontend_net`, `grafana_influx_internal` | Traefik + Middleware | vorbereitet via `grafana.kaleschke.info`, InfluxDB-Datenquelle provisioniert | Secrets anlegen, Deploy offen |
|
| `grafana` | ✅ | `frontend_net`, `grafana_influx_internal` | Traefik + Middleware | aktiv via `grafana.kaleschke.info`, InfluxDB-Datenquelle provisioniert | Wetter-/HA-Dashboard aufbauen |
|
||||||
| `influxdb3-core` | ✅ vorbereitet | `grafana_influx_internal` | intern | InfluxDB 3 Core fuer Metriken; keine direkte Host-/Traefik-Freigabe | Token und Datenbank `homelab` anlegen, Deploy offen |
|
| `influxdb3-core` | ✅ | `grafana_influx_internal` + optional LAN-Bind | LAN-Port nur fuer interne Writer | InfluxDB 3 Core fuer Metriken; keine Traefik-/Public-Freigabe | HA-Write-Token und Sensor-Export finalisieren |
|
||||||
|
|
||||||
### 7.7 Noch offene Sonderfälle
|
### 7.7 Noch offene Sonderfälle
|
||||||
|
|
||||||
@@ -528,8 +528,8 @@ Mutable Tags wie `latest`, `stable`, `release` oder reine Major-Tags wurden auf
|
|||||||
### BentoPDF und Grafana/InfluxDB vorbereitet (2026-04-30)
|
### BentoPDF und Grafana/InfluxDB vorbereitet (2026-04-30)
|
||||||
- `bentopdf` ersetzt repo-seitig `stirling-pdf` auf der bestehenden Domain `pdf.kaleschke.info`, bleibt aber bis zum bewussten Komodo-Deploy nur vorbereitet.
|
- `bentopdf` ersetzt repo-seitig `stirling-pdf` auf der bestehenden Domain `pdf.kaleschke.info`, bleibt aber bis zum bewussten Komodo-Deploy nur vorbereitet.
|
||||||
- BentoPDF benoetigt fuer Office-Konvertierung die Cross-Origin-Isolation-Header `Cross-Origin-Opener-Policy: same-origin` und `Cross-Origin-Embedder-Policy: require-corp`; diese werden per Traefik-Docker-Middleware gesetzt.
|
- BentoPDF benoetigt fuer Office-Konvertierung die Cross-Origin-Isolation-Header `Cross-Origin-Opener-Policy: same-origin` und `Cross-Origin-Embedder-Policy: require-corp`; diese werden per Traefik-Docker-Middleware gesetzt.
|
||||||
- `grafana` wird als geschuetztes Monitoring-UI unter `grafana.kaleschke.info` vorbereitet.
|
- `grafana` wird als geschuetztes Monitoring-UI unter `grafana.kaleschke.info` betrieben.
|
||||||
- `influxdb3-core` bleibt als interne Datenbank ohne direkten Host-Port im Compose-internen Netz `grafana_influx_internal`.
|
- `influxdb3-core` bleibt ohne Traefik-/Public-Route; fuer interne Writer wie Home Assistant kann Port `8181` per `INFLUXDB_BIND_IP` auf eine LAN-Adresse gebunden werden.
|
||||||
- InfluxDB 3 Core nutzt einen festen Versionstag statt `latest`, weil der InfluxDB-`latest`-Tag versionsstrategisch im Umbruch ist.
|
- InfluxDB 3 Core nutzt einen festen Versionstag statt `latest`, weil der InfluxDB-`latest`-Tag versionsstrategisch im Umbruch ist.
|
||||||
|
|
||||||
### ddns-updater — Netz-Ausnahme
|
### ddns-updater — Netz-Ausnahme
|
||||||
|
|||||||
@@ -64,4 +64,4 @@ Bei Restore-, Host-Ausfall- oder Wiederanlauf-Fragen zusaetzlich:
|
|||||||
- Mutable Image-Tags sind auf die aktuell laufenden Digests eingefroren; echte Versions-Upgrades erfolgen bewusst separat.
|
- Mutable Image-Tags sind auf die aktuell laufenden Digests eingefroren; echte Versions-Upgrades erfolgen bewusst separat.
|
||||||
- Disaster-Recovery und dienstspezifische Restore-Quellen sind in `docs/DISASTER_RECOVERY.md` und `docs/RESTORE_MATRIX.md` beschrieben.
|
- Disaster-Recovery und dienstspezifische Restore-Quellen sind in `docs/DISASTER_RECOVERY.md` und `docs/RESTORE_MATRIX.md` beschrieben.
|
||||||
- Der verbindliche Detailablauf steht in `docs/WORKFLOW.md`.
|
- Der verbindliche Detailablauf steht in `docs/WORKFLOW.md`.
|
||||||
- `nextcloud`, `bentopdf` und `grafana-influxdb` sind repo-seitig vorbereitet und folgen dem dokumentierten Netz-/Secret-/Traefik-Modell.
|
- `nextcloud`, `bentopdf` und `grafana-influxdb` folgen dem dokumentierten Netz-/Secret-/Traefik-Modell; Grafana/InfluxDB ist fuer Home-Assistant-Wetterdaten vorbereitet.
|
||||||
|
|||||||
@@ -0,0 +1,112 @@
|
|||||||
|
# Home Assistant -> InfluxDB 3 -> Grafana
|
||||||
|
|
||||||
|
Ziel: Home Assistant schreibt ausgewaehlte Ecowitt- und Energiesensoren nach InfluxDB 3 Core. Grafana bleibt das Langzeit-Dashboard, Home Assistant bleibt die Automationszentrale.
|
||||||
|
|
||||||
|
## 1. InfluxDB fuer Home Assistant erreichbar machen
|
||||||
|
|
||||||
|
Der Stack haelt InfluxDB bewusst ohne Traefik-Route. Fuer Home Assistant wird nur der HTTP-Port `8181` auf einer internen LAN-Adresse veroeffentlicht.
|
||||||
|
|
||||||
|
In Komodo/Stack-Environment fuer `ops/grafana-influxdb` setzen:
|
||||||
|
|
||||||
|
```env
|
||||||
|
INFLUXDB_BIND_IP=192.168.178.X
|
||||||
|
```
|
||||||
|
|
||||||
|
`192.168.178.X` ist die LAN-IP des Docker-Hosts, auf dem `influxdb3-core` laeuft. Nicht `0.0.0.0` verwenden, wenn es nicht notwendig ist.
|
||||||
|
|
||||||
|
Danach den Stack neu deployen und von Home Assistant aus pruefen:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
curl -I http://192.168.178.X:8181/health
|
||||||
|
```
|
||||||
|
|
||||||
|
## 2. Token fuer Home Assistant
|
||||||
|
|
||||||
|
Am besten einen eigenen Write-Token fuer Home Assistant verwenden. Fuer den ersten Test kann der bestehende Admin-Token funktionieren; langfristig sollte der HA-Token nur in die Datenbank `homelab` schreiben duerfen.
|
||||||
|
|
||||||
|
Den Token in Home Assistant eintragen:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
# /homeassistant/secrets.yaml
|
||||||
|
influxdb3_homeassistant_token: "apiv3_REPLACE_WITH_WRITE_TOKEN"
|
||||||
|
```
|
||||||
|
|
||||||
|
## 3. Home Assistant konfigurieren
|
||||||
|
|
||||||
|
Minimaler Startblock fuer `/homeassistant/configuration.yaml`:
|
||||||
|
|
||||||
|
```yaml
|
||||||
|
influxdb:
|
||||||
|
api_version: 2
|
||||||
|
ssl: false
|
||||||
|
host: 192.168.178.X
|
||||||
|
port: 8181
|
||||||
|
token: !secret influxdb3_homeassistant_token
|
||||||
|
organization: homelab
|
||||||
|
bucket: homelab
|
||||||
|
max_retries: 3
|
||||||
|
default_measurement: state
|
||||||
|
include:
|
||||||
|
entity_globs:
|
||||||
|
- sensor.*ecowitt*
|
||||||
|
- sensor.*gw*
|
||||||
|
- sensor.netzbezug_live
|
||||||
|
- sensor.ins_netz_live
|
||||||
|
- sensor.ins_haus_live
|
||||||
|
- sensor.pv_ueberschuss_live
|
||||||
|
- sensor.batterie_soc_live
|
||||||
|
- sensor.wallbox_leistung_live
|
||||||
|
- sensor.pv_produktion_heute
|
||||||
|
- sensor.wallbox_energie_heute
|
||||||
|
```
|
||||||
|
|
||||||
|
Die `sensor.*gw*`-Regel ist nur ein Startpunkt, weil Ecowitt-Gateways haeufig `gw...` im Entity-Namen haben. Nach dem ersten Export in Grafana pruefen und die Liste enger machen.
|
||||||
|
|
||||||
|
Nach dem Edit:
|
||||||
|
|
||||||
|
```bash
|
||||||
|
ha core check
|
||||||
|
ha core restart
|
||||||
|
```
|
||||||
|
|
||||||
|
## 4. Grafana Smoke-Test
|
||||||
|
|
||||||
|
In Grafana mit der bestehenden Datenquelle `InfluxDB 3 Core` eine SQL-Abfrage testen:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SHOW TABLES
|
||||||
|
```
|
||||||
|
|
||||||
|
Danach eine konkrete Tabelle pruefen. Home Assistant schreibt Measurements je nach Konfiguration und Entity-Typ; typische Tabellen sind `state`, `degC`, `%`, `W`, `kWh` oder aehnliche Measurement-Namen.
|
||||||
|
|
||||||
|
Beispiel fuer die ersten Werte:
|
||||||
|
|
||||||
|
```sql
|
||||||
|
SELECT *
|
||||||
|
FROM state
|
||||||
|
ORDER BY time DESC
|
||||||
|
LIMIT 20
|
||||||
|
```
|
||||||
|
|
||||||
|
## 5. Dashboard-Kandidaten
|
||||||
|
|
||||||
|
Sinnvolle Panels fuer das erste Wetter-Dashboard:
|
||||||
|
|
||||||
|
- Aussentemperatur und Luftfeuchte
|
||||||
|
- Luftdruck
|
||||||
|
- Windgeschwindigkeit und Boeen
|
||||||
|
- Regenrate und Regen heute
|
||||||
|
- UV und Solarstrahlung
|
||||||
|
- Batterielevel der Ecowitt-Sensoren
|
||||||
|
- PV-Ueberschuss vs. Wetter
|
||||||
|
- Wallbox-Leistung vs. PV-Ueberschuss
|
||||||
|
|
||||||
|
## 6. Erste Automationen
|
||||||
|
|
||||||
|
Home Assistant bleibt fuer Reaktionen zustaendig:
|
||||||
|
|
||||||
|
- Regen startet -> Dachfenster/Fenster pruefen
|
||||||
|
- Windboee ueber Grenzwert -> Markise/Rolllaeden schuetzen
|
||||||
|
- Frostwarnung -> Garten/Wasser/Auto-Hinweis
|
||||||
|
- Genug Regen heute -> Bewaesserung ueberspringen
|
||||||
|
- Ecowitt-Batterie niedrig -> ntfy/HA-Benachrichtigung
|
||||||
@@ -71,10 +71,10 @@ Dieses Dokument ist nur noch ein historischer Verlauf. Der aktuelle operative Ab
|
|||||||
|
|
||||||
- `stirling-pdf` repo-seitig durch `bentopdf` ersetzt; Domain `pdf.kaleschke.info` bleibt erhalten.
|
- `stirling-pdf` repo-seitig durch `bentopdf` ersetzt; Domain `pdf.kaleschke.info` bleibt erhalten.
|
||||||
- BentoPDF laeuft als geschuetztes browserseitiges PDF-Tool hinter `authelia@file,secure-headers@file` und setzt zusaetzlich COOP/COEP-Header fuer SharedArrayBuffer-basierte Office-Konvertierung.
|
- BentoPDF laeuft als geschuetztes browserseitiges PDF-Tool hinter `authelia@file,secure-headers@file` und setzt zusaetzlich COOP/COEP-Header fuer SharedArrayBuffer-basierte Office-Konvertierung.
|
||||||
- `ops/grafana-influxdb` als neuer Monitoring-Stack vorbereitet, aber noch nicht deployed.
|
- `ops/grafana-influxdb` als neuer Monitoring-Stack vorbereitet und spaeter in Betrieb genommen.
|
||||||
- Grafana wird hinter Traefik + Authelia unter `grafana.kaleschke.info` geplant.
|
- Grafana laeuft hinter Traefik + Authelia unter `grafana.kaleschke.info`.
|
||||||
- InfluxDB 3 Core bleibt intern im Compose-Netz und wird ueber eine provisionierte Grafana-Datenquelle angebunden.
|
- InfluxDB 3 Core bleibt ohne Public Route und wird ueber eine provisionierte Grafana-Datenquelle angebunden.
|
||||||
- Secrets fuer Grafana-Admin-Passwort, InfluxDB-Admin-Token und Grafana-Datasource-Token sind als Host-Dateien unter `/mnt/user/appdata/secrets/` dokumentiert und muessen vor dem ersten Deploy angelegt werden.
|
- Secrets fuer Grafana-Admin-Passwort, InfluxDB-Admin-Token und Grafana-Datasource-Token sind als Host-Dateien unter `/mnt/user/appdata/secrets/` dokumentiert.
|
||||||
|
|
||||||
---
|
---
|
||||||
|
|
||||||
|
|||||||
@@ -1,17 +1,18 @@
|
|||||||
# Grafana + InfluxDB 3 Core
|
# Grafana + InfluxDB 3 Core
|
||||||
|
|
||||||
Vorbereiteter Monitoring-Stack. Noch nicht deployen, bis die Secrets und der erste InfluxDB-Token sauber angelegt sind.
|
Monitoring-Stack fuer Grafana + InfluxDB 3 Core. InfluxDB bleibt ohne Public Route; interne Writer wie Home Assistant koennen ueber einen gezielt gebundenen LAN-Port schreiben.
|
||||||
|
|
||||||
## Quellen / Entscheidungen
|
## Quellen / Entscheidungen
|
||||||
|
|
||||||
- Grafana nutzt das offizielle OSS-Image `grafana/grafana:12.4.3`.
|
- Grafana nutzt das offizielle OSS-Image `grafana/grafana:12.4.3`.
|
||||||
- InfluxDB nutzt `influxdb:3.9.1-core`, nicht `latest`, weil `latest` bei InfluxDB aktiv in Richtung InfluxDB 3 umgestellt wird.
|
- InfluxDB nutzt `influxdb:3.9.1-core`, nicht `latest`, weil `latest` bei InfluxDB aktiv in Richtung InfluxDB 3 umgestellt wird.
|
||||||
- Grafana wird ueber Traefik + `authelia@file,secure-headers@file` unter `grafana.kaleschke.info` veroeffentlicht.
|
- Grafana wird ueber Traefik + `authelia@file,secure-headers@file` unter `grafana.kaleschke.info` veroeffentlicht.
|
||||||
- InfluxDB bleibt ohne direkten Host-Port und ohne Traefik-Route im internen Compose-Netz `grafana_influx_internal`.
|
- InfluxDB bleibt ohne Traefik-Route. Der HTTP-Port `8181` kann fuer interne Writer wie Home Assistant ueber `INFLUXDB_BIND_IP` auf eine LAN-Adresse gebunden werden; Default ist `127.0.0.1`.
|
||||||
- Grafana provisioning legt eine SQL-Datenquelle fuer InfluxDB 3 Core mit der Datenbank `homelab` an.
|
- Grafana provisioning legt eine SQL-Datenquelle fuer InfluxDB 3 Core mit der Datenbank `homelab` an.
|
||||||
- Der Grafana-Datasource-Token liegt als Secret-Datei auf dem Host und wird beim Containerstart nur containerintern in die fuer Grafana-Provisioning noetige Environment-Variable geladen.
|
- Der Grafana-Datasource-Token liegt als Secret-Datei auf dem Host und wird beim Containerstart nur containerintern in die fuer Grafana-Provisioning noetige Environment-Variable geladen.
|
||||||
|
- Home Assistant schreibt mit der InfluxDB-v2-API-Kompatibilitaet nach InfluxDB 3; Details: `docs/HOME_ASSISTANT_INFLUXDB_ECOWITT.md`.
|
||||||
|
|
||||||
## Vor dem ersten Deploy
|
## Initiale Einrichtung
|
||||||
|
|
||||||
1. Secret fuer Grafana anlegen:
|
1. Secret fuer Grafana anlegen:
|
||||||
|
|
||||||
@@ -55,7 +56,7 @@ Vorbereiteter Monitoring-Stack. Noch nicht deployen, bis die Secrets und der ers
|
|||||||
|
|
||||||
- `https://grafana.kaleschke.info` oeffnet nach Authelia die Grafana-Loginseite.
|
- `https://grafana.kaleschke.info` oeffnet nach Authelia die Grafana-Loginseite.
|
||||||
- Grafana `Connections -> Data sources -> InfluxDB 3 Core -> Save & test` ist erfolgreich.
|
- Grafana `Connections -> Data sources -> InfluxDB 3 Core -> Save & test` ist erfolgreich.
|
||||||
- InfluxDB bleibt von aussen nicht direkt erreichbar.
|
- InfluxDB bleibt ohne Public Route. Falls `INFLUXDB_BIND_IP` auf die LAN-IP gesetzt ist, ist Port `8181` nur im internen Netz fuer Writer wie Home Assistant erreichbar.
|
||||||
|
|
||||||
## Rollback
|
## Rollback
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,8 @@ services:
|
|||||||
container_name: influxdb3-core
|
container_name: influxdb3-core
|
||||||
restart: unless-stopped
|
restart: unless-stopped
|
||||||
user: "0"
|
user: "0"
|
||||||
|
ports:
|
||||||
|
- "${INFLUXDB_BIND_IP:-127.0.0.1}:8181:8181"
|
||||||
command:
|
command:
|
||||||
- influxdb3
|
- influxdb3
|
||||||
- serve
|
- serve
|
||||||
|
|||||||
@@ -0,0 +1 @@
|
|||||||
|
INFLUXDB_BIND_IP=127.0.0.1
|
||||||
Reference in New Issue
Block a user