From f4b4b5febda22daa890435edccfda1a62d0277bc Mon Sep 17 00:00:00 2001 From: Smittix Date: Thu, 8 Jan 2026 12:29:25 +0000 Subject: [PATCH] Add Bluetooth device list and tracker panels - Added clickable device list panel sorted by signal strength - Added dedicated tracker detection panel for AirTags/Tiles - Clicking a device selects it for signal tracking and targeting - Devices show name, MAC, RSSI with color-coded signal strength Co-Authored-By: Claude Opus 4.5 --- templates/index.html | 117 ++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 116 insertions(+), 1 deletion(-) diff --git a/templates/index.html b/templates/index.html index 3fcb950..2970619 100644 --- a/templates/index.html +++ b/templates/index.html @@ -1337,13 +1337,25 @@ +
+
🔵 Discovered Devices (0)
+
+
Start scanning to discover devices...
+
+

📈 BT Signal History

- Click a device to track + Select a device from the list
+
+
📍 Tracker Detection
+
+
Monitoring for AirTags, Tiles, and other trackers...
+
+
@@ -5970,6 +5982,109 @@ // Add device card addBtDeviceCard(device, isNew); + + // Update device list panel + updateBtDeviceList(); + + // Check for trackers and update tracker list + if (device.tracker || device.findmy) { + updateBtTrackerList(); + } + } + + // Currently selected BT device for signal tracking + let selectedBtDevice = null; + + // Update the Bluetooth device list panel + function updateBtDeviceList() { + const listEl = document.getElementById('btDeviceList'); + const countEl = document.getElementById('btListCount'); + if (!listEl) return; + + const devices = Object.values(btDevices); + countEl.textContent = devices.length; + + if (devices.length === 0) { + listEl.innerHTML = '
Start scanning to discover devices...
'; + return; + } + + // Sort by RSSI (strongest first) + devices.sort((a, b) => (b.rssi || -100) - (a.rssi || -100)); + + listEl.innerHTML = devices.map(d => { + const typeIcon = { + 'phone': '📱', 'audio': '🎧', 'wearable': '⌚', 'tracker': '📍', + 'computer': '💻', 'input': '⌨️', 'other': '📶' + }[d.device_type || d.type] || '📶'; + + const rssiColor = d.rssi > -50 ? 'var(--accent-green)' : + d.rssi > -70 ? 'var(--accent-cyan)' : + d.rssi > -85 ? 'var(--accent-orange)' : 'var(--accent-red)'; + + const isSelected = selectedBtDevice === d.mac; + const trackerBadge = d.findmy ? `FindMy` : + d.tracker ? `Tracker` : ''; + + return ` +
+
+ ${typeIcon} ${escapeHtml(d.name || 'Unknown')} + ${d.rssi || '--'} dBm +
+
+ ${escapeHtml(d.mac)} + ${trackerBadge} +
+
+ `; + }).join(''); + } + + // Select a BT device for signal tracking + function selectBtDevice(mac) { + selectedBtDevice = mac; + const device = btDevices[mac]; + if (device) { + document.getElementById('btSignalGraphDevice').textContent = device.name || mac; + document.getElementById('btTargetMac').value = mac; + } + updateBtDeviceList(); // Refresh to show selection + } + + // Update tracker list panel + function updateBtTrackerList() { + const listEl = document.getElementById('btTrackerList'); + if (!listEl) return; + + const trackers = Object.values(btDevices).filter(d => d.tracker || d.findmy); + + if (trackers.length === 0) { + listEl.innerHTML = '
Monitoring for AirTags, Tiles, and other trackers...
'; + return; + } + + listEl.innerHTML = trackers.map(d => { + const icon = d.findmy ? '🍎' : '📍'; + const type = d.findmy ? d.findmy.type : (d.tracker ? d.tracker.name : 'Unknown'); + const color = d.findmy ? '#007aff' : 'var(--accent-red)'; + + return ` +
+
+ ${icon} ${escapeHtml(type)} + ${d.rssi || '--'} dBm +
+
${escapeHtml(d.mac)}
+
+ `; + }).join(''); } // Add Bluetooth device card to output