diff --git a/firmware/esp32/overland-controller/overland-controller.ino b/firmware/esp32/overland-controller/overland-controller.ino index 60147d3..fa968d3 100644 --- a/firmware/esp32/overland-controller/overland-controller.ino +++ b/firmware/esp32/overland-controller/overland-controller.ino @@ -639,12 +639,15 @@ button[onclick^="scan"]{
+
BMS Polling--
+
+
@@ -1070,6 +1073,46 @@ async function saveDeviceConfig(){ clearConfigTouched(["deviceNameInput"]); } + +async function scanBmsDevices(){ + const status=$("bmsScanStatus"); + const box=$("bmsScanResults"); + if(status) status.textContent="Scanning for BLE BMS devices..."; + if(box) box.innerHTML=""; + + try{ + const res=await fetch(api("/bms/scan"),{method:"POST"}); + const data=await res.json(); + const devices=data.devices||[]; + + if(status) status.textContent=devices.length ? `Found ${devices.length} device(s).` : "No BLE devices found."; + + if(box){ + box.innerHTML=devices.map(d=>` +
+
+
${d.name||"Unnamed BLE device"}
+
${d.address||""} RSSI ${d.rssi??"--"}
+
+ +
+ `).join(""); + } + }catch(e){ + if(status) status.textContent="BMS scan failed."; + } +} + +function selectScannedBms(address,name){ + setConfigValue("bmsNameInput",name||"BMS",true); + setConfigValue("bmsAddressInput",address||"",true); + setConfigValue("bmsAddressTypeInput","public",true); + markConfigFieldTouched("bmsNameInput"); + markConfigFieldTouched("bmsAddressInput"); + markConfigFieldTouched("bmsAddressTypeInput"); +} + + async function saveBmsFullConfig(){ const name=$("bmsNameInput")?.value.trim()||"BMS"; const address=$("bmsAddressInput")?.value.trim()||"";