README: gatherForecastData.py aufgenommen

Der fuenfte Prozess, der aktiv etwas abholt - im Bild, in der Tabelle der
geschriebenen Tabellen und in der, die sagt, was wann startet.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-21 14:07:08 +02:00
co-authored by Claude Opus 5
parent b40feeea23
commit b4e3531800
+20 -2
View File
@@ -29,6 +29,7 @@ flowchart LR
MGR["<b>solarManager.py</b><br/><small>gatherModbusData · gatherOpenDTUData<br/>gatherDTUBIData · gatherShellyEM3Data EG/UG<br/>gatherHeaterData · gatherSkodaData<br/>gatherBYDData · gatherWaterData<br/>charger_goE</small>"] MGR["<b>solarManager.py</b><br/><small>gatherModbusData · gatherOpenDTUData<br/>gatherDTUBIData · gatherShellyEM3Data EG/UG<br/>gatherHeaterData · gatherSkodaData<br/>gatherBYDData · gatherWaterData<br/>charger_goE</small>"]
WPB["<b>wattpilot_bruecke.py</b>"] WPB["<b>wattpilot_bruecke.py</b>"]
WSB["<b>wsMQTTbridge.py</b>"] WSB["<b>wsMQTTbridge.py</b>"]
FCS["<b>gatherForecastData.py</b><br/><small>Open-Meteo</small>"]
RAIN["<b>gatherRainData.py</b>"] RAIN["<b>gatherRainData.py</b>"]
BROKER{{"<b>MQTT-Broker</b>"}} BROKER{{"<b>MQTT-Broker</b>"}}
@@ -44,9 +45,11 @@ flowchart LR
WPILOT -->|WebSocket| WPB WPILOT -->|WebSocket| WPB
STATION -->|WebSocket| WSB STATION -->|WebSocket| WSB
METEO -->|HTTPS| RAIN METEO -->|HTTPS| RAIN
METEO -->|HTTPS| FCS
SOLARLOG -->|zisterne| MGR SOLARLOG -->|zisterne| MGR
MGR -->|"EnergyFlow · skoda<br/>skoda_ladepunkte · byd<br/>byd_zellen"| SOLARLOG MGR -->|"EnergyFlow · skoda<br/>skoda_ladepunkte · byd<br/>byd_zellen"| SOLARLOG
FCS -->|"weatherHours · weatherDays<br/>weatherTilted · weatherForecastLog"| SOLARLOG
MGR -->|"solarManager/#"| BROKER MGR -->|"solarManager/#"| BROKER
WPB -->|"wattpilot/#"| BROKER WPB -->|"wattpilot/#"| BROKER
@@ -60,11 +63,11 @@ flowchart LR
classDef skript fill:#fff6e5,stroke:#d0a548 classDef skript fill:#fff6e5,stroke:#d0a548
classDef speicher fill:#eaf5ee,stroke:#6fa981 classDef speicher fill:#eaf5ee,stroke:#6fa981
class WR,EM3,HEIZ,BYD,GOE,WPILOT,SKODA,STATION,METEO,VENTILE,HAUSGER quelle class WR,EM3,HEIZ,BYD,GOE,WPILOT,SKODA,STATION,METEO,VENTILE,HAUSGER quelle
class MGR,WPB,WSB,RAIN skript class MGR,WPB,WSB,RAIN,FCS skript
class BROKER,SOLARLOG speicher class BROKER,SOLARLOG speicher
``` ```
Vier Prozesse holen aktiv etwas ab. Alles andere meldet sich von selbst: die Fünf Prozesse holen aktiv etwas ab. Alles andere meldet sich von selbst: die
Ventilsteuerungen, die Wallbox und jedes Gerät, das Ventilsteuerungen, die Wallbox und jedes Gerät, das
Home-Assistant-Discovery spricht, schreiben ohne Umweg auf den Broker. Für Home-Assistant-Discovery spricht, schreiben ohne Umweg auf den Broker. Für
deren Messwerte ist also **kein Skript** zuständig — wer sie sucht, sucht am deren Messwerte ist also **kein Skript** zuständig — wer sie sucht, sucht am
@@ -85,6 +88,19 @@ kurz danach — der Sammler klopft deshalb jede Sekunde an und bekommt so rund
alle 100 Sekunden einen vollständigen Satz. Einzelheiten im Kopf des Moduls alle 100 Sekunden einen vollständigen Satz. Einzelheiten im Kopf des Moduls
und, ausführlich, im Web-Repository unter `doku/byd.md`. und, ausführlich, im Web-Repository unter `doku/byd.md`.
`gatherForecastData` holt alle zwanzig Minuten die Wettervorhersage von
Open-Meteo und schreibt sie nach `solarLog` (`weatherHours`, `weatherDays`,
`weatherForecastLog`, `weatherTilted`) — Grundlage des Meteogramms der
Weboberfläche. Es ist der einzige Sammler, der nichts nach MQTT
veröffentlicht: ein Meteogramm liest niemand im Sekundentakt.
**Es löscht nichts.** Die Tabellen sind zugleich ein Archiv — aus der
Einstrahlung und `EnergyFlow_hourly.pv_kwh` soll später eine eigene
Ertragsprognose gerechnet werden. `wetterarchiv_nachtragen.py` hat sie
einmalig aus der ERA5-Schnittstelle von Open-Meteo bis zum 02.04.2022
zurückgefüllt. Einzelheiten stehen im Web-Repository unter
`doku/meteogramm.md`.
Die Zisterne fällt aus der Reihe — ihr Stand steht in `solarLog`, und Die Zisterne fällt aus der Reihe — ihr Stand steht in `solarLog`, und
`gatherWaterData` liest ihn von dort. Die Daten laufen also durch die `gatherWaterData` liest ihn von dort. Die Daten laufen also durch die
Datenbank hindurch von einem Prozess zum nächsten. Datenbank hindurch von einem Prozess zum nächsten.
@@ -160,6 +176,7 @@ von Hand, wenn sich am Bestand etwas geändert hat.
| `homeassistant/#` | die Geräte selbst | `device_discovery.py` | | `homeassistant/#` | die Geräte selbst | `device_discovery.py` |
| **`solarLog`** | `solarManager.py` | `ajax/*.php`, `gatherWaterData` | | **`solarLog`** | `solarManager.py` | `ajax/*.php`, `gatherWaterData` |
| `byd`, `byd_zellen` (in `solarLog`) | `gatherBYDData.py`, alle 5 bzw. 15 Minuten | Web-Repo (`solarLog_byd.sql`) | | `byd`, `byd_zellen` (in `solarLog`) | `gatherBYDData.py`, alle 5 bzw. 15 Minuten | Web-Repo (`solarLog_byd.sql`) |
| `weatherHours`, `weatherDays`, `weatherTilted`, `weatherForecastLog` (in `solarLog`) | `gatherForecastData.py`, alle 20 Minuten; nichts wird geloescht | Web-Repo (`solarLog_weather.sql`) |
| **`homeMesh`** | `device_discovery.py`, Runner, Web-Editor | Runner, `ajax/*.php` | | **`homeMesh`** | `device_discovery.py`, Runner, Web-Editor | Runner, `ajax/*.php` |
| `skoda.conf` | Einstellungen → Fahrzeug (`restricted/skodaKeys.php`) oder von Hand | `gatherSkodaData.py`, `ajax/skodaCmd.php` | | `skoda.conf` | Einstellungen → Fahrzeug (`restricted/skodaKeys.php`) oder von Hand | `gatherSkodaData.py`, `ajax/skodaCmd.php` |
@@ -170,6 +187,7 @@ von Hand, wenn sich am Bestand etwas geändert hat.
| `solarManager.py` | `startSolarServer.sh` (Aufgabenplaner, beim Hochfahren) | | `solarManager.py` | `startSolarServer.sh` (Aufgabenplaner, beim Hochfahren) |
| `autoActions/autoaction_runner.py` | dito | | `autoActions/autoaction_runner.py` | dito |
| `gatherRainData.py` | dito | | `gatherRainData.py` | dito |
| `gatherForecastData.py` | dito |
| `wsMQTTbridge.py` | `startMQTTbridge.sh` | | `wsMQTTbridge.py` | `startMQTTbridge.sh` |
| `wattpilot_bruecke.py` | `startWattpilotMQTT.sh` | | `wattpilot_bruecke.py` | `startWattpilotMQTT.sh` |
| `autoActions/fetch_calendar.py` | Cronjob, einmal im Jahr | | `autoActions/fetch_calendar.py` | Cronjob, einmal im Jahr |