From 08ea01f94492be8517de401f6e0a6d7e54e5b734 Mon Sep 17 00:00:00 2001 From: Michael Sauer Date: Fri, 2 Oct 2026 19:32:33 +0200 Subject: [PATCH] fix(api): system/info meldet im AP-Betrieb den AP-Namen nl_wifi_status() fuellte out->ssid immer aus der Stations-SSID. Eine Standalone-Lampe mit noch gespeicherten Heimnetzdaten meldete damit mode: "ap", standalone: true UND den Namen des Heim-WLANs: App und HA zeigten den falschen Netznamen, und der Heimnetzname stand in einer tokenfrei lesbaren Antwort. Die Spec verlangt dort den AP-Namen. Gemeldet wird jetzt im Modus "ap" (eigener AP oder Onboarding-AP) der WIRKSAME AP-Name: die Daten des laufenden AP, sonst der gewuenschte, sonst der Hostname. "apsta" bleibt bei der Station - dort ist sie die Hauptsache. Erwuenschter Nebeneffekt: ein Rueckfall auf andere AP-Daten wird ueber die API sichtbar, ohne ein neues Feld. Beruehrt den API-Vertrag, deshalb ein eigener Commit. test/test_api.c ist nicht betroffen: die Tests fahren ueber den Fake nl_sys_info_t, nl_wifi_status() selbst gibt es im Hostbau nicht. --- README.md | 4 +++- src/net/nl_wifi_w600.c | 11 ++++++++++- 2 files changed, 13 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index b006195..e03a800 100644 --- a/README.md +++ b/README.md @@ -138,7 +138,9 @@ Onboarding-AP `ninlight-`. `GET system/settings` zeigt einen `standalone`-Block mit `enabled`, dem **wirksamen** AP-Namen (`ssid`), `channel` und `pulse` — das Passwort steht nie darin. `GET system/info` meldet -`wifi.standalone`. +`wifi.standalone` und im AP-Betrieb (`mode: "ap"`, also eigener AP oder Onboarding-AP) unter +`wifi.ssid` den **wirksamen AP-Namen** statt der gespeicherten Stations-SSID — der Name des +Heimnetzes steht damit nicht in einer tokenfrei lesbaren Antwort. Der Startpuls übermalt als Überlagerung die sACN-Ausgabe: solange er läuft, ist von sACN nichts zu sehen. Beim Ausprobieren von sACN über den eigenen AP den Puls mit `pulse: false` abschalten oder diff --git a/src/net/nl_wifi_w600.c b/src/net/nl_wifi_w600.c index 9790321..08018f7 100644 --- a/src/net/nl_wifi_w600.c +++ b/src/net/nl_wifi_w600.c @@ -574,7 +574,16 @@ void nl_wifi_status(nl_wifi_status_t *out) lock(); out->mode = nl_wifi_sm_mode(&s_sm); out->error = nl_wifi_error_name(s_sm.error); - copy(out->ssid, s_ssid, sizeof out->ssid); + /* I4: Im eigenen AP (Standalone oder Onboarding) ist die Stations-SSID nicht der Name + * des Netzes, auf dem die Lampe antwortet - und ein Heimnetzname hat in einer + * tokenfrei lesbaren Antwort ohnehin nichts verloren. Gemeldet wird der WIRKSAME + * AP-Name; damit wird auch ein Rueckfall auf andere AP-Daten ueber die API sichtbar, + * ohne ein neues Feld. "apsta" bleibt bei der Station: dort ist sie die Hauptsache. */ + if (strcmp(nl_wifi_sm_mode(&s_sm), "ap") == 0) + copy(out->ssid, s_ap_live_ssid[0] ? s_ap_live_ssid : (s_ap_ssid[0] ? s_ap_ssid : s_hostname), + sizeof out->ssid); + else + copy(out->ssid, s_ssid, sizeof out->ssid); ap_up = s_sm.ap_up || s_sm.state == NL_WIFI_ST_AP_ONBOARDING; unlock(); }