ui: add BMS scan button

This commit is contained in:
2026-07-01 00:05:16 -06:00
parent a1a19270d7
commit 3a05cb8894
@@ -639,12 +639,15 @@ button[onclick^="scan"]{
<input id="bmsAddressTypeInput" placeholder="Address type: public or random"> <input id="bmsAddressTypeInput" placeholder="Address type: public or random">
<div class="btnrow"> <div class="btnrow">
<button class="save" onclick="saveBmsFullConfig()">Save BMS</button> <button class="save" onclick="saveBmsFullConfig()">Save BMS</button>
<button onclick="scanBmsDevices()">Scan BMS</button>
<button class="off" onclick="setBmsEnabled(false)">Disable BMS</button> <button class="off" onclick="setBmsEnabled(false)">Disable BMS</button>
</div> </div>
<div class="btnrow"> <div class="btnrow">
<button onclick="setBmsEnabled(true)">Enable BMS</button> <button onclick="setBmsEnabled(true)">Enable BMS</button>
</div> </div>
<div class="row"><span class="muted">BMS Polling</span><span class="v" id="bmsEnabledText">--</span></div> <div class="row"><span class="muted">BMS Polling</span><span class="v" id="bmsEnabledText">--</span></div>
<div id="bmsScanStatus" class="muted"></div>
<div id="bmsScanResults"></div>
</div> </div>
</section> </section>
</div> </div>
@@ -1070,6 +1073,46 @@ async function saveDeviceConfig(){
clearConfigTouched(["deviceNameInput"]); 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=>`
<div class="configrow">
<div>
<div><b>${d.name||"Unnamed BLE device"}</b></div>
<div class="muted">${d.address||""} RSSI ${d.rssi??"--"}</div>
</div>
<button onclick="selectScannedBms('${d.address||""}','${(d.name||"BMS").replace(/'/g,"\\'")}')">Select</button>
</div>
`).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(){ async function saveBmsFullConfig(){
const name=$("bmsNameInput")?.value.trim()||"BMS"; const name=$("bmsNameInput")?.value.trim()||"BMS";
const address=$("bmsAddressInput")?.value.trim()||""; const address=$("bmsAddressInput")?.value.trim()||"";