diff --git a/main/proto/status.pb.h b/main/proto/status.pb.h index 53a06ea..a5bc277 100644 --- a/main/proto/status.pb.h +++ b/main/proto/status.pb.h @@ -34,6 +34,7 @@ typedef struct _WifiStatus { bool connected; pb_callback_t ssid; int32_t rssi; + pb_callback_t ip_address; } WifiStatus; /* Contains raw UART data */ @@ -66,13 +67,13 @@ extern "C" { /* Initializer values for message structs */ #define SensorChannelData_init_default {0, 0, 0} #define SensorData_init_default {false, SensorChannelData_init_default, false, SensorChannelData_init_default, false, SensorChannelData_init_default, 0, 0} -#define WifiStatus_init_default {0, {{NULL}, NULL}, 0} +#define WifiStatus_init_default {0, {{NULL}, NULL}, 0, {{NULL}, NULL}} #define UartData_init_default {{{NULL}, NULL}} #define LoadSwStatus_init_default {0, 0} #define StatusMessage_init_default {0, {SensorData_init_default}} #define SensorChannelData_init_zero {0, 0, 0} #define SensorData_init_zero {false, SensorChannelData_init_zero, false, SensorChannelData_init_zero, false, SensorChannelData_init_zero, 0, 0} -#define WifiStatus_init_zero {0, {{NULL}, NULL}, 0} +#define WifiStatus_init_zero {0, {{NULL}, NULL}, 0, {{NULL}, NULL}} #define UartData_init_zero {{{NULL}, NULL}} #define LoadSwStatus_init_zero {0, 0} #define StatusMessage_init_zero {0, {SensorData_init_zero}} @@ -89,6 +90,7 @@ extern "C" { #define WifiStatus_connected_tag 1 #define WifiStatus_ssid_tag 2 #define WifiStatus_rssi_tag 3 +#define WifiStatus_ip_address_tag 4 #define UartData_data_tag 1 #define LoadSwStatus_main_tag 1 #define LoadSwStatus_usb_tag 2 @@ -120,7 +122,8 @@ X(a, STATIC, SINGULAR, UINT32, uptime_sec, 5) #define WifiStatus_FIELDLIST(X, a) \ X(a, STATIC, SINGULAR, BOOL, connected, 1) \ X(a, CALLBACK, SINGULAR, STRING, ssid, 2) \ -X(a, STATIC, SINGULAR, INT32, rssi, 3) +X(a, STATIC, SINGULAR, INT32, rssi, 3) \ +X(a, CALLBACK, SINGULAR, STRING, ip_address, 4) #define WifiStatus_CALLBACK pb_default_field_callback #define WifiStatus_DEFAULT NULL diff --git a/main/service/monitor.c b/main/service/monitor.c index a9f0ac9..4770753 100644 --- a/main/service/monitor.c +++ b/main/service/monitor.c @@ -138,6 +138,8 @@ static void status_wifi_callback(void* arg) StatusMessage message = StatusMessage_init_zero; message.which_payload = StatusMessage_wifi_status_tag; WifiStatus* wifi_status = &message.payload.wifi_status; + char ip_str[16]; + esp_netif_ip_info_t ip_info; if (wifi_get_current_ap_info(&ap_info) == ESP_OK) { @@ -153,6 +155,17 @@ static void status_wifi_callback(void* arg) wifi_status->rssi = 0; } + if (wifi_get_current_ip_info(&ip_info) == ESP_OK) + { + esp_ip4addr_ntoa(&ip_info.ip, ip_str, sizeof(ip_str)); + wifi_status->ip_address.funcs.encode = &encode_string; + wifi_status->ip_address.arg = ip_str; + } + else + { + wifi_status->ip_address.arg = ""; // Empty string + } + send_pb_message(StatusMessage_fields, &message); } diff --git a/page/src/ui.js b/page/src/ui.js index 025cda5..8ba415f 100644 --- a/page/src/ui.js +++ b/page/src/ui.js @@ -82,6 +82,7 @@ export function updateSwitchStatusUI(swStatus) { */ export function updateWifiStatusUI(data) { if (data.connected) { + // Update header status dom.wifiSsidStatus.textContent = data.ssid; dom.wifiStatus.title = `Signal Strength: ${data.rssi} dBm`; let iconClass = 'bi me-2 '; @@ -91,12 +92,21 @@ export function updateWifiStatusUI(data) { dom.wifiIcon.className = iconClass; dom.wifiStatus.classList.replace('text-muted', 'text-success'); dom.wifiStatus.classList.remove('text-danger'); + + // Update settings modal + dom.currentWifiSsid.textContent = data.ssid; + dom.currentWifiIp.textContent = `IP Address: ${data.ipAddress || 'N/A'}`; } else { + // Update header status dom.wifiSsidStatus.textContent = 'Disconnected'; dom.wifiStatus.title = ''; dom.wifiIcon.className = 'bi bi-wifi-off me-2'; dom.wifiStatus.classList.replace('text-success', 'text-muted'); dom.wifiStatus.classList.remove('text-danger'); + + // Update settings modal + dom.currentWifiSsid.textContent = 'Not Connected'; + dom.currentWifiIp.textContent = 'IP Address: -'; } } diff --git a/proto/status.proto b/proto/status.proto index a0ed46f..540662a 100644 --- a/proto/status.proto +++ b/proto/status.proto @@ -21,6 +21,7 @@ message WifiStatus { bool connected = 1; string ssid = 2; int32 rssi = 3; + string ip_address = 4; } // Contains raw UART data