Commit Graph
100 Commits
Author SHA1 Message Date
retr0andClaude Sonnet 4.6 7904d498b5 v1.8.20: Fix Eigenversorgungskarte + Stromtarif-Einstellungen verloren
Bug 1 — Eigenversorgungskarte verschwindet wenn PV offline:
- savings_kwh wird jetzt gesetzt wenn pv_total vorhanden (grid_exp muss
  nicht mehr explizit vorhanden sein, default 0.0)
- Karte bleibt sichtbar auch wenn Wechselrichter offline geht

Bug 2 — Stromtarif-Einstellungen gehen beim Speichern verloren:
- savePrices(): parseInt mit || 1 Fallback, verhindert NaN → JSON-null
- api_save_config(): None-Checks + try/except für alle numerischen Keys,
  save_config() wird garantiert immer aufgerufen

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-06 07:25:01 +02:00
retr0andClaude Sonnet 4.6 5a00c7b5d3 docs: Roadmap auf v1.8.19 aktualisiert
Alle erledigten Features als [x] markiert, neue Einträge für
Flash-Wizard, NuttX OTA, Setup-Wizard, MQTT rc=5, Port-Sicherheit,
Mobile-Layout. Changelog bis v1.8.19 ergänzt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 21:53:58 +02:00
retr0andClaude Sonnet 4.6 b64bcde203 v1.8.19: Version erhöht
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 21:45:27 +02:00
retr0andClaude Sonnet 4.6 b3f67df967 fix: Mobile-Layout — Tabs scrollen, kein horizontaler Overflow
- html/body: overflow-x: hidden verhindert seitlichen Scroll
- Tabs: overflow-x: auto + white-space: nowrap + flex-shrink: 0
  → horizontal scrollbar-frei auf Handy
- Header: min-width: 0, flex-shrink: 0 für Pill, Text-Overflow
- main: padding 16px statt 20px
- energy-wrap: width: 100%, kwh-card min-width: 0
- @media ≤520px: sensor-grid, settings, header-icon ausgeblendet

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 21:39:59 +02:00
retr0andClaude Sonnet 4.6 e72ad2db19 docs: README auf v1.8.18 aktualisiert
Flash-Wizard, OTA-Abschnitt (Zwei-Phasen), Setup-Wizard, Finanzen-Tab,
Abschlags-Tracker, Port-Sicherheit, Überschuss-Geräte, repo-Struktur.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 21:32:29 +02:00
retr0andClaude Sonnet 4.6 3b3d4055f6 v1.8.18: Version in config.yaml angehoben
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 20:05:07 +02:00
retr0andClaude Sonnet 4.6 15c0ede72e v1.8.18: MQTT rc=5 Fehlerhandling, Port-Absicherung, Flash-Wizard + NuttX OTA
MQTT:
- rc=5 (Not Authorized) stoppt Reconnect-Loop via _auth_failed Flag
- Fehlermeldung im MQTT-Einstellungen-Banner sichtbar

