Shelly: nur Komponenten ueber MQTT, die auch senden

"status_ntf" am Geraet heisst nur, dass gesendet werden darf - nicht, dass
jede Komponente es tut. Der erste Suchlauf hat deshalb auch die
Temperaturkomponente der beiden Pro 3EM auf ein Topic gelegt
(Power_EG/status/temperature:0), und dort kam nie etwas an: unter Power_EG/#
sendet das Geraet ausschliesslich em:0, emdata:0 und online. Die beiden
Temperaturmesswerte waeren still auf ihrem letzten Wert stehengeblieben.

Jetzt entscheidet die Liste MQTT_KOMPONENTEN, welche Komponente ein Topic
bekommt - heute em und switch. Alles andere bleibt beim Abfragen: langsamer,
aber richtig. Nachgetragen wird per Hand, nachdem man mitgehoert hat; eine
automatische Erkennung waere unzuverlaessig, weil eine Komponente, die nur
bei Aenderung sendet, waehrend eines kurzen Lauschens nichts sagt.

Nach dem erneuten Suchlauf: die beiden EM-Zaehler kommen ueber den Broker,
die beiden Temperaturen und der Gen1-Handtuchtrockner werden abgefragt -
HTTP: 3 Messwerte an 3 Endpunkten statt vorher 35.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
This commit is contained in:
2026-09-09 18:15:16 +02:00
co-authored by Claude Opus 5
parent 0fd73499d9
commit 20e084bbc8
2 changed files with 38 additions and 9 deletions
+16 -6
View File
@@ -545,12 +545,22 @@ Zwei Eigenschaften, die man kennen muss:
aktualisiert, neue kommen dazu. Abgebaute Geräte verschwinden nur über
**Einstellungen → Geräte → Papierkorb** (und auch dort nur, wenn keine
Automatik mehr auf sie zeigt).
* **Shelly, zwei Wege.** Alte Shellys können kein MQTT und bleiben beim
HTTP-Weg: in `actor_states.url` steht ein Feldname der JSON-Antwort. Neuere
(Gen2 mit eingeschaltetem `status_ntf`) melden von selbst an den Broker —
dann steht in `url` das Topic (`Power_EG/status/em:0`) und in `value_path`
der Schlüssel. Geschaltet werden auch sie weiter über HTTP. Der Runner teilt
seine Messwerte deshalb je Wert zu, nicht je Gerät.
* **Shelly, zwei Wege — und zwar je Komponente.** Alte Shellys können kein
MQTT und bleiben ganz beim HTTP-Weg: in `actor_states.url` steht ein
Feldname der JSON-Antwort. Bei Gen2-Geräten mit eingeschaltetem `status_ntf`
steht dagegen das Topic in `url` (`Power_EG/status/em:0`) und der Schlüssel
in `value_path`.
Das gilt aber nur für Komponenten, die auch wirklich senden — die Liste
steht als `MQTT_KOMPONENTEN` in `modules/shelly_module.py` und enthält
heute `em` und `switch`. Der Pro 3EM etwa hat eine Temperaturkomponente im
RPC-Status, veröffentlicht sie aber nie; ein Messwert auf diesem Topic
bliebe für immer auf seinem letzten Wert stehen. Alles außerhalb der Liste
wird deshalb weiter abgefragt. Wer eine Komponente ergänzen will, hört
vorher mit (`mosquitto_sub -t '<präfix>/#' -v`).
Geschaltet werden auch die neuen Geräte über HTTP. Der Runner teilt seine
Messwerte deshalb je Wert zu, nicht je Gerät.
---