From b2102d475247c5778d7396ac4da1c8be9f789d62 Mon Sep 17 00:00:00 2001 From: "m0@nas" Date: Tue, 15 Sep 2026 09:53:09 +0200 Subject: [PATCH] README auf den Stand gebracht: Fahrzeug-Reiter, Vorabend, skoda_ladepunkte - skodaKeys.php in Verzeichnisbaum, Modelltabelle und Include-Graph - settings.js hat vier Reiter, ajax/settings.php die skoda-keys-Aktionen - Kachelformat leistung_kw, carForm.php in der Endpunkttabelle - solarLog.skoda_ladepunkte, Schalter "Am Vorabend" bei den Automatiken - SolarManager-Repo ohne Wecker Co-Authored-By: Claude Opus 5 --- README.md | 30 ++++++++++++++++++++++-------- 1 file changed, 22 insertions(+), 8 deletions(-) diff --git a/README.md b/README.md index c15fce5..d250785 100644 --- a/README.md +++ b/README.md @@ -56,6 +56,7 @@ smart/ │ ├── roomControls.php Bedienelemente des Raum-Modals │ ├── commands.php ein Kommando tatsächlich abschicken │ ├── wallboxen.php beide Wallboxen über MQTT +│ ├── skodaKeys.php MyŠkoda-Schlüssel in skoda.conf (nie zurück an den Browser) │ ├── logdateien.php Logdateien lesen │ ├── aussenplan.php Schrägbild des Außengeländes (SVG, gerechnet) │ ├── reiter.php das eine Reiter-Bauteil der ganzen Seite @@ -288,7 +289,8 @@ aus `homeRooms` — der Raumtabelle, die `home.php` als JSON in die Seite schreibt. `homeSVG.kachelWert()` ist die Stelle, an der aus einer Nachricht Text wird: Topic oder Wechselrichtersumme lesen, ggf. JSON-Pfad herausgreifen, Vorzeichen drehen (`negativ`), skalieren (`format: -"leistung"`), runden (`stellen`), Einheit anhängen. Klick auf eine Kachel +"leistung"` für Watt-Quellen, `"leistung_kw"` für Quellen, die schon +Kilowatt melden — die Wallboxen), runden (`stellen`), Einheit anhängen. Klick auf eine Kachel öffnet das Raum-Modal über `ajax/room.php?room=EG_Bad`. **`solarMQTT.js`** — die große Anlagenübersicht. `solarSVG` zeichnet den @@ -318,9 +320,9 @@ Anfragen dazu, und die Auswahlfelder füllten sich asynchron. Dazu die Übersicht: Nachfolger einklappen (`toggleAutomationGroup`) und die Rückfrage vor dem Löschen (`frageNachfolger`). -**`settings.js`** — drei Reiter in einer Datei, deutlich getrennt: Preistabellen, -Home-Kacheln, Geräte. Jeder Abschnitt hat sein Modell (`kachelModell`, -`geraeteModell`), seine `zeichne…()`-Funktion und eine `…Binden()`-Funktion, +**`settings.js`** — vier Reiter in einer Datei, deutlich getrennt: Preistabellen, +Home-Kacheln, Geräte, Fahrzeug. Jeder Abschnitt hat sein Modell (`kachelModell`, +`geraeteModell`, `skodaModell`), seine `zeichne…()`-Funktion und eine `…Binden()`-Funktion, die genau einen Ereignisbehandler auf den Container legt (Delegation) — deshalb überlebt Bedienung jedes Neuzeichnen. @@ -337,7 +339,7 @@ klein: Diagramme füllen bzw. Logzeilen nachladen und einfärben. |---|---|---| | `room.php` | `?room=EG_Bad`, `POST ?action=command\|temp` | Raum-Modal bauen; ein Kommando oder eine Solltemperatur senden | | `AutoAction.php` | `?action=editor\|list\|followers\|werte`, `POST save\|delete\|toggle` | Automatik-Editor und -Übersicht | -| `settings.php` | `?action=list\|kacheln\|geraete`, `POST save\|kacheln-save\|geraete-raeume\|geraet-loeschen` | Einstellungsseite | +| `settings.php` | `?action=list\|kacheln\|geraete\|skoda-keys`, `POST save\|kacheln-save\|geraete-raeume\|geraet-loeschen\|skoda-keys-save` | Einstellungsseite; `skoda-keys` meldet nur, ob ein Schlüssel hinterlegt ist und worauf er endet | | `getStats.php` | `GET` | Jahresstatistik, alle Jahre, mit Metadaten je Kennzahl | | `energyHistory.php` | `?series=prod\|cons&range=month\|year\|decade` | Verbrauchs-/Erzeugungsverlauf (Rohdaten oder Stundenarchiv) | | `getProdData` `getConsData` `getForecastData` `getHeaterData` `getWaterData` | `?FROM=&TO=` | Chart.js-Datensätze für die jeweilige Karte | @@ -346,7 +348,7 @@ klein: Diagramme füllen bzw. Logzeilen nachladen und einfärben. | `skodaCmd.php` | `POST befehl=…` | Laden/Klima/Lüftung am Fahrzeug | | `tile.php` | `?z=&x=&y=` | Kartenkachel aus dem eigenen Zwischenspeicher, sonst einmalig von OSM | | `logs.php` | `?action=list\|read` | Zustand und Zeilen der Logdateien | -| `carEG.php` `carOG.php` `carSteuerung.php` `heater.php` `watering.php` `tahoma.php` | | Wallboxen, Heizstab, Bewässerung, Tahoma-Bedienung | +| `carEG.php` `carOG.php` `carSteuerung.php` `carForm.php` `heater.php` `watering.php` `tahoma.php` | | Wallboxen, Heizstab, Bewässerung, Tahoma-Bedienung | | `chartData.php` | (kein Endpunkt) | gemeinsame Bausteine der Chart-Endpunkte | | `phpMQTT.php` | (Bibliothek) | MQTT aus PHP heraus, für Kommandos | @@ -367,6 +369,7 @@ Kennzahlen, `energyHistory.php` wählt die Quelle nach Zeitraum, | `roomControls.php` | Welches Gerät welches Bedienelement bekommt | `bedienform()`, `zeichneBeschattung()`, `zeichneLicht()`, `zeichneMesswerte()` | | `commands.php` | Ein Kommando abschicken (MQTT/WLED/HTTP/Tahoma) | `executeCommand()`, `sendeMqtt()`, `sendeWled()`, `sendeHttp()`, `sendeTahoma()` | | `wallboxen.php` | Beide Wallboxen über MQTT | `wallboxen()`, `wallboxSetzen()` | +| `skodaKeys.php` | MyŠkoda-Schlüssel in `skoda.conf` (SolarManager): lesen, prüfen, eintragen — ein Wert geht nie an den Browser zurück | `skodaStand()`, `skodaSchluesselSpeichern()` | | `logdateien.php` | Logdateien vom Ende her lesen | `logDateien()`, `logLesen()`, `logZerlegen()` | | `aussenplan.php` | Schrägbild des Außengeländes | Projektion + SVG | | `reiter.php` | Reiter | `reiterLeiste()`, `reiterFlaecheAuf/Zu()`, `reiterBlock()` | @@ -392,6 +395,7 @@ flowchart LR HOME["home.php"] --> ROOMS HOME --> REITER SET["settings.php"] --> COSTS & KACH & REITER + SET --> SKK["skodaKeys.php
skoda.conf"] HEADER["header.php"] --> ROOMS ``` @@ -434,6 +438,7 @@ erDiagram | `stats_daily` | Tageswerte für die Jahresstatistik | `solarManager.py` | | `Heater`, `puffertemp`, `wasser`, `zisterne`, `windrad`, `kiga_windrad` | Heizung, Speicher, Wasser, Windrad | `solarManager.py` | | `skoda`, `skoda_raw` | Fahrzeugzustand im Verlauf | `gatherSkodaData.py` | +| `skoda_ladepunkte` | Wallbox-Verlauf während einer Ladung, im Minutentakt, wird nicht ausgedünnt (`solarLog_skoda_ladepunkte.sql`) | `gatherSkodaData.py`; ältere Ladungen `skoda_ladepunkte_nachtragen.py` | | `weatherStation`, `weatherHours`, `weatherDays`, `daylight`, `simPower` | Wetter, Sonnenzeiten, Ertragsprognose | Wetterbrücke, Open-Meteo, Prognose | | `gridCosts`, `gasCosts`, `fuelCosts` | Preiszeitreihen (Stichtag, kein Enddatum) | Einstellungsseite (`costs.php`) | | `kachelWerte` | Überschreibungen der Home-Kacheln, JSON je Raum | Einstellungsseite (`kacheln.php`) | @@ -474,7 +479,8 @@ Eine Wertdefinition ist ein kleines JSON-Objekt, überall in derselben Form: ``` `wechselrichter` + `feld` statt `topic` summiert mehrere Wechselrichter; -`format: "leistung"` skaliert selbst zwischen W und kW; `negativ` dreht das +`format: "leistung"` skaliert selbst zwischen W und kW (`"leistung_kw"`, wenn +die Quelle schon Kilowatt schickt); `negativ` dreht das Vorzeichen (für einen Zähler, der verkehrt herum eingebaut ist); `icon` ist der Name **irgendeines** Bootstrap-Icons — die Codepunkte liest `bootstrapIcons()` aus `css/bootstrap-icons.min.css`, gezeichnet wird als @@ -622,6 +628,14 @@ Auslösen bis Mitternacht. Für alles, was man hinterher von Hand wieder anders stellt: ein Rollladen, den man um acht zugezogen hat, soll nicht um neun von selbst wieder auffahren, nur weil eine Wolke weiterzieht. +**„Am Vorabend"** (`next_day`) lässt Wochentage, Ferien und Feiertage für +**morgen** gelten. Für alles, was abends für den nächsten Tag geschieht: +*Kinderrollos zu, wenn morgen Schule ist* heißt dann Mo–Fr, Ferien nie, +Feiertage nie — dieselben Tage wie der Wecker. `rahmenText()`, +`rahmenKurzText()` und die Spalte „Wann" der Übersicht nennen den Vorabend +vorne, damit auch „nicht an Feiertagen" als Folgetag gelesen wird. Uhrzeit +und Zeitfenster bleiben beim heutigen Tag. + Wie der Runner das auswertet — Datentyp `elapsed`, topologische Reihenfolge, der Rahmen, was beim Pausieren geschieht — steht in [`autoActions/README.md`](../../homes/wagner/SolarManager/autoActions/README.md) @@ -780,7 +794,7 @@ Zwei Repositories, beide auf Gitea (`gitea.nas.el-wa.org`): | Repo | Ort | Inhalt | |---|---|---| | `admin/Smart-Dashboard` | `/volume1/web/smart` | dieses hier | -| `admin/SolarManager` | `/volume1/homes/wagner/SolarManager` | Sammler, Runner, Wecker | +| `admin/SolarManager` | `/volume1/homes/wagner/SolarManager` | Sammler, Brücken, Automatik-Runner | Rekursive Suchen (`grep -r`) laufen über die SMB-Freigabe in Zeitüberschreitungen — auf der NAS selbst sind sie sofort fertig.