Wecker als Automatik statt als eigener Prozess
wecker.py hat genau das getan, was der AutoAction-Runner ohnehin kann - nur mit allem doppelt: eigener Datenbank alarm, eigenem Feiertags- und Ferienkalender neben calendar_days, eigenem UDP-Log auf Port 13377, eigener Endlosschleife und einem Startskript samt naechtlichem Neustart um drei. Punkt fuer Punkt hatte der Runner die bessere Fassung schon: die Zeit als Bedingung "um 05:50" mit Nachholfenster statt eines Vergleichs im 20-Sekunden-Takt, weekdays als Bitmaske statt sieben Spalten, on_holiday/on_vacation gegen calendar_days statt gegen einen zweiten Kalender, die steigende Flanke statt einer wecked-Spalte, und den Versand mit einem Faden je Geraet statt fuenf HTTP-Versuchen im Abstand von vier Sekunden. Umgezogen ist die eine Weckzeit, die scharf war: 05:50, Mo-Fr, nicht in den Ferien, nicht an Feiertagen, WLED-Preset 5 auf MenasHimmel. Die drei anderen Zeilen in alarmtime standen auf onoff = -1. wecker_zu_automatik.sql legt die Automatik an und beschreibt im Kopf, wie dasselbe im Dashboard von Hand geht. Die Datenbank alarm und der Abschnitt [alarm] in der config.ini bleiben vorerst stehen - sie liest nur niemand mehr. Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
@@ -85,10 +85,8 @@ flowchart TB
|
||||
BROKER{{"<b>MQTT-Broker</b>"}}
|
||||
SOLARLOG[("<b>solarLog</b><br/><small>Verlauf</small>")]
|
||||
HOMEMESH[("<b>homeMesh</b><br/><small>Geräte · Automatiken</small>")]
|
||||
ALARM[("<b>alarm</b><br/><small>Weckzeiten</small>")]
|
||||
|
||||
RUNNER["<b>autoaction_runner.py</b><br/><small>SolarManager</small>"]
|
||||
WECKER["<b>wecker.py</b><br/><small>SolarManager</small>"]
|
||||
KALENDER["<b>fetch_calendar.py</b><br/><small>SolarManager · Cronjob, jährlich</small>"]
|
||||
DISCOVERY["<b>device_discovery.py</b><br/><small>Web · von Hand gestartet</small>"]
|
||||
AJAX["<b>ajax/*.php</b><br/><small>Web</small>"]
|
||||
@@ -103,10 +101,8 @@ flowchart TB
|
||||
RUNNER -.->|"HTTP · WLED · Tahoma"| HAUS
|
||||
BROKER -.->|"Gartenwasser/…/set"| VENTILE
|
||||
|
||||
ALARM --> WECKER
|
||||
FERIEN --> KALENDER
|
||||
KALENDER -->|"calendar_days"| HOMEMESH
|
||||
WECKER -.->|HTTP| HAUS
|
||||
|
||||
BROKER -->|"homeassistant/#"| DISCOVERY
|
||||
HAUS -->|"mDNS · Tahoma"| DISCOVERY
|
||||
@@ -121,8 +117,8 @@ flowchart TB
|
||||
classDef skript fill:#fff6e5,stroke:#d0a548
|
||||
classDef speicher fill:#eaf5ee,stroke:#6fa981
|
||||
classDef geraet fill:#eef4fb,stroke:#7f9dc0
|
||||
class RUNNER,WECKER,DISCOVERY,AJAX,BROWSER,KALENDER skript
|
||||
class BROKER,SOLARLOG,HOMEMESH,ALARM speicher
|
||||
class RUNNER,DISCOVERY,AJAX,BROWSER,KALENDER skript
|
||||
class BROKER,SOLARLOG,HOMEMESH speicher
|
||||
class HAUS,VENTILE,FERIEN geraet
|
||||
```
|
||||
|
||||
@@ -152,7 +148,6 @@ 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` |
|
||||
| **`alarm`** | Web-Oberfläche | `wecker.py` |
|
||||
|
||||
## Was wann startet
|
||||
|
||||
@@ -163,7 +158,6 @@ von Hand, wenn sich am Bestand etwas geändert hat.
|
||||
| `gatherRainData.py` | dito |
|
||||
| `wsMQTTbridge.py` | `startMQTTbridge.sh` |
|
||||
| `wattpilot_bruecke.py` | `startWattpilotMQTT.sh` |
|
||||
| `wecker.py` | `startWecker.sh` |
|
||||
| `autoActions/fetch_calendar.py` | Cronjob, einmal im Jahr |
|
||||
| `device_discovery.py` (Web-Repo) | von Hand |
|
||||
|
||||
@@ -171,6 +165,42 @@ von Hand, wenn sich am Bestand etwas geändert hat.
|
||||
startet — beim Runner ist das wichtig, zwei Instanzen würden jedes Kommando
|
||||
doppelt schicken.
|
||||
|
||||
## Der Wecker ist keiner mehr
|
||||
|
||||
`wecker.py` gibt es nicht mehr. Es hat genau das getan, was der
|
||||
AutoAction-Runner ohnehin kann — nur mit allem doppelt: eigener Datenbank
|
||||
`alarm`, eigenem Feiertags- und Ferienkalender, eigenem UDP-Log auf Port
|
||||
13377, eigener Endlosschleife und einem eigenen Startskript samt nächtlichem
|
||||
Neustart um drei.
|
||||
|
||||
Punkt für Punkt hatte der Runner die bessere Fassung schon:
|
||||
|
||||
| `wecker.py` | Automatik |
|
||||
|---|---|
|
||||
| `alarmtime.time_1` | Bedingung „Uhrzeit um 05:50" |
|
||||
| Wochentagsspalten `mo` … `so` | `weekdays`, eine Bitmaske |
|
||||
| `is_holiday()` gegen `alarm.feiertage` | `on_holiday`, gegen `calendar_days` |
|
||||
| `is_school_holiday()` gegen `alarm.ferien` | `on_vacation`, ebenso |
|
||||
| `alarmtime.wecked = heute` | `cond_met`, die steigende Flanke |
|
||||
| fünf HTTP-Versuche im Abstand von vier Sekunden | der `Versand`, ein Faden je Gerät |
|
||||
| `send_log()` per UDP | `automation_log` und `autoActions.log` |
|
||||
|
||||
Der Kalender war der auffälligste Teil davon: `alarm.feiertage` und
|
||||
`alarm.ferien` standen neben `calendar_days`, das `fetch_calendar.py` einmal
|
||||
im Jahr von openholidaysapi.org holt. Zwei Kalender, die dasselbe wissen
|
||||
müssen, gehen früher oder später auseinander.
|
||||
|
||||
Umgezogen ist die eine Weckzeit, die scharf war: 05:50, Montag bis Freitag,
|
||||
nicht in den Ferien, nicht an Feiertagen, WLED-Preset 5 („Wakeup") auf
|
||||
`MenasHimmel`. Die drei anderen Zeilen in `alarmtime` standen auf
|
||||
`onoff = -1`. `wecker_zu_automatik.sql` legt die Automatik an und beschreibt
|
||||
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.
|
||||
|
||||
## Konfiguration
|
||||
|
||||
Zugangsdaten und Standort stehen in `config.ini` (Vorlage:
|
||||
|
||||
Reference in New Issue
Block a user