Commit Graph

18 Commits

Author SHA1 Message Date
retr0 5972ef2c35 Feature: Wallbox-Node nur wenn KATHREIN_WALLBOX konfiguriert (v1.6.6)
- hasEV-Flag aus invertersList: nur KATHREIN_WALLBOX zeigt EV-Node
- Ohne Wallbox: flacheres Layout (viewBox 520x278 statt 410)
- SEG-Array und SVG-Node konditionell

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:31:06 +02:00
retr0 220a16c13d Redesign: Kreuz-Layout — Solar oben, Grid links, Haus Mitte, Batterie rechts, EV unten (v1.6.5)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:27:35 +02:00
retr0 9eef66812b Fix: Alle 5 Nodes immer sichtbar, mehr vertikaler Abstand (v1.6.4)
- Batterie-Node immer gerendert (nicht mehr hasBat-conditional)
- Vertikaler Abstand erhöht: Solar/Grid y=84, Haus y=202, Bat/EV y=320
- ViewBox 520×400 statt 520×360
- Bezier-Pfade an neue Positionen angepasst

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:24:41 +02:00
retr0 f37efb6ad1 Fix: Grid-Icon (Sinuswelle statt A), Batterie-Node immer sichtbar (v1.6.3)
- Grid-Icon: Sinuswelle (AC-Symbol) statt A-förmiger Übertragungsturm
- Batterie-Node: wird angezeigt sobald bat_* Aggregate vorhanden, nicht erst wenn bat_soc != null
- batSub: SOC-Prozent nur wenn bat_soc nicht null

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:20:40 +02:00
retr0 11050687d0 Redesign: Energie-Dashboard HA-Style — animateMotion Dots + Kreis-Nodes (v1.6.2)
- Kreisförmige Nodes wie im HA Energie-Dashboard (r=44, farbiger Rand)
- Bezier-Kurven mit wandernden Punkten via animateMotion (3 Dots/Pfad)
- Flussrichtung korrekt: reverse für Export, Entladen
- Inaktive Pfade gedimmt, keine Dots
- CSS flowFwd/flowBwd entfernt (nicht mehr benötigt)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:49:45 +02:00
retr0 ef9f96e5d2 Fix+Redesign: Energie-Dashboard SVG-Icons + SDM-630 Aggregation (v1.6.1)
- SVG-Pfad-Icons statt Emoji (Solar, Netz, Haus, Batterie, Wallbox)
- Bezier-Kurven statt gerader Linien für Flussverbindungen
- Rounded-Rect Knoten mit farbigem Top-Border bei kWh-Karten
- SDM-630 grid_power Proxy: total_power -> grid_power (erkannt via import_kwh)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 21:42:12 +02:00
retr0 919919d5d8 Feature: Energie-Dashboard Tab mit SVG-Flussdiagramm (v1.6.0)
Neuer erster Tab „Energie" mit animiertem Energiefluss-Diagramm:
- SVG-Knoten: Solar, Netz, Haus, Batterie, Wallbox
- Animierte gestrichelte Linien zeigen Flussrichtung + Leistung
- Farben: PV=gelb, Bezug=rot, Einspeisung=grün, Batterie=lila, EV=blau
- kWh-Karten: PV Heute, Netzbezug/Einspeisung, Batterie Laden/Entladen
- Batterie-Knoten nur sichtbar wenn bat_soc vorhanden
- Wallbox-Leistung via invertersList (KATHREIN_WALLBOX model)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 16:41:57 +02:00
retr0 a09bbdd25d Feature: EMS-Konfiguration im Web-UI (v1.5.1)
- Modal zeigt EMS-Felder nur bei KATHREIN_WALLBOX (toggleEmsSection)
- openModal lädt ems_min_pv/timeout/target_hour/phases aus Gerätekonfig
- saveInverter speichert EMS-Parameter in inverters.json
- main.py übergibt EMS-Konfig aus inv_cfg an EmsController()

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 12:11:13 +02:00
retr0 6ae2cbf2b2 Feature: Konfig-Export/Import im Web UI (Einstellungen-Tab)
- GET /api/export-config → JSON-Download mit allen Geräten + MQTT (ohne Passwort)
- POST /api/import-config → Validierung + Übernahme + automatischer Neustart
- Einstellungen-Tab: Exportieren-Button + Importieren-Dateiauswahl
- btn-secondary CSS-Klasse hinzugefügt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 13:06:54 +02:00
retr0 456bfb34d6 Feature: Aggregat-Gerät + Energie-Dashboard Sensoren (v1.2.0)
- main.py: AGG_SENSOR_IDS/AGGREGATE_META — Mapping sensor_id → Aggregat-Bucket
  _compute_aggregates() summiert alle online Geräte nach jedem Poll
  /api/data liefert jetzt auch "aggregates" Schlüssel
- mqtt_publisher.py: publish_aggregates() + _publish_aggregate_discovery()
  Eigenes HA-Gerät "ShineBridge Gesamt" (device_id: shinebridge_aggregate)
  MQTT Topic: shinebridge/aggregate/state
