Doku auf den Stand gebracht: Vorabend, skoda.conf, Wecker-Reste
- autoActions/README: Rahmen gilt heute oder am Vorabend fuer morgen, vorabend.sql beim Einrichten, startSolarServer.sh startet drei Prozesse, Beispiel der Verkettung wie die echten Automatiken, Neustart ueber SSH - README: skoda_ladepunkte und skoda.conf, Werkzeuge-Tabelle, Datenbank alarm ist geloescht - config.ini.example: [alarm] und zeit.py entfernt, die gibt es nicht mehr - Runner-Kopfkommentar verweist nicht mehr auf auto_watering.py Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -44,7 +44,7 @@ flowchart LR
|
||||
METEO -->|HTTPS| RAIN
|
||||
|
||||
SOLARLOG -->|zisterne| MGR
|
||||
MGR -->|"EnergyFlow · skoda"| SOLARLOG
|
||||
MGR -->|"EnergyFlow · skoda<br/>skoda_ladepunkte"| SOLARLOG
|
||||
|
||||
MGR -->|"solarManager/#"| BROKER
|
||||
WPB -->|"wattpilot/#"| BROKER
|
||||
@@ -148,6 +148,7 @@ von Hand, wenn sich am Bestand etwas geändert hat.
|
||||
| `homeassistant/#` | die Geräte selbst | `device_discovery.py` |
|
||||
| **`solarLog`** | `solarManager.py` | `ajax/*.php`, `gatherWaterData` |
|
||||
| **`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` |
|
||||
|
||||
## Was wann startet
|
||||
|
||||
@@ -197,16 +198,27 @@ nicht in den Ferien, nicht an Feiertagen, WLED-Preset 5 („Wakeup") auf
|
||||
im Kopf, wie dasselbe im Dashboard von Hand geht.
|
||||
|
||||
Damit ist die Weckzeit dort einstellbar, wo alles andere auch eingestellt
|
||||
wird — unter „Automatismen", Etage EG. Die Datenbank `alarm` liest niemand
|
||||
mehr; sie steht noch da, mitsamt dem Abschnitt `[alarm]` in der `config.ini`,
|
||||
und kann weg, sobald der erste Morgen ohne `wecker.py` durch ist.
|
||||
wird — unter „Automatismen", Etage EG. Die Datenbank `alarm` ist gelöscht,
|
||||
und `config.ini.example` hat keinen Abschnitt `[alarm]` mehr. Ein
|
||||
übriggebliebener `[alarm]` in einer echten `config.ini` stört nicht, liest
|
||||
aber auch niemand.
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Zugangsdaten und Standort stehen in `config.ini` (Vorlage:
|
||||
`config.ini.example`), gelesen über `konfig.py`; der Runner hat seine eigene
|
||||
unter `autoActions/`. Beide sind per `.gitignore` ausgenommen — nichts davon
|
||||
gehört in den Quelltext.
|
||||
unter `autoActions/`. Die Zugangsschlüssel der MyŠkoda-API stehen getrennt in
|
||||
`skoda.conf` (Vorlage: `skoda.conf.example`), weil auch die Weboberfläche sie
|
||||
liest und im Reiter „Fahrzeug" neue einträgt. Alle drei sind per
|
||||
`.gitignore` ausgenommen — nichts davon gehört in den Quelltext.
|
||||
|
||||
## Werkzeuge
|
||||
|
||||
| Skript | wofür |
|
||||
|---|---|
|
||||
| `skoda_test.py` | prüft Zerlegung und Kontingent-Buchführung von `gatherSkodaData.py` ohne Fahrzeug und ohne Netz |
|
||||
| `skoda_ladepunkte_nachtragen.py` | holt den Wallbox-Verlauf vergangener Ladungen aus `EnergyFlow` nach `skoda_ladepunkte`, solange er dort noch nicht ausgedünnt ist (`--probe` schreibt nichts) |
|
||||
| `wecker_zu_automatik.sql` | hat den alten Wecker als Automatik angelegt; nur noch zum Nachlesen |
|
||||
|
||||
Mehr zum Runner selbst, zum Aufbau einer Automatik und zu den Transporten
|
||||
steht in [autoActions/README.md](autoActions/README.md).
|
||||
|
||||
+20
-12
@@ -93,8 +93,7 @@ kostete jeder Aussetzer die Automatik für den ganzen Tag — und Aussetzer gab
|
||||
es reichlich, weil die Uhr am Geräte-Poll hing und jede dritte Minute
|
||||
übersprang. Jetzt gilt die Bedingung fünf Minuten lang (einstellbar), die
|
||||
Flanke sorgt weiterhin für genau einen Lauf, und ein Neustart mitten im
|
||||
Fenster holt den Lauf nach. Die breiten Zeitfenster in `auto_watering.py`
|
||||
folgen derselben Überlegung.
|
||||
Fenster holt den Lauf nach.
|
||||
|
||||
Beim Sonnenauf- und -untergang ist der Wert ein Versatz, und der kann davor
|
||||
oder danach liegen — deshalb dieselben drei Fälle mal zwei: `+ 00:30` eine
|
||||
@@ -116,7 +115,8 @@ das Fenster zugeht und in diesem Fenster noch nichts passiert ist.
|
||||
|
||||
## Der Rahmen
|
||||
|
||||
Vor jeder Auswertung fragt `tag_passt()`, ob der heutige Tag überhaupt zählt.
|
||||
Vor jeder Auswertung fragt `tag_passt()`, ob der Tag überhaupt zählt — heute,
|
||||
oder bei einer Vorabend-Regel morgen (siehe [Am Vorabend](#am-vorabend)).
|
||||
Drei Dinge entscheiden das: die Wochentagsmaske (`weekdays`, ein Bit je Tag,
|
||||
Montag ist Bit 0), und Ferien und Feiertage aus `calendar_days`.
|
||||
|
||||
@@ -222,9 +222,10 @@ vorhandenen „Zeitpunkt". Jede Automatik ist dort ein Messwert, ihr Wert ist
|
||||
der Zeitpunkt der letzten Auslösung:
|
||||
|
||||
```
|
||||
Wecker Magdalena um 05:50 → Licht auf Wakeup
|
||||
Rollladen Magdalena Wecker Magdalena + 00:10
|
||||
UND Sonnenaufgang ab + 00:00 → Rollladen auf
|
||||
Wecker Magdalena um 05:50 → Licht auf Wakeup
|
||||
Wecker Magdalena Rollos Wecker Magdalena ab + 00:10
|
||||
UND Sonne Ost > 200 Lux → Rollläden auf
|
||||
Schlafzimmer morgens Wecker Magdalena Rollos ab + 00:00 → Rollladen auf
|
||||
```
|
||||
|
||||
Der Editor braucht dafür keine Zeile Änderung. Er listet Geräte und deren
|
||||
@@ -387,6 +388,7 @@ Parameter dort keine eigene URL — ihr Name *ist* der Platzhalter.
|
||||
cp config.ini.example config.ini # ausfüllen: Datenbank, MQTT, Tahoma
|
||||
mysql -h 127.0.0.1 -P 3310 -u homeMesh -p homeMesh < automatik_ausloeser.sql
|
||||
mysql -h 127.0.0.1 -P 3310 -u homeMesh -p homeMesh < rahmen_erweitern.sql
|
||||
mysql -h 127.0.0.1 -P 3310 -u homeMesh -p homeMesh < vorabend.sql
|
||||
python3 fetch_calendar.py # Feiertage und Ferien holen
|
||||
python3 autoaction_runner.py --once --dry-run --verbose # Probelauf
|
||||
```
|
||||
@@ -398,8 +400,9 @@ Messwerte darunter legt der Runner selbst an. Ohne das Skript läuft alles
|
||||
wählen.
|
||||
|
||||
`rahmen_erweitern.sql` gehört zum Rahmen: es beschriftet `on_vacation` und
|
||||
`on_holiday` mit ihren drei Bedeutungen und legt `once_per_day` an. Beide
|
||||
Skripte sind idempotent — ein zweiter Lauf schadet nicht.
|
||||
`on_holiday` mit ihren drei Bedeutungen und legt `once_per_day` an.
|
||||
`vorabend.sql` legt `next_day` an. Alle drei Skripte sind idempotent — ein
|
||||
zweiter Lauf schadet nicht.
|
||||
|
||||
`--dry-run` schaltet nichts, protokolliert aber jedes Kommando, das geschickt
|
||||
würde. `--once` macht einen einzigen Durchlauf.
|
||||
@@ -412,13 +415,15 @@ nicht im Web-Verzeichnis:
|
||||
```
|
||||
/volume1/homes/wagner/SolarManager/
|
||||
├── solarManager.py
|
||||
├── startSolarServer.sh startet beide, siehe unten
|
||||
├── gatherRainData.py
|
||||
├── startSolarServer.sh startet alle drei, siehe unten
|
||||
└── autoActions/
|
||||
├── autoaction_runner.py
|
||||
├── transports.py
|
||||
├── fetch_calendar.py
|
||||
├── automatik_ausloeser.sql einmalig, siehe Einrichten
|
||||
├── rahmen_erweitern.sql einmalig, siehe Einrichten
|
||||
├── vorabend.sql einmalig, siehe Einrichten
|
||||
└── config.ini Zugangsdaten, nicht im Git
|
||||
```
|
||||
|
||||
@@ -427,10 +432,13 @@ Das Web-UI kennt diesen Pfad nicht — Browser und Runner reden ausschließlich
|
||||
sobald im Browser etwas gespeichert wurde; ein Neustart nach jeder Änderung ist
|
||||
nicht nötig.
|
||||
|
||||
`startSolarServer.sh` startet `solarManager.py` und den Runner gemeinsam und
|
||||
beendet vorher, was schon läuft. Aufgerufen wird es beim Booten (auf der
|
||||
`startSolarServer.sh` startet `solarManager.py`, den Runner und
|
||||
`gatherRainData.py` gemeinsam und beendet vorher, was schon läuft. Aufgerufen wird es beim Booten (auf der
|
||||
Synology über den Aufgabenplaner, Ereignis „Hochfahren", als root); dasselbe
|
||||
Skript von Hand aufzurufen ist der normale Weg, den Runner neu zu starten.
|
||||
Skript von Hand aufzurufen ist der normale Weg, den Runner neu zu starten —
|
||||
als `wagner` genügt, ohne sudo. Über SSH abgekoppelt, damit die Prozesse das
|
||||
Abmelden überleben:
|
||||
`setsid nohup bash startSolarServer.sh > /tmp/restart_solar.out 2>&1 < /dev/null &`.
|
||||
Zwei Instanzen dürfen nie gleichzeitig laufen — sie würden jedes Kommando
|
||||
doppelt schicken und sich gegenseitig vom MQTT-Broker werfen, weil beide
|
||||
dieselbe Client-Kennung benutzen. Genau davor schützt das Beenden am Anfang.
|
||||
|
||||
@@ -41,8 +41,7 @@ dahin. Ausgeloest wird in allen drei Faellen nur einmal, eben wegen der
|
||||
Flanke. Das Nachholfenster bei "um" ist der Ersatz fuer die frueher
|
||||
verlangte Punktgenauigkeit: ein Neustart, ein haengendes Geraet oder ein
|
||||
langsamer Durchlauf kosten die Automatik nicht mehr den ganzen Tag, und weil
|
||||
nur die Flanke zaehlt, laeuft sie trotzdem hoechstens einmal. Dieselbe
|
||||
Ueberlegung steht hinter den breiten Zeitfenstern in auto_watering.py.
|
||||
nur die Flanke zaehlt, laeuft sie trotzdem hoechstens einmal.
|
||||
|
||||
Beim Sonnenauf- und -untergang traegt der Operator zusaetzlich das
|
||||
Vorzeichen des Versatzes: "+ 00:30" eine halbe Stunde danach, ">=- 00:30"
|
||||
|
||||
+1
-11
@@ -11,7 +11,7 @@
|
||||
; Messwerte (solarLog)
|
||||
; ===========================================================================
|
||||
; Benutzt von solarManager.py, gatherWaterData.py, gatherSkodaData.py,
|
||||
; skoda_testdaten.py und zeit.py.
|
||||
; skoda_testdaten.py und skoda_ladepunkte_nachtragen.py.
|
||||
[database]
|
||||
host = localhost
|
||||
port = 3310
|
||||
@@ -19,16 +19,6 @@ user = solarLog
|
||||
password =
|
||||
database = solarLog
|
||||
|
||||
; ===========================================================================
|
||||
; Wecker (wecker.py)
|
||||
; ===========================================================================
|
||||
[alarm]
|
||||
host = localhost
|
||||
port = 3310
|
||||
user = alarm
|
||||
password =
|
||||
database = alarm
|
||||
|
||||
; ===========================================================================
|
||||
; Wallbox
|
||||
; ===========================================================================
|
||||
|
||||
Reference in New Issue
Block a user