diff --git a/backend/lib/core/capabilities/WifiConfigurationCapability.js b/backend/lib/core/capabilities/WifiConfigurationCapability.js index e2259bc0ffe..7ecb89fe527 100644 --- a/backend/lib/core/capabilities/WifiConfigurationCapability.js +++ b/backend/lib/core/capabilities/WifiConfigurationCapability.js @@ -8,9 +8,9 @@ const NotImplementedError = require("../NotImplementedError"); class WifiConfigurationCapability extends Capability { /** * @abstract - * @returns {Promise} + * @returns {Promise} */ - async getWifiConfiguration() { + async getWifiStatus() { throw new NotImplementedError(); } diff --git a/backend/lib/entities/core/ValetudoWifiConfiguration.js b/backend/lib/entities/core/ValetudoWifiConfiguration.js index aecf2ebecd1..84445894829 100644 --- a/backend/lib/entities/core/ValetudoWifiConfiguration.js +++ b/backend/lib/entities/core/ValetudoWifiConfiguration.js @@ -1,21 +1,13 @@ const SerializableEntity = require("../SerializableEntity"); -// noinspection JSCheckFunctionSignatures class ValetudoWifiConfiguration extends SerializableEntity { /** * @param {object} options - * @param {string} [options.ssid] - * @param {object} [options.credentials] + * @param {string} options.ssid + * @param {object} options.credentials * @param {ValetudoWifiConfigurationCredentialsType} options.credentials.type * @param {object} options.credentials.typeSpecificSettings //e.g. key or user/password - * @param {object} [options.details] - * @param {ValetudoWifiConfigurationState} [options.details.state] - * @param {number} [options.details.downspeed] unit: mbps - * @param {number} [options.details.upspeed] unit: mbps - * @param {number} [options.details.signal] unit: dBm - * @param {Array} [options.details.ips] all the ips that we can find - * @param {ValetudoWifiConfigurationFrequencyType} [options.details.frequency] * @param {object} [options.metaData] * * @class @@ -25,7 +17,6 @@ class ValetudoWifiConfiguration extends SerializableEntity { this.ssid = options.ssid; this.credentials = options.credentials; - this.details = options.details; } } @@ -38,26 +29,4 @@ ValetudoWifiConfiguration.CREDENTIALS_TYPE = Object.freeze({ WPA2_PSK: "wpa2_psk" }); -/** - * @typedef {string} ValetudoWifiConfigurationFrequencyType - * @enum {string} - * - */ -ValetudoWifiConfiguration.FREQUENCY_TYPE = Object.freeze({ - W2_4Ghz: "2.4ghz", //cannot start with a number. therefore prefixed with w - W5Ghz: "5ghz" -}); - -/** - * @typedef {string} ValetudoWifiConfigurationState - * @enum {string} - * - */ -ValetudoWifiConfiguration.STATE = Object.freeze({ - CONNECTED: "connected", - NOT_CONNECTED: "not_connected", - UNKNOWN: "unknown" -}); - - module.exports = ValetudoWifiConfiguration; diff --git a/backend/lib/entities/core/ValetudoWifiStatus.js b/backend/lib/entities/core/ValetudoWifiStatus.js new file mode 100644 index 00000000000..a244c450a7b --- /dev/null +++ b/backend/lib/entities/core/ValetudoWifiStatus.js @@ -0,0 +1,49 @@ +const SerializableEntity = require("../SerializableEntity"); + + +class ValetudoWifiStatus extends SerializableEntity { + /** + * @param {object} options + * @param {ValetudoWifiState} options.state + * @param {object} options.details + * @param {string} [options.details.ssid] + * @param {number} [options.details.downspeed] unit: mbps + * @param {number} [options.details.upspeed] unit: mbps + * @param {number} [options.details.signal] unit: dBm + * @param {Array} [options.details.ips] all the ips that we can find + * @param {ValetudoWifiStatusFrequencyType} [options.details.frequency] + * @param {object} [options.metaData] + * + * @class + */ + constructor(options) { + super(options); + + this.state = options.state; + this.details = options.details; + } +} + +/** + * @typedef {string} ValetudoWifiStatusFrequencyType + * @enum {string} + * + */ +ValetudoWifiStatus.FREQUENCY_TYPE = Object.freeze({ + W2_4Ghz: "2.4ghz", //cannot start with a number. therefore prefixed with w + W5Ghz: "5ghz" +}); + +/** + * @typedef {string} ValetudoWifiState + * @enum {string} + * + */ +ValetudoWifiStatus.STATE = Object.freeze({ + CONNECTED: "connected", + NOT_CONNECTED: "not_connected", + UNKNOWN: "unknown" +}); + + +module.exports = ValetudoWifiStatus; diff --git a/backend/lib/entities/core/doc/ValetudoWifiConfiguration.openapi.json b/backend/lib/entities/core/doc/ValetudoWifiConfiguration.openapi.json index 25d0dc4999d..b9614da90e8 100644 --- a/backend/lib/entities/core/doc/ValetudoWifiConfiguration.openapi.json +++ b/backend/lib/entities/core/doc/ValetudoWifiConfiguration.openapi.json @@ -20,42 +20,6 @@ } } }, - "details": { - "type": "object", - "properties": { - "state": { - "type": "string", - "enum": [ - "connected", - "not_connected", - "unknown" - ] - }, - "downspeed": { - "type": "number" - }, - "upspeed": { - "type": "number" - }, - "signal": { - "type": "number" - }, - "ips": { - "type": "array", - "description": "IP addresses", - "items": { - "type": "string" - } - }, - "frequency": { - "type": "string", - "enum": [ - "2.4ghz", - "5ghz" - ] - } - } - }, "metaData": { "type": "object" } diff --git a/backend/lib/entities/core/doc/ValetudoWifiStatus.openapi.json b/backend/lib/entities/core/doc/ValetudoWifiStatus.openapi.json new file mode 100644 index 00000000000..765e618cd78 --- /dev/null +++ b/backend/lib/entities/core/doc/ValetudoWifiStatus.openapi.json @@ -0,0 +1,54 @@ +{ + "components": { + "schemas": { + "ValetudoWifiStatus": { + "type": "object", + "properties": { + "state": { + "type": "string", + "enum": [ + "connected", + "not_connected", + "unknown" + ] + }, + "details": { + "type": "object", + "properties": { + "ssid": { + "type": "string", + "description": "Wireless network name" + }, + "downspeed": { + "type": "number" + }, + "upspeed": { + "type": "number" + }, + "signal": { + "type": "number" + }, + "ips": { + "type": "array", + "description": "IP addresses", + "items": { + "type": "string" + } + }, + "frequency": { + "type": "string", + "enum": [ + "2.4ghz", + "5ghz" + ] + } + } + }, + "metaData": { + "type": "object" + } + } + } + } + } +} diff --git a/backend/lib/mqtt/capabilities/WifiConfigurationCapabilityMqttHandle.js b/backend/lib/mqtt/capabilities/WifiConfigurationCapabilityMqttHandle.js index f5b92c55a4f..44201821fa7 100644 --- a/backend/lib/mqtt/capabilities/WifiConfigurationCapabilityMqttHandle.js +++ b/backend/lib/mqtt/capabilities/WifiConfigurationCapabilityMqttHandle.js @@ -124,11 +124,11 @@ class WifiConfigurationCapabilityMqttHandle extends CapabilityMqttHandle { } async refresh() { - const wifiCfg = await this.capability.getWifiConfiguration(); - await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_SSID).post(wifiCfg.ssid ?? ""); - await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_IPS).post(wifiCfg.details?.ips ?? []); - await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_FREQUENCY).post(wifiCfg.details?.frequency ?? ""); - await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_SIGNAL).post(wifiCfg.details?.signal ?? 0); + const wifiCfg = await this.capability.getWifiStatus(); + await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_SSID).post(wifiCfg.details.ssid ?? ""); + await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_IPS).post(wifiCfg.details.ips ?? []); + await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_FREQUENCY).post(wifiCfg.details.frequency ?? ""); + await HassAnchor.getAnchor(HassAnchor.ANCHOR.WIFI_SIGNAL).post(wifiCfg.details.signal ?? 0); await super.refresh(); } diff --git a/backend/lib/robots/common/linuxCapabilities/LinuxWifiConfigurationCapability.js b/backend/lib/robots/common/linuxCapabilities/LinuxWifiConfigurationCapability.js index 38b88ec38a4..c31b63a2bb1 100644 --- a/backend/lib/robots/common/linuxCapabilities/LinuxWifiConfigurationCapability.js +++ b/backend/lib/robots/common/linuxCapabilities/LinuxWifiConfigurationCapability.js @@ -1,7 +1,7 @@ const NotImplementedError = require("../../../core/NotImplementedError"); const os = require("os"); const spawnSync = require("child_process").spawnSync; -const ValetudoWifiConfiguration = require("../../../entities/core/ValetudoWifiConfiguration"); +const ValetudoWifiStatus = require("../../../entities/core/ValetudoWifiStatus"); const WifiConfigurationCapability = require("../../../core/capabilities/WifiConfigurationCapability"); /** @@ -10,7 +10,7 @@ const WifiConfigurationCapability = require("../../../core/capabilities/WifiConf */ class LinuxWifiConfigurationCapability extends WifiConfigurationCapability { /** - * Implementations should provide or discover their own wireless interface which will be used in + * Implementations should provide or discover their own wireless interface, which will be used in * getWifiConfiguration(). * * @abstract @@ -21,17 +21,16 @@ class LinuxWifiConfigurationCapability extends WifiConfigurationCapability { } /** - * @returns {Promise} + * @returns {Promise} */ - async getWifiConfiguration() { + async getWifiStatus() { if (this.robot.config.get("embedded") !== true) { throw new NotImplementedError("Linux Wi-Fi configuration capability only works on the robot itself"); } const output = { - details: { - state: ValetudoWifiConfiguration.STATE.UNKNOWN - } + state: ValetudoWifiStatus.STATE.UNKNOWN, + details: {} }; /* @@ -50,10 +49,10 @@ class LinuxWifiConfigurationCapability extends WifiConfigurationCapability { const extractedWifiData = iwOutput.toString().match(WIFI_CONNECTED_IW_REGEX); if (extractedWifiData) { - output.details.state = ValetudoWifiConfiguration.STATE.CONNECTED; + output.state = ValetudoWifiStatus.STATE.CONNECTED; output.details.upspeed = parseFloat(extractedWifiData.groups.txbitrate); output.details.signal = parseInt(extractedWifiData.groups.signal); - output.ssid = extractedWifiData.groups.ssid.trim(); + output.details.ssid = extractedWifiData.groups.ssid.trim(); output.details.ips = Object.values(os.networkInterfaces()).map(i => { return i.map(l => { return l.address; @@ -61,14 +60,14 @@ class LinuxWifiConfigurationCapability extends WifiConfigurationCapability { }).flat().sort().filter(ip => { return ip !== "127.0.0.1" && ip !== "::1"; }); //lol this line - output.details.frequency = ValetudoWifiConfiguration.FREQUENCY_TYPE.W2_4Ghz; + output.details.frequency = ValetudoWifiStatus.FREQUENCY_TYPE.W2_4Ghz; } else if (iwOutput.toString().trim().match(WIFI_NOT_CONNECTED_IW_REGEX)) { - output.details.state = ValetudoWifiConfiguration.STATE.NOT_CONNECTED; + output.state = ValetudoWifiStatus.STATE.NOT_CONNECTED; } } - return new ValetudoWifiConfiguration(output); + return new ValetudoWifiStatus(output); } /** diff --git a/backend/lib/robots/common/miioCapabilities/MiioWifiConfigurationCapability.js b/backend/lib/robots/common/miioCapabilities/MiioWifiConfigurationCapability.js index 2f472c84de2..8cf0419f40e 100644 --- a/backend/lib/robots/common/miioCapabilities/MiioWifiConfigurationCapability.js +++ b/backend/lib/robots/common/miioCapabilities/MiioWifiConfigurationCapability.js @@ -1,39 +1,39 @@ const LinuxWifiConfigurationCapability = require("../linuxCapabilities/LinuxWifiConfigurationCapability"); const ValetudoWifiConfiguration = require("../../../entities/core/ValetudoWifiConfiguration"); +const ValetudoWifiStatus = require("../../../entities/core/ValetudoWifiStatus"); /** * @extends LinuxWifiConfigurationCapability */ class MiioWifiConfigurationCapability extends LinuxWifiConfigurationCapability { /** - * @returns {Promise} + * @returns {Promise} */ - async getWifiConfiguration() { + async getWifiStatus() { if (this.robot.config.get("embedded") === true) { - return super.getWifiConfiguration(); + return super.getWifiStatus(); } const output = { - details: { - state: ValetudoWifiConfiguration.STATE.UNKNOWN - } + state: ValetudoWifiStatus.STATE.UNKNOWN, + details: {} }; let res = await this.robot.sendCommand("miIO.info"); if (typeof res === "object") { if (res.ap.bssid !== "") { - output.details.state = ValetudoWifiConfiguration.STATE.CONNECTED; + output.state = ValetudoWifiStatus.STATE.CONNECTED; output.details.ips = [res.netif.localIp]; - output.ssid = res.ap.ssid; - output.details.frequency = ValetudoWifiConfiguration.FREQUENCY_TYPE.W2_4Ghz; + output.details.ssid = res.ap.ssid; + output.details.frequency = ValetudoWifiStatus.FREQUENCY_TYPE.W2_4Ghz; output.details.signal = res.ap.rssi; } else { - output.details.state = ValetudoWifiConfiguration.STATE.NOT_CONNECTED; + output.state = ValetudoWifiStatus.STATE.NOT_CONNECTED; } } - return new ValetudoWifiConfiguration(output); + return new ValetudoWifiStatus(output); } /** diff --git a/backend/lib/robots/mock/capabilities/MockWifiConfigurationCapability.js b/backend/lib/robots/mock/capabilities/MockWifiConfigurationCapability.js index d65b722ea32..c7ececc7e30 100644 --- a/backend/lib/robots/mock/capabilities/MockWifiConfigurationCapability.js +++ b/backend/lib/robots/mock/capabilities/MockWifiConfigurationCapability.js @@ -1,5 +1,5 @@ const LinuxWifiConfigurationCapability = require("../../common/linuxCapabilities/LinuxWifiConfigurationCapability"); -const ValetudoWifiConfiguration = require("../../../entities/core/ValetudoWifiConfiguration"); +const ValetudoWifiStatus = require("../../../entities/core/ValetudoWifiStatus"); /** * @extends LinuxWifiConfigurationCapability @@ -20,19 +20,16 @@ class MockWifiConfigurationCapability extends LinuxWifiConfigurationCapability { } /** - * @returns {Promise} + * @returns {Promise} */ - async getWifiConfiguration() { + async getWifiStatus() { if (this.robot.config.get("embedded") === true) { - return super.getWifiConfiguration(); + return super.getWifiStatus(); } const output = { - details: { - state: this.connected ? - ValetudoWifiConfiguration.STATE.CONNECTED : - ValetudoWifiConfiguration.STATE.NOT_CONNECTED, - }, + state: this.connected ? ValetudoWifiStatus.STATE.CONNECTED : ValetudoWifiStatus.STATE.NOT_CONNECTED, + details: {} }; if (this.connected) { @@ -41,12 +38,12 @@ class MockWifiConfigurationCapability extends LinuxWifiConfigurationCapability { upspeed: 72.2, downspeed: 54, ips: ["192.168.100.100"], - frequency: ValetudoWifiConfiguration.FREQUENCY_TYPE.W2_4Ghz, + frequency: ValetudoWifiStatus.FREQUENCY_TYPE.W2_4Ghz, + ssid: this.ssid }); - output.ssid = this.ssid; } - return new ValetudoWifiConfiguration(output); + return new ValetudoWifiStatus(output); } /** diff --git a/backend/lib/robots/roborock/capabilities/RoborockWifiConfigurationCapability.js b/backend/lib/robots/roborock/capabilities/RoborockWifiConfigurationCapability.js index 3a4ef2a7347..9b61241ffcc 100644 --- a/backend/lib/robots/roborock/capabilities/RoborockWifiConfigurationCapability.js +++ b/backend/lib/robots/roborock/capabilities/RoborockWifiConfigurationCapability.js @@ -1,38 +1,37 @@ const MiioWifiConfigurationCapability = require("../../common/miioCapabilities/MiioWifiConfigurationCapability"); -const ValetudoWifiConfiguration = require("../../../entities/core/ValetudoWifiConfiguration"); +const ValetudoWifiStatus = require("../../../entities/core/ValetudoWifiStatus"); class RoborockWifiConfigurationCapability extends MiioWifiConfigurationCapability { /** - * @returns {Promise} + * @returns {Promise} */ - async getWifiConfiguration() { + async getWifiStatus() { if (this.robot.config.get("embedded") === true) { - return super.getWifiConfiguration(); + return super.getWifiStatus(); } const output = { - details: { - state: ValetudoWifiConfiguration.STATE.UNKNOWN - } + state: ValetudoWifiStatus.STATE.UNKNOWN, + details: {} }; let res = await this.robot.sendCommand("get_network_info"); if (res !== "unknown_method") { if (typeof res === "object" && res.bssid !== "") { - output.details.state = ValetudoWifiConfiguration.STATE.CONNECTED; + output.state = ValetudoWifiStatus.STATE.CONNECTED; output.details.signal = parseInt(res.rssi); output.details.ips = [res.ip]; - output.ssid = res.ssid; - output.details.frequency = ValetudoWifiConfiguration.FREQUENCY_TYPE.W2_4Ghz; + output.details.ssid = res.ssid; + output.details.frequency = ValetudoWifiStatus.FREQUENCY_TYPE.W2_4Ghz; } else { - output.details.state = ValetudoWifiConfiguration.STATE.NOT_CONNECTED; + output.details.state = ValetudoWifiStatus.STATE.NOT_CONNECTED; } } - return new ValetudoWifiConfiguration(output); + return new ValetudoWifiStatus(output); } } diff --git a/backend/lib/webserver/capabilityRouters/WifiConfigurationCapabilityRouter.js b/backend/lib/webserver/capabilityRouters/WifiConfigurationCapabilityRouter.js index 5674070d223..dd903047dd2 100644 --- a/backend/lib/webserver/capabilityRouters/WifiConfigurationCapabilityRouter.js +++ b/backend/lib/webserver/capabilityRouters/WifiConfigurationCapabilityRouter.js @@ -7,7 +7,7 @@ class WifiConfigurationCapabilityRouter extends CapabilityRouter { initRoutes() { this.router.get("/", async (req, res) => { - res.json(await this.capability.getWifiConfiguration()); + res.json(await this.capability.getWifiStatus()); }); this.router.put("/", this.validator, async (req, res) => { diff --git a/backend/lib/webserver/capabilityRouters/doc/WifiConfigurationCapabilityRouter.openapi.json b/backend/lib/webserver/capabilityRouters/doc/WifiConfigurationCapabilityRouter.openapi.json index 33114b88e1f..ddaed3b3019 100644 --- a/backend/lib/webserver/capabilityRouters/doc/WifiConfigurationCapabilityRouter.openapi.json +++ b/backend/lib/webserver/capabilityRouters/doc/WifiConfigurationCapabilityRouter.openapi.json @@ -4,14 +4,14 @@ "tags": [ "WifiConfigurationCapability" ], - "summary": "Get current wireless radio configuration", + "summary": "Get current wireless radio status", "responses": { "200": { "description": "Ok", "content": { "application/json": { "schema": { - "$ref": "#/components/schemas/ValetudoWifiConfiguration" + "$ref": "#/components/schemas/ValetudoWifiStatus" } } } diff --git a/frontend/src/RouterChoice.tsx b/frontend/src/RouterChoice.tsx index 4c7f6a4af64..9f6c0105f89 100644 --- a/frontend/src/RouterChoice.tsx +++ b/frontend/src/RouterChoice.tsx @@ -1,6 +1,6 @@ import React from "react"; import {PaletteMode} from "@mui/material"; -import {Capability, useValetudoInformationQuery, useWifiConfigurationQuery} from "./api"; +import {Capability, useValetudoInformationQuery, useWifiStatusQuery} from "./api"; import {useCapabilitiesSupported} from "./CapabilitiesProvider"; import AppRouter from "./AppRouter"; import ProvisioningPage from "./ProvisioningPage"; @@ -19,16 +19,16 @@ const RouterChoiceStageTwo: React.FunctionComponent<{ const { data: wifiConfiguration, isFetching: wifiConfigurationFetching, - } = useWifiConfigurationQuery(); + } = useWifiStatusQuery(); if (wifiConfigurationFetching) { return ; } if (wifiConfiguration) { - if (wifiConfiguration.details?.state === "not_connected") { + if (wifiConfiguration.state === "not_connected") { return ; - } else if (wifiConfiguration.details?.state === "connected") { + } else if (wifiConfiguration.state === "connected") { //This skips rendering any of this next time the wifiConfiguration is refreshed setBypassProvisioning(true); } diff --git a/frontend/src/api/client.ts b/frontend/src/api/client.ts index 45a2427d1be..fb230ac4308 100644 --- a/frontend/src/api/client.ts +++ b/frontend/src/api/client.ts @@ -45,6 +45,7 @@ import { VoicePackManagementCommand, VoicePackManagementStatus, WifiConfiguration, + WifiStatus, Zone, ZonePreset, ZoneProperties, @@ -737,9 +738,9 @@ export const sendDoNotDisturbConfiguration = async (configuration: DoNotDisturbC }); }; -export const fetchWifiConfiguration = async (): Promise => { +export const fetchWifiStatus = async (): Promise => { return valetudoAPI - .get(`/robot/capabilities/${Capability.WifiConfiguration}`) + .get(`/robot/capabilities/${Capability.WifiConfiguration}`) .then(({ data }) => { return data; }); diff --git a/frontend/src/api/hooks.ts b/frontend/src/api/hooks.ts index 40198c757aa..a5850efee68 100644 --- a/frontend/src/api/hooks.ts +++ b/frontend/src/api/hooks.ts @@ -48,7 +48,7 @@ import { fetchValetudoLog, fetchValetudoLogLevel, fetchVoicePackManagementState, - fetchWifiConfiguration, + fetchWifiStatus, fetchZonePresets, fetchZoneProperties, sendAutoEmptyDockAutoEmptyControlEnable, @@ -118,7 +118,6 @@ import { Timer, ValetudoEventInteractionContext, VoicePackManagementCommand, - WifiConfiguration, Zone, } from "./types"; import {MutationFunction} from "react-query/types/core/types"; @@ -156,7 +155,7 @@ enum CacheKey { KeyLockInformation = "key_lock", AutoEmptyDockAutoEmpty = "auto_empty_dock_auto_empty", DoNotDisturb = "do_not_disturb", - Wifi = "wifi", + WifiStatus = "wifi_status", ManualControl = "manual_control", ManualControlProperties = "manual_control_properties", CombinedVirtualRestrictionsProperties = "combined_virtual_restrictions_properties", @@ -926,18 +925,24 @@ export const useDoNotDisturbConfigurationMutation = () => { ); }; -export const useWifiConfigurationQuery = () => { - return useQuery(CacheKey.Wifi, fetchWifiConfiguration, { +export const useWifiStatusQuery = () => { + return useQuery(CacheKey.WifiStatus, fetchWifiStatus, { staleTime: Infinity }); }; export const useWifiConfigurationMutation = () => { - return useValetudoFetchingMutation( - useOnCommandError(Capability.WifiConfiguration), - CacheKey.Wifi, - (configuration: WifiConfiguration) => { - return sendWifiConfiguration(configuration).then(fetchWifiConfiguration); + const { + refetch: refetchWifiStatus, + } = useWifiStatusQuery(); + + return useMutation( + sendWifiConfiguration, + { + onError: useOnCommandError(Capability.WifiConfiguration), + onSuccess() { + refetchWifiStatus().catch(() => {/*intentional*/}); + } } ); }; diff --git a/frontend/src/api/types.ts b/frontend/src/api/types.ts index 06f1dee50bc..d7c41d2662f 100644 --- a/frontend/src/api/types.ts +++ b/frontend/src/api/types.ts @@ -335,20 +335,25 @@ export interface DoNotDisturbConfiguration { } export interface WifiConfiguration { - ssid?: string; - credentials?: { + ssid: string; + credentials: { type: "wpa2_psk"; typeSpecificSettings: { password: string; }; } - details?: { - state: "connected" | "not_connected" | "unknown"; + +} + +export interface WifiStatus { + state: "connected" | "not_connected" | "unknown"; + details: { + ssid?: string; downspeed?: number; upspeed?: number; signal?: number; - ips: string[]; - frequency: "2.4ghz" | "5ghz"; + ips?: string[]; + frequency?: "2.4ghz" | "5ghz"; }; } diff --git a/frontend/src/robot/capabilities/Wifi.tsx b/frontend/src/robot/capabilities/Wifi.tsx index c19c44b8e39..85a1e879559 100644 --- a/frontend/src/robot/capabilities/Wifi.tsx +++ b/frontend/src/robot/capabilities/Wifi.tsx @@ -21,7 +21,7 @@ import { TextField, Typography } from "@mui/material"; -import {Capability, useWifiConfigurationMutation, useWifiConfigurationQuery} from "../../api"; +import {Capability, useWifiConfigurationMutation, useWifiStatusQuery} from "../../api"; import {useCapabilitiesSupported} from "../../CapabilitiesProvider"; import {LoadingButton} from "@mui/lab"; import {CapabilityItem} from "./CapabilityLayout"; @@ -62,7 +62,7 @@ const WifiConfigurationControl: FunctionComponent = () => { isFetching: wifiConfigurationFetching, isError: wifiConfigurationError, refetch: wifiConfigurationRefetch, - } = useWifiConfigurationQuery(); + } = useWifiStatusQuery(); const { mutate: updateWifiConfiguration, @@ -84,8 +84,8 @@ const WifiConfigurationControl: FunctionComponent = () => { ); } - const ssid = wifiConfiguration?.ssid || "No SSID"; - const state = wifiConfiguration?.details?.state || "Unknown state"; + const ssid = wifiConfiguration?.details?.ssid || "No SSID"; + const state = wifiConfiguration?.state || "Unknown state"; const stateStr = state === "not_connected" ? "not connected" : state; const upspeed = wifiConfiguration?.details?.upspeed; const downspeed = wifiConfiguration?.details?.downspeed;