- index.html: renderAggregates() — "Gesamt"-Sektion oben im Live-Tab

Aggregierte Sensoren (alle kompatibel mit HA Energie-Dashboard):
  PV: total_pv_power, total_ac_power, total_energy_today, total_energy_total
  Netz (SDM-630): grid_power, grid_import_kwh, grid_export_kwh
  Batterie (SPH): bat_charge/discharge_power/total, bat_soc (Ø)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 21:40:01 +02:00
retr0 33c6a15644 Feature: Eastron SDM-630 Support + Float32 Decode (v1.1.5)
- inverters.py: data_type Feld in Sensor (uint16/uint32/float32)
  + SDM-630 Definition (16 Sensoren: U/I/P L1-L3, PF, Freq, kWh)
  + read_ranges: [(0, 76)] — alle Sensoren in einem Batch
- modbus_client.py: Float32 IEEE 754 Decode via struct.unpack
  (SDM-630 liefert Floats, Growatt liefert skalierte Integer)
- index.html: "Wechselrichter" → "Gerät" — Add-on unterstützt
  jetzt beliebige Modbus-Geräte, nicht nur Wechselrichter

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 17:07:14 +02:00
retr0 2197e981b2 Rename: Growatt ShineLAN-X Add-on → ShineBridge
Add-on heißt jetzt ShineBridge (slug: shinebridge). Hardware-Name
"Growatt ShineLAN-X" im README und in der Dokumentation unverändert.

WICHTIG: Slug-Änderung erfordert Neuinstallation des Add-ons in HA
(altes Add-on deinstallieren, ShineBridge neu installieren).

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 13:30:23 +02:00
retr0 5b490c0aea Security: XSS-Fix, localhost-Binding, API-Validierung (v1.1.3)
- Flask bindet auf 127.0.0.1 statt 0.0.0.0 — Port 8099 nicht mehr
  direkt im LAN erreichbar (host_network: true umgeht sonst HA-Auth)
- XSS: esc() Funktion + HTML-Escaping für alle user-controlled Werte
  in innerHTML (inv.name, modbus_ip, mqtt_topic_prefix, s.name, s.unit)
- API: POST /api/inverters-config validiert inverter_model, Port (1-65535),
  Modbus-Adresse (1-247) vor dem Speichern
- _poll_loop: int()-Aufrufe in try/except — kein Thread-Crash bei
  ungültiger Config

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:34:21 +02:00
retr0 12586fa383 HAOS Add-on v1.1.1: Sparkline-Graphen (letzte 5 Minuten)
- SVG-Sparkline pro Sensor-Karte, farbkodiert nach device_class
- Backend: (timestamp, value) deque pro Sensor, API filtert auf 300s
- Kein Datenverlust bei Neustart (In-Memory, reicht für Trendanzeige)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:14:24 +02:00
retr0 35a3c01e36 HAOS Add-on v1.1.0: Multi-Wechselrichter Support
- Unbegrenzt viele Wechselrichter über Web UI verwaltbar (Add/Edit/Delete)
- Pro Wechselrichter: eigener Poll-Thread, MQTT-Topic-Präfix, HA Device
- Shared MQTT-Publisher: eine Verbindung für alle Wechselrichter
- Migration: bestehende Single-Inverter-Config wird automatisch übernommen
- Live-Daten: pro Wechselrichter mit Online/Offline-Badge
- config.yaml: nur noch MQTT global, Wechselrichter über /data/config.json

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 11:17:06 +02:00
retr0 4fd54025ad HAOS Add-on v1.0.5: Fehlerzähler aus Info-Row entfernt
Fehlerzähler zeigte kumulierte Timeouts vor dem NuttX-Flash (4282)
was wie ein Growatt-Fehlercode aussah. Status-Pills zeigen Verbindung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 10:55:39 +02:00
retr0 e2d67f3447 HAOS Add-on: Ingress-Pfad-Fix im Web UI
Fetches verwendeten absolute Pfade (/api/...) → gingen an HA REST API statt Add-on.
Hinter HA Ingress-Proxy muss der Pfad relativ zur Seiten-URL sein.
Fix: BASE = window.location.href + "./" → apiUrl() für alle fetch-Aufrufe.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 23:07:15 +02:00
retr0 0d6b860664 HAOS Add-on: MVP + NuttX Binary + .gitignore
- haos-addon/: vollständiges HA Add-on (config.yaml, Dockerfile, build.yaml)
  - Python Backend: pymodbus Modbus TCP → paho-mqtt MQTT Discovery
  - Unterstützte Modelle: MIC 1500/2000 TL-X, SPH 5000 TL3, MOD 6000 TL3
  - Web UI: Wechselrichter-Auswahl, Modbus/MQTT-Konfig, Live-Sensor-Grid (dark theme)
  - MQTT HA Discovery für alle Sensoren mit device_class, state_class, icon
- ShineLAN-X/releases/nuttx-mbusd-shinelanx.bin: NuttX Firmware (ohne DFU, 0x08000000)
- .gitignore: Logs, MQTT-JSON, shinelanx-modbus/ ausgeschlossen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 22:30:45 +02:00