From b58788ded53990545a92ddae02464117c4024d0c Mon Sep 17 00:00:00 2001 From: Thomas Basler Date: Tue, 12 Apr 2022 23:53:58 +0200 Subject: [PATCH] Added API endpoint which shows network info --- include/WebApi.h | 2 ++ platformio.ini | 1 + src/WebApi.cpp | 29 +++++++++++++++++++++++++++++ 3 files changed, 32 insertions(+) diff --git a/include/WebApi.h b/include/WebApi.h index b7db9593..7f95aeae 100644 --- a/include/WebApi.h +++ b/include/WebApi.h @@ -15,6 +15,8 @@ private: void onWebsocketEvent(AsyncWebSocket* server, AsyncWebSocketClient* client, AwsEventType type, void* arg, uint8_t* data, size_t len); void onNotFound(AsyncWebServerRequest* request); + + void onNetworkStatus(AsyncWebServerRequest* request); }; extern WebApiClass WebApi; \ No newline at end of file diff --git a/platformio.ini b/platformio.ini index a8ca9130..a4b5e474 100644 --- a/platformio.ini +++ b/platformio.ini @@ -24,6 +24,7 @@ build_flags = lib_deps = https://github.com/lorol/LITTLEFS.git https://github.com/me-no-dev/ESPAsyncWebServer.git + bblanchon/ArduinoJson @ ^6.19.4 board = esp32dev board_build.partitions = partitions_custom.csv diff --git a/src/WebApi.cpp b/src/WebApi.cpp index 1a7db66b..0c0b3216 100644 --- a/src/WebApi.cpp +++ b/src/WebApi.cpp @@ -1,4 +1,7 @@ #include "WebApi.h" +#include "ArduinoJson.h" +#include "AsyncJson.h" +#include "WiFiSettings.h" #include "defaults.h" #include @@ -18,6 +21,8 @@ void WebApiClass::init() _ws.onEvent(std::bind(&WebApiClass::onWebsocketEvent, this, _1, _2, _3, _4, _5, _6)); + _server.on("/api/network/status", HTTP_GET, std::bind(&WebApiClass::onNetworkStatus, this, _1)); + _server.serveStatic("/", LITTLEFS, "/", "max-age=86400").setDefaultFile("index.html"); _server.onNotFound(std::bind(&WebApiClass::onNotFound, this, _1)); _server.begin(); @@ -42,4 +47,28 @@ void WebApiClass::onWebsocketEvent(AsyncWebSocket* server, AsyncWebSocketClient* } } +void WebApiClass::onNetworkStatus(AsyncWebServerRequest* request) +{ + AsyncJsonResponse* response = new AsyncJsonResponse(); + JsonObject root = response->getRoot(); + + root[F("sta_status")] = ((WiFi.getMode() & WIFI_STA) != 0); + root[F("sta_ssid")] = WiFi.SSID(); + root[F("sta_ip")] = WiFi.localIP().toString(); + root[F("sta_netmask")] = WiFi.subnetMask().toString(); + root[F("sta_gateway")] = WiFi.gatewayIP().toString(); + root[F("sta_dns1")] = WiFi.dnsIP(0).toString(); + root[F("sta_dns2")] = WiFi.dnsIP(1).toString(); + root[F("sta_mac")] = WiFi.macAddress(); + root[F("sta_rssi")] = WiFi.RSSI(); + root[F("ap_status")] = ((WiFi.getMode() & WIFI_AP) != 0); + root[F("ap_ssid")] = WiFiSettings.getApName(); + root[F("ap_ip")] = WiFi.softAPIP().toString(); + root[F("ap_mac")] = WiFi.softAPmacAddress(); + root[F("ap_stationnum")] = WiFi.softAPgetStationNum(); + + response->setLength(); + request->send(response); +} + WebApiClass WebApi; \ No newline at end of file