FIX-NETATMO-01: Netatmo-Plugin an 2025-API anpassen + /config-Bug fixen
Netatmo hat 2025 den OAuth-Password-Grant komplett abgeschaltet. Auth-Flow ist jetzt nur noch Authorization Code + Refresh-Token. Ausserdem Domain-Migration api.netatmo.net → api.netatmo.com mit Azure-Front-Door-WAF die form-urlencoded POSTs blockt. Plugin (plugins/netatmo.py): - URLs auf api.netatmo.com umgestellt - _post_form sendet JSON statt form-urlencoded (umgeht WAF) - _obtain_tokens nutzt nur noch Refresh-Token-Grant - fetch() zeigt klare Fehlermeldung wenn refresh_token fehlt - config_schema: username/password → refresh_token - Bessere Fehlertexte (zeigt 'tools/netatmo_auth.py erneut ausführen') Helper (tools/netatmo_auth.py): - Lokaler HTTP-Server auf 0.0.0.0:8765 fuer Authorization-Code-Callback - Erkennt LAN-IP automatisch - Erkennt Chromium auf dem Pi (Display :0) fuer localhost-Redirect - Tauscht Code gegen Access+Refresh Token via api.netatmo.com - Schreibt refresh_token in config.json unter plugin_configs.netatmo Bug-Fix /config: - AttributeError: module 'dashboard' has no attribute 'SLOTS' - legacy v1 slot-logik entfernt (nutzt nicht mehr dashboard_mod.SLOTS) - /config macht jetzt NUR noch refresh_interval_s speichern - Slot-Belegung laeuft seit v2 ueber /api/layout (drag&drop)
This commit is contained in:
@@ -153,14 +153,9 @@ def save_config():
|
||||
except (TypeError, ValueError):
|
||||
pass
|
||||
|
||||
# slot belegung: pro slot "slot_<idx>_plugin"
|
||||
slots = cfg.get("slots", [])
|
||||
for i in range(dashboard_mod.SLOTS):
|
||||
plugin_name = request.form.get(f"slot_{i}_plugin", "").strip()
|
||||
if plugin_name and slots[i]["plugin"] != plugin_name:
|
||||
slots[i]["plugin"] = plugin_name
|
||||
slots[i]["config"] = {} # reset auf plugin defaults
|
||||
cfg["slots"] = slots
|
||||
# NOTE: legacy v1 slot-X-belegung wird nicht mehr unterstützt — die
|
||||
# Admin-UI nutzt seit v2 die Drag&Drop-API unter /api/layout für
|
||||
# Slot-Belegung. /config macht heute NUR noch den Refresh-Intervall.
|
||||
dashboard_mod.save_config(cfg)
|
||||
return redirect(url_for("index"))
|
||||
|
||||
|
||||
Reference in New Issue
Block a user