Sicherheit:
- /api/* nur über HAOS-Ingress (X-Ingress-Path) oder Loopback erreichbar

Flash-Wizard (Baustelle B):
- Neuer Tab "Flash" mit IP-Eingabe und OTA-Modus-Erkennung
- OTA: integrierte oder eigene Firmware via POST /api/flash/update auf Stick
- Fortschrittsbalken + Polling bis Stick nach Reset wieder online
- ST-Link-Erstflash-Anleitung (Pinout, st-flash Kommando)
- Firmware-Binaries im Docker-Image unter /firmware/

NuttX OTA (Baustelle A, shinelanx-modbus):
- ota_http.c: Zwei-Phasen OTA für STM32F103 Single-Bank Flash
  Stage 1: Firmware in Staging-Bereich (obere Flashhälfte) schreiben
  Stage 2: .ramfuncs aus SRAM heraus — Staging → App-Bereich kopieren, Reset
- ota_http.h, Makefile und main.c entsprechend erweitert
- ld.script.dfu: .ramfuncs in .data Section → Ausführung aus SRAM

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 19:45:40 +02:00
retr0andClaude Sonnet 4.6 bbfb11fb9c v1.8.17: Atomarer Config-Write + Backup-Fallback
Verhindert Datenverlust wenn HAOS den Container während eines Saves
stoppt. Schreibt erst config.json.tmp, dann atomares os.replace().
Hält config.json.bak als Fallback für den nächsten Start.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 13:40:56 +02:00
retr0andClaude Sonnet 4.6 2456f356b4 v1.8.16: Finanzen-Tab — Festpreis vs. Spot-Vergleich
Täglicher Tarif-Tracking: kWh + EPEX-Ø-Preis werden ab jetzt täglich
gespeichert. Neuer Finanzen-Tab zeigt Balkendiagramm (Festpreis vs.
Spot hypothetisch), Summen-Karten und Empfehlung ob flexibler Tarif
sich lohnen würde.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 13:29:55 +02:00
retr0andClaude Sonnet 4.6 dfb42e6902 v1.8.15: Abschlags-Tracker zeigt ganze Zahlungen statt Bruchmonate
Berechnung auf geleistete Abschlagszahlungen umgestellt:
Anzahl ganzer Monate seit Abrechnungsstart statt Tage/30.4.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 13:12:43 +02:00
retr0andClaude Sonnet 4.6 fec49ec4fb v1.8.14: Abschlags-Tracker (monatliche Rate + Grundpreis)
Neues optionales Feature: Abschlags-Übersicht im Energie-Dashboard.
Zeigt Bereits bezahlt, Grundpreis anteilig, Energiekosten sowie
voraussichtliche Nachzahlung oder Guthaben für das laufende Abrechnungsjahr.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-05 11:45:56 +02:00
retr0andClaude Sonnet 4.6 5ab8ee75fb v1.8.13: Labels + Invertiert-Modus für Überschuss-Geräte
- Beschriftung über jedem Eingabefeld (Name, Z2M Name, Schwellwert, etc.)
- Checkbox "Invertiert": EIN bei Netzbezug, AUS bei Überschuss
- Live-Tab: ↑/↓ Pfeil zeigt normale/invertierte Logik

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 15:12:15 +02:00
retr0andClaude Sonnet 4.6 33ada90df4 v1.8.12: Mindest-Laufzeit pro Überschuss-Gerät
- min_on_minutes pro Gerät: Gerät bleibt mindestens X Minuten an
  auch wenn Überschuss unter Ausschaltschwelle fällt (Boiler-Fix)
- Live-Tab zeigt verbleibende Mindestlaufzeit während Gerät läuft
- get_states() liefert on_minutes für Laufzeit-Tracking

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 12:02:37 +02:00
retr0andClaude Sonnet 4.6 0dbf0266a8 fix: _get_pv_surplus() via grid_power-Aggregat (SDM-630 fix, v1.8.11)
SDM-630 liefert grid_power (negativ=Einspeisung), wurde von active_power-
Logik nicht erfasst. Jetzt einheitlich über grid_power-Aggregat.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 11:42:08 +02:00
retr0 5942c18df6 fix: config.yaml version auf 1.8.10 2026-05-04 11:35:25 +02:00
retr0 58a33f966d debug: surplus_w in API + Live-Tab anzeigen 2026-05-04 11:31:06 +02:00
retr0 06bc030b07 fix: config.yaml version auf 1.8.9 setzen 2026-05-04 11:07:57 +02:00
retr0andClaude Sonnet 4.6 10e21f031a v1.8.9: Z2M Geräte-Dropdown für Überschuss-Steuerung
- MQTT Subscribe auf zigbee2mqtt/bridge/devices beim Connect
- Neuer Endpoint GET /api/z2m-devices liefert Friendly Names + Beschreibung
- Eingabefeld für Z2M Name als Datalist-Combo (tippen oder aus Liste wählen)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 10:57:52 +02:00
retr0andClaude Sonnet 4.6 83035fed0e v1.8.8: Überschuss-Geräte (Zigbee2MQTT) + Bugfix Eigenversorgungskarte
- Neu: SurplusDeviceController — schaltet Z2M-Geräte bei PV-Überschuss
  ein/aus (Schwellwert + Hysterese pro Gerät, Background-Loop 30s)
- Neu: API GET/POST /api/surplus-devices, Konfig persistent in config.json
- Neu: Settings-Tab "Überschuss-Geräte", Live-Tab zeigt ON/OFF-Status
- Bugfix: Eigenversorgungskarte (Monat/Jahr) bleibt abends sichtbar wenn
  Wechselrichter offline — letzte kWh-Zähler werden als Fallback genutzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-04 10:53:46 +02:00
retr0andClaude Sonnet 4.6 ec6a0e8514 UI: Pfeil-Icons aus Export/Import-Buttons entfernt (v1.8.7)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 13:00:22 +02:00
retr0andClaude Sonnet 4.6 4713473754 UI: Abstand zwischen Settings-Boxen (gap 16px, v1.8.6)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 12:59:54 +02:00
retr0andClaude Sonnet 4.6 448de29cd9 UI: Settings-Felder Abstände vergrößert (v1.8.5)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 12:56:43 +02:00
retr0andClaude Sonnet 4.6 4242ca01f6 Feature: EMS Aktiv-Checkbox pro Kathrein-Wallbox-Gerät (v1.8.4)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:53:39 +02:00
retr0andClaude Sonnet 4.6 3ab74a8c21 Fix: Eigenverbrauch = PV_gesamt − Einspeisung statt nur Batterie-Entladung (v1.8.3)
Vollständige Formel: total_energy_total - grid_export_kwh deckt
Direktverbrauch (PV→Haus) + Batterie-Umweg (PV→Bat→Haus) ab.
Fallback auf bat_discharge_total wenn kein PV-Zähler verfügbar.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:48:02 +02:00
retr0andClaude Sonnet 4.6 3762abd632 Feature: Eigenversorgungs-Ersparnis in Perioden-Karten (v1.8.2)
- bat_discharge_total + bat_charge_total werden jetzt als Perioden-Starts getrackt
- savings_kwh = Batterie-Entladung der Periode (→ Haus + Auto)
- savings_eur = savings_kwh × effektiver Importpreis (Festpreis oder Börsendurchschnitt)
- Neue Karte "Eigenversorgung" (lila) neben Netzbezug/Einspeisung
- Preis-Refaktor: eff_price für Import, Export, Ersparnis aus einer Berechnung

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:38:56 +02:00
retr0andClaude Sonnet 4.6 ec26782765 Feature: Flexibler Stromtarif (Börsenstrom) in Einstellungen + Periodenabrechnung (v1.8.1)
- Tarifart: Festpreis / Flexibel (Börsenstrom) — Radio-Toggle in Einstellungen
- Flexibel: Aufschlag (ct/kWh) + Land (DE/AT) konfigurierbar
- /api/period-energy: bei tariff_type=spot → historische aWATTar-Preise, 1h Cache
- Kostenrechnung Monat/Jahr: Ø Börsenpreis + Aufschlag statt Festpreis
- Periodenkarte zeigt "Ø X.X + Y.Y ct/kWh" bei Börsentarif
- Spot-Chart-Toggle in Einstellungen (spot_chart true/false)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:27:55 +02:00
retr0andClaude Sonnet 4.6 526e802c74 Feature: Börsenstrompreis-Chart (EPEX SPOT via aWATTar) im Energie-Dashboard (v1.8.0)
- /api/spot-price: Proxy zu api.awattar.de/v1/marketdata, 15-min Cache
- EUR/MWh → ct/kWh Konvertierung
- SVG-Balkenchart 24h-Prognose, gleiche Breite wie Flussdiagramm (viewBox 520)
- Farbe nach Preistertil: grün/gelb/rot; aktuelle Stunde hervorgehoben
- Aktuellen Preis als ct/kWh-Label in der Kopfzeile

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:15:52 +02:00
retr0andClaude Sonnet 4.6 f96d798274 Revert: SPH Energiebilanz-Ableitung entfernt — Problem war Goodwe pbattery1 (v1.7.7)
Die Growatt SPH Register 1009/1011 liefern korrekte Werte.
Die Ableitung via ac_power_total war unnötig und fehleranfällig.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:02:59 +02:00
retr0andClaude Sonnet 4.6 65a19047d5 Fix: Goodwe pbattery1 Vorzeichen — + = Entladen, - = Laden (v1.7.6)
bat_charge und bat_discharge waren vertauscht, Hausverbrauch daher falsch.
Goodwe ET Library Konvention: pbattery1 positiv = Entladen, negativ = Laden.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 08:01:23 +02:00
retr0andClaude Sonnet 4.6 9ff0b2e971 Fix: SPH Batterie-Leistung aus Energiebilanz statt Register 1009/1011 (v1.7.5)
Register 1009 (bat_discharge) liefert beim SPH im Lademodus falsche Werte.
Neue Ableitung: bat_net = pv1+pv2 + power_to_user - power_to_grid - ac_power_total
Alle vier Quellen sind direkt gemessene, verlässliche Register.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 07:58:51 +02:00
retr0andClaude Sonnet 4.6 3ccf11771d Fix: Growatt SPH bat_charge/discharge Messartefakt — nur dominanter Wert bleibt (v1.7.4)
Growatt SPH rapportiert beide Register gleichzeitig als > 0 (physikalisch unmöglich).
Fix: bat_discharge_power = 0 wenn bat_charge_power >= bat_discharge_power, sonst umgekehrt.
Verhindert falschen Hausverbrauch durch doppelt gezählte Batterieleistung.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 07:50:07 +02:00
retr0andClaude Sonnet 4.6 0d29739fc8 Fix: Batterie-Flussrichtung via Nettoleistung (v1.7.3)
Vorher: rev:dchOn — bei gleichzeitig aktiven bat_charge/discharge (Messrauschen)
zeigte die Richtung Entladen obwohl Laden aktiv war.
Jetzt: rev:!(batChW >= batDchW) — Richtung folgt dem Nettostrom.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 07:46:46 +02:00
retr0andClaude Sonnet 4.6 2464c304c4 Fix: Energie-Dashboard Nodes größer R=62, Icon 28px (v1.7.2)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 07:41:01 +02:00
retr0andClaude Sonnet 4.6 13de5ff976 Fix: Energie-Dashboard Nodes größer (R=56), Labels aus API, Abrechnungsperiode konfig. (v1.7.1)
- SVG-Nodes: Radius 44 → 56, Icon 22 → 26px, Abstände neu berechnet
- Segment-Pfade an neue Positionen angepasst (40px Abstand Kante→Kante)
- period.monthly.label / yearly.label statt hardcoded "Diesen Monat" / "Dieses Jahr"
- billing_day/billing_month: history.period_key(), /api/period-energy, Settings-UI

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-29 07:35:48 +02:00
retr0andClaude Sonnet 4.6 e9ca2fcc7d Feature: Abrechnungsperiode + Strompreise im Energie-Dashboard (v1.7.0)
- history.py: Tabelle period_starts — speichert kWh-Zählerstand zu Monats-/Jahresbeginn
- main.py: price_import/price_export in Config; /api/period-energy Endpoint
- Web UI: Preisfelder in Einstellungen (€/kWh Bezug + Vergütung)
- Energie-Dashboard: Cards zeigen Monat/Jahr kWh + Kosten statt All-Time-Total

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 22:37:09 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 052b674d51 Release: v1.6.0 — Energie-Dashboard
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 18:59:03 +02:00
retr0andClaude Sonnet 4.6 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 07b476fffa Docs: ROADMAP auf v1.5.3 aktualisiert 2026-04-28 13:43:11 +02:00
retr0 13638d3826 Docs: README auf v1.5.3 aktualisiert (Goodwe, Kathrein, EMS, grid_power) 2026-04-28 13:40:26 +02:00
retr0 ffc6dfa6f7 Release: v1.5.3 — EMS Oszillations-Fix 2026-04-28 13:36:20 +02:00
retr0andClaude Sonnet 4.6 609793c25f Fix: EMS Oszillation — has_pv prüft Gesamt-PV (Überschuss + Ladeleistung)
Vorher: has_pv = surplus >= min → fiel auf False sobald Auto zu laden begann
Jetzt:  has_pv = (surplus + wallbox_power) >= min → stabil während Laden

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:35:47 +02:00
retr0 929dba7cd9 Release: v1.5.2 — EMS + Wallbox + Grid-Power Fixes 2026-04-28 13:30:39 +02:00
retr0andClaude Sonnet 4.6 cc4777b22f Fix: grid_power Aggregat korrekt für Multi-Wechselrichter-Anlagen
- AGG_FIRST: grid_power wird nicht summiert sondern erste Messung genommen
  (Goodwe CT-Klemme misst bereits Gesamt-Netzleistung inkl. Growatt)
- Growatt-Proxy: grid_power = -power_to_grid wenn kein Grid-Meter vorhanden
  (Growatt-only: Einspeisung korrekt, Netzbezug nicht messbar)
- Goodwe + Growatt: Goodwe-Wert hat Vorrang durch Gerätereihenfolge

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:28:24 +02:00
retr0andClaude Sonnet 4.6 5765f54ebd Fix: Aggregat grid_power nur aus Goodwe grid_power (nicht Wallbox total_power)
- AGG_SENSOR_IDS: grid_power → ["grid_power"] statt ["total_power","active_power"]
  Kathrein total_power = Ladeleistung, nicht Netzleistung
- _compute_aggregates: break nach erstem Match pro Gerät (kein Doppelzählen)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:24:15 +02:00
retr0andClaude Sonnet 4.6 ff428145f4 Fix: EMS Ladestrom = PV-Überschuss + aktuelle Wallbox-Leistung
Goodwe misst Überschuss NACH Wallbox-Verbrauch. EMS muss deshalb
bestehende Ladeleistung (total_power) addieren um Gesamtbudget zu kennen:
  new_current = (surplus + wallbox_power) / (230V × phases)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:22:57 +02:00
retr0andClaude Sonnet 4.6 20d935bd73 Feature: grid_power Sensor für intuitive Anzeige (positiv = Netzbezug)
goodwe_client: grid_power = -active_power für Visualisierung
inverters.py: grid_power Sensor ergänzt, active_power als "roh" markiert
EMS _get_pv_surplus() bleibt unverändert (nutzt active_power direkt)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:20:25 +02:00
retr0andClaude Sonnet 4.6 ad89e1bc56 Fix: active_power Vorzeichen final korrekt (positiv = Einspeisung)
Goodwe ET Bibliothek: house_consumption = ppv + pbattery1 - active_power
→ active_power > 0 = Einspeisung (Überschuss), < 0 = Netzbezug.
Falsches Vorzeichen erzeugte Rückkopplungsschleife: mehr Bezug → mehr
scheinbarer Überschuss → noch mehr Laden.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:08:12 +02:00
retr0andClaude Sonnet 4.6 511cd30182 Revert: active_power Vorzeichen zurück (positiv = Netzbezug)
Goodwe ET: active_power > 0 = Netzbezug, < 0 = Einspeisung.
Original-Logik war korrekt — EMS-Problem lag am charging_state Default.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 13:03:46 +02:00
retr0andClaude Sonnet 4.6 3519a02370 Fix: Goodwe ET active_power Vorzeichen für PV-Überschuss korrigiert
Goodwe ET liefert active_power > 0 bei Einspeisung (nicht negativ).
Falsche Negierung führte zu PV-Überschuss = 0 → EMS lud nie.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 12:53:12 +02:00
retr0andClaude Sonnet 4.6 d1f47177fc Fix: EMS aktiviert sich auch ohne lesbare charging_state (0x0060)
- charging_state Default 0→1 (EV Connected) wenn Register nicht lesbar
- EMS-Status auf INFO hochgestuft inkl. PV-Überschuss

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 12:26:15 +02:00
retr0andClaude Sonnet 4.6 30f2667589 Fix: Wallbox-Read resilient gegen IllegalAddress, Relais-Matrix ergänzt
- wallbox_client: Bei Reg-Fehler Range überspringen statt komplett abbrechen
  → Meter-Daten kommen weiter wenn EVSE-Block (0x0060) nicht verfügbar
- wallbox_client: set_current() schreibt jetzt auch EMS_RELAIS_REG (0x00A1)
  mit korrekter Phasen-Bitmaske (1→0x0001, 2→0x0003, 3→0x0007)
- ems_controller: phases wird an set_current() und Zwangsladen übergeben

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 12:17:52 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 ac965dcfa6 Feature: Kathrein Wallbox + EMS-Controller (v1.5.0)
- wallbox_client.py: WallboxReader FC03, EMS enable/set_current
- ems_controller.py: PV-Überschussladen + 4h-Timeout Zwangsladen bis 06:00
- inverters.py: KATHREIN_WALLBOX mit 18 Sensoren (Meter + EVSE + EMS)
- main.py: kathrein-Protokollzweig, _get_pv_surplus() aus laufenden Geräten

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 12:02:59 +02:00
retr0andClaude Sonnet 4.6 8b65666e80 Fix: Goodwe SOC-Key battery_soc + battery_soh/temperature ergänzt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 11:42:42 +02:00
retr0andClaude Sonnet 4.6 dc6ca176ff Fix: GoodweReader.read() Signatur an ModbusReader angleichen
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 11:37:20 +02:00
retr0andClaude Sonnet 4.6 9a71d097db Fix: goodwe in Dockerfile ergänzt (war nur in requirements.txt)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 11:26:34 +02:00
retr0andClaude Sonnet 4.6 0d5618ec5c Release: v1.4.0 — Goodwe GW10KN-ET Support
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 11:23:01 +02:00
retr0andClaude Sonnet 4.6 bc92db6c18 Feature: Goodwe GW10KN-ET Support via goodwe UDP/8899
- goodwe_client.py: GoodweReader wraps goodwe library (asyncio → sync)
- inverters.py: GW10KN_ET mit 37 ET-Sensoren, protocol=goodwe_udp
- main.py: poll-loop verzweigt auf GoodweReader bei goodwe_udp-Geräten;
  AGG_SENSOR_IDS um Goodwe-Keys erweitert (ppv, soc, e_total, e_total_imp/exp, …)
- requirements.txt: goodwe==0.4.10 hinzugefügt

Goodwe-Stick (WIFILAN_2.0 v2.4.41) hat eFuse-gesperrten ROM-Download;
Kommunikation erfolgt über WiFi-Stick-IP + UDP-Port 8899.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-28 10:36:51 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 fe1bdb057d Feature: ShineDiag mobiles Dashboard mit Canvas-Charts und SQLite-History (v2.0)
- Auto-Polling alle 30s im Hintergrund (Thread + Event)
- SQLite-Persistenz in /var/lib/shinediag/history.db, 7-Tage-Retention
- 4 Tabs: Dashboard, Diagramme, Sensoren, Rohdaten
- Große Metrikkarten für Spannung (L1/L2/L3), Frequenz, Leistung
- Canvas-Liniendiagramme (kein externes JS) mit 1h/6h/24h/7d-Auswahl
- localStorage für Verbindungskonfig, Auto-Reconnect beim Seitenaufruf
- Retina-fähiges Canvas (DPR-aware)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 12:15:05 +02:00
retr0andClaude Sonnet 4.6 7f890f8105 Legal: Attributionspflicht für mwalle NuttX-Firmware ergänzt
Binary nuttx-mbusd-shinelanx-dfu.bin unterliegt Apache 2.0 / BSD 3-Clause /
BSD 2-Clause — Urheber Martin Walle (github.com/mwalle/shinelanx-modbus)
wird nun korrekt im README genannt.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 12:04:18 +02:00
retr0andClaude Sonnet 4.6 ffcf5ca7b1 Docs: README komplett aktualisiert
Spiegelt aktuellen Stand: ShineBridge v1.3.0, SDM-630, Aggregat-Gerät,
persistente History, ShineDiag, neuer Repo-Name.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 12:00:37 +02:00
retr0andClaude Sonnet 4.6 aac95c2eef Rename: Repository → shinebridge
URLs auf https://gitea.bitfire.work/retr0/shinebridge aktualisiert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 11:55:24 +02:00
retr0andClaude Sonnet 4.6 391e615893 Feature: ShineDiag — portabler Vor-Ort-Diagnose-Gateway (Pi 3B)
Flask-App + mobile Web UI für Diagnose vor Ort ohne HAOS/MQTT.
Pi 3B: eth0 → ShineLAN-X (DHCP), wlan0 → Hotspot "ShineDiag".
Browser auf http://10.0.1.1: Modell wählen, alle Sensoren auslesen,
Rohdaten-Register-Dump, Export als JSON.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 11:50:53 +02:00
retr0andClaude Sonnet 4.6 a3e87da943 Feature: Persistente History via SQLite (v1.3.0)
Sensorwerte werden in /data/history.db (SQLite, WAL-Modus) persistiert
und überleben damit Add-on-Neustarts. Beim Start werden die letzten 300
Messpunkte pro Sensor in die In-Memory-Deque geladen, sodass Sparklines
sofort Daten zeigen. Retention: 7 Tage. Neue API: GET /api/history.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 11:44:11 +02:00
retr0andClaude Sonnet 4.6 9913dccfa9 Fix: SDM-630 Gesamtwirkleistung aus Phasensumme berechnet (v1.2.1)
Register 0x0030 liefert je nach SDM-630-Firmware-Variante den Phasenwinkel
statt der Gesamtwirkleistung. total_power wird jetzt zuverlässig aus
power_l1 + power_l2 + power_l3 berechnet und überschreibt den Hardware-Wert.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-27 11:27:00 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 fd5625b99a Fix: Flask zurück auf 0.0.0.0 — HA Ingress braucht es (v1.1.4)
127.0.0.1-Binding verursacht 502 Bad Gateway weil HA Supervisor Ingress
nicht von localhost aus verbindet. host_network: true + 0.0.0.0 ist die
korrekte Konfiguration für HAOS Add-ons.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 16:37:48 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 37ef054bbe README: komplett neu — ShineLAN-X HAOS Add-on + ShineWifi-X ESPHome
Beide Lösungen vollständig dokumentiert: ShineLAN-X+HAOS Add-on (primär,
produktiv seit 2026-04-26) und ShineWifi-X ESPHome. Flash-Anleitung,
Hardware-Pinbelegung, Modbus-Register, Repo-Struktur.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:29:29 +02:00
retr0andClaude Sonnet 4.6 c74fafa6c0 HAOS Add-on v1.1.2: HA-Gerätename = benutzerdefinierter Wechselrichtername
Statt Modell-Name ("Growatt MIC 1500 TL-X") wird der vom User vergebene
Name ("Dach Süd") als HA-Gerätename in MQTT Discovery verwendet.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-26 12:24:55 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 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 b890121d32 HAOS Add-on: Version 1.0.4 (triggert Update in HA) 2026-04-24 23:08:10 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 c146df2ec9 HAOS Add-on: host_network für Modbus TCP Zugriff
Container-Netz 172.30.33.x kann ShineLAN-X (10.10.20.190) nicht erreichen.
host_network: true gibt Zugriff auf das lokale Netzwerk.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 23:04:16 +02:00
retr0andClaude Sonnet 4.6 5423b4d809 HAOS Add-on: s6-overlay Fix
- init: false in config.yaml → s6-overlay deaktiviert, CMD läuft als PID 1
- CMD: python3 /app/main.py direkt (kein run.sh + bashio mehr nötig)
- main.py: liest /data/options.json (HA Add-on Options) statt Env-Vars via bashio

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 22:56:29 +02:00
retr0andClaude Sonnet 4.6 c33db75208 HAOS Add-on: Dockerfile Fix - COPY src/ direkt, pip3 inline
- COPY src/ /app/ statt zweistufig (vermeidet src/requirements.txt not found)
- pip3 inline statt requirements.txt (kein separater COPY-Schritt nötig)
- ARG BUILD_FROM mit amd64 Default (build.yaml Deprecation umgangen)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 22:52:57 +02:00
retr0andClaude Sonnet 4.6 c1fc3a080a HAOS Add-on: Schema-Fix + Arch bereinigt
- inverter_model schema: str statt Pipe-Enum (HA kennt keinen Pipe-Syntax)
- arch: nur aarch64 + amd64 (armhf/armv7/i386 deprecated)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 22:50:07 +02:00
retr0andClaude Sonnet 4.6 8adc7573e3 HAOS Add-on: config.yaml Fix für Add-on Store
- panel_title entfernt (kein gültiges HA-Feld, blockt Parser)
- init: false entfernt (nicht kompatibel mit HA Alpine Base)
- description: Pfeil-Unicode entfernt
- mqtt_pass schema: password (statt str, maskiert im UI)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 22:36:43 +02:00
retr0andClaude Sonnet 4.6 af6ff398e8 HAOS Add-on: repository.yaml + Slug-Fix für HA Add-on Store
- repository.yaml im Root → Repo als HA Add-on-Quelle nutzbar
- slug: growatt_shinelan_x (Unterstriche statt Bindestriche, HA-konform)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-24 22:32:29 +02:00
retr0andClaude Sonnet 4.6 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
retr0andClaude Sonnet 4.6 4d2da56baf ShineLAN-X: USB PID-Fix + Modbus-Diagnose
USB PID auf 0x5740 (STM32 Virtual COM Port) gesetzt — Wechselrichter
akzeptiert nur diesen PID und pollt den IN-Endpoint sonst nicht.
Product-String ebenfalls auf Originalwert gesetzt.

MODBUS_BAUD auf 9600 (Growatt-Standard, baud-rate ist bei USB CDC
virtuell aber beeinflusst CDC Line Coding).

usbReady-Check von == 127 auf >= 8 gelockert — verhindert dass
ein voller TX-Buffer alle Sensoren sofort mit 0xFE abwürgt.
Debug-String zeigt jetzt avS (Zyklusstart) und avE (Zyklusende)
zur Diagnose des TX-Buffer-Verlaufs.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 19:10:57 +02:00
retr0andClaude Sonnet 4.6 d4e569bce6 ShineLAN-X: Web-Konfigurations-UI + EEPROM-Config
- Tasmota-artiges Web-Interface auf Port 80 (DHCP/IP, MQTT, Intervall)
- NetConfig-Struct in EEPROM (Magic 0xA55A1234, Defaults bei erstem Boot)
- config.h bereinigt: keine Geheimnisse mehr, nur DEFAULT_*-Werte
- config_manager.h neu: configLoad/Save/Defaults
- USB CDC Build-Flags wiederhergestellt (-DUSBCON etc.)
- SPH 5000: power_to_grid (1021) + power_to_user (1029) ergänzt

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 14:29:11 +02:00
retr0andClaude Sonnet 4.6 589ff8166d ShineLAN-X: STM32F103.log entfernt (obsoleter Debug-Dump)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:58:22 +02:00
retr0andClaude Sonnet 4.6 9b61f9780d ShineLAN-X: Growatt-Präfix aus Ordnername entfernt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:53:57 +02:00
retr0andClaude Sonnet 4.6 e27a47791a Repo-Struktur: ShineWifi-X Ordner + ShineLAN-X releases/ vorbereitet
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:52:30 +02:00
retr0andClaude Sonnet 4.6 27bc3f3f39 MIC 2000 TL-X + MOD 6000 TL3-XH: ESPHome YAML + README hinzugefügt
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:47:05 +02:00
retr0andClaude Sonnet 4.6 0a692cb52e SPH 5000: Smartmeter-Momentanleistung hinzugefügt (Register 1021/1029)
Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-20 13:32:34 +02:00
retr0andClaude Sonnet 4.6 f74963efed ShineLAN-X: README aktualisiert, MIC 1500 Hinweise ergänzt
- README komplett neu: korrekte Pins, USB-CDC Kommunikation, LED-Status
- Hinweis auf Register-Unterschied MIC 1500 (AC Power Reg. 40) vs SPH 5000 (Reg. 35)
- Kompatibilitätstabelle MIC 1500 / SPH 5000

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 05:53:57 +02:00
retr0andClaude Sonnet 4.6 942e6b4e4d ShineLAN-X: USB-CDC Modbus vorbereitet, Modbus vorläufig deaktiviert
- Wechselrichter-Kommunikation läuft über USB-CDC (PA11=D-, PA12=D+, PA8=Pullup)
- Modbus-Platzhalter bis USB-Port wieder eingelötet und getestet
- USB-CDC build flags entfernt (blockieren ohne Host), werden separat aktiviert
- Ethernet + MQTT läuft stabil (DHCP, HA Discovery)

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-04-17 05:49:39 +02:00