From ef0cda1d673f9e668ebbed87b37f250511be76f7 Mon Sep 17 00:00:00 2001 From: Peter Siegmund Date: Sat, 10 Jan 2026 00:33:34 +0100 Subject: [PATCH] update web ui Signed-off-by: Peter Siegmund --- firmware/components/api-server/CMakeLists.txt | 1 + .../components/api-server/include/common.h | 8 ++++++++ .../components/api-server/src/api_handlers.c | 19 +++++++++--------- firmware/components/api-server/src/common.c | 20 +++++++++++++++++++ .../api-server/src/websocket_handler.c | 19 +++++++++--------- firmware/storage/www/index.html | 6 +++--- firmware/storage/www/js/i18n.js | 14 ++++++++++++- firmware/storage/www/js/ui.js | 2 +- 8 files changed, 64 insertions(+), 25 deletions(-) create mode 100644 firmware/components/api-server/include/common.h create mode 100644 firmware/components/api-server/src/common.c diff --git a/firmware/components/api-server/CMakeLists.txt b/firmware/components/api-server/CMakeLists.txt index bee7a48..13dee36 100644 --- a/firmware/components/api-server/CMakeLists.txt +++ b/firmware/components/api-server/CMakeLists.txt @@ -1,5 +1,6 @@ idf_component_register(SRCS src/api_server.c + src/common.c src/api_handlers.c src/websocket_handler.c INCLUDE_DIRS "include" diff --git a/firmware/components/api-server/include/common.h b/firmware/components/api-server/include/common.h new file mode 100644 index 0000000..ffb9a73 --- /dev/null +++ b/firmware/components/api-server/include/common.h @@ -0,0 +1,8 @@ +#ifndef COMMON_H +#define COMMON_H + +#include + +cJSON *create_light_status_json(void); + +#endif // COMMON_H diff --git a/firmware/components/api-server/src/api_handlers.c b/firmware/components/api-server/src/api_handlers.c index 921b6b9..dad1a78 100644 --- a/firmware/components/api-server/src/api_handlers.c +++ b/firmware/components/api-server/src/api_handlers.c @@ -1,4 +1,5 @@ #include "api_handlers.h" +#include "common.h" #include #include @@ -102,6 +103,8 @@ esp_err_t api_wifi_scan_handler(httpd_req_t *req) cJSON *entry = cJSON_CreateObject(); cJSON_AddStringToObject(entry, "ssid", (const char *)ap_list[i].ssid); cJSON_AddNumberToObject(entry, "rssi", ap_list[i].rssi); + bool secure = ap_list[i].authmode != WIFI_AUTH_OPEN; + cJSON_AddBoolToObject(entry, "secure", secure); cJSON_AddItemToArray(json, entry); } } @@ -293,16 +296,12 @@ esp_err_t api_light_schema_handler(httpd_req_t *req) esp_err_t api_light_status_handler(httpd_req_t *req) { ESP_LOGI(TAG, "GET /api/light/status"); - - // TODO: Implement actual light status retrieval - const char *response = "{" - "\"on\":true," - "\"thunder\":false," - "\"mode\":\"simulation\"," - "\"schema\":\"schema_01.csv\"," - "\"color\":{\"r\":255,\"g\":240,\"b\":220}" - "}"; - return send_json_response(req, response); + cJSON *json = create_light_status_json(); + char *response = cJSON_PrintUnformatted(json); + cJSON_Delete(json); + esp_err_t res = send_json_response(req, response); + free(response); + return res; } // ============================================================================ diff --git a/firmware/components/api-server/src/common.c b/firmware/components/api-server/src/common.c new file mode 100644 index 0000000..d30c979 --- /dev/null +++ b/firmware/components/api-server/src/common.c @@ -0,0 +1,20 @@ +#include "common.h" +#include +#include + +// Gibt ein cJSON-Objekt with dem aktuellen Lichtstatus zurück +cJSON *create_light_status_json(void) +{ + cJSON *json = cJSON_CreateObject(); + // TODO: Echte Werte einfügen, aktuell Dummy-Daten + cJSON_AddBoolToObject(json, "on", false); + cJSON_AddBoolToObject(json, "thunder", false); + cJSON_AddStringToObject(json, "mode", "day"); + cJSON_AddStringToObject(json, "schema", "schema_03.csv"); + cJSON *color = cJSON_CreateObject(); + cJSON_AddNumberToObject(color, "r", 255); + cJSON_AddNumberToObject(color, "g", 240); + cJSON_AddNumberToObject(color, "b", 220); + cJSON_AddItemToObject(json, "color", color); + return json; +} diff --git a/firmware/components/api-server/src/websocket_handler.c b/firmware/components/api-server/src/websocket_handler.c index 7c25e12..6f9023b 100644 --- a/firmware/components/api-server/src/websocket_handler.c +++ b/firmware/components/api-server/src/websocket_handler.c @@ -1,4 +1,5 @@ #include "websocket_handler.h" +#include "common.h" #include #include @@ -56,15 +57,11 @@ static esp_err_t handle_ws_message(httpd_req_t *req, httpd_ws_frame_t *ws_pkt) // For now, we just check if it's a status request if (ws_pkt->payload != NULL && strstr((char *)ws_pkt->payload, "getStatus") != NULL) { - // Send status response - // TODO: Get actual status values - const char *response = "{" - "\"type\":\"status\"," - "\"on\":true," - "\"mode\":\"simulation\"," - "\"schema\":\"schema_01.csv\"," - "\"color\":{\"r\":255,\"g\":240,\"b\":220}" - "}"; + // Status-JSON generieren + cJSON *json = create_light_status_json(); + cJSON_AddStringToObject(json, "type", "status"); + char *response = cJSON_PrintUnformatted(json); + cJSON_Delete(json); httpd_ws_frame_t ws_resp = {.final = true, .fragmented = false, @@ -72,7 +69,9 @@ static esp_err_t handle_ws_message(httpd_req_t *req, httpd_ws_frame_t *ws_pkt) .payload = (uint8_t *)response, .len = strlen(response)}; - return httpd_ws_send_frame(req, &ws_resp); + esp_err_t ret = httpd_ws_send_frame(req, &ws_resp); + free(response); + return ret; } return ESP_OK; diff --git a/firmware/storage/www/index.html b/firmware/storage/www/index.html index 74e8b04..09ff919 100644 --- a/firmware/storage/www/index.html +++ b/firmware/storage/www/index.html @@ -70,7 +70,7 @@ 🌙 Nacht - @@ -109,7 +109,7 @@ -
+