Browse Source

Add UUID filter for BLE scanner

Frontend:
- Add uuid_filter_hex field to BLE scanner config section
- Add translations for UUID filter (en/ru)
- Field accepts 32 hex characters (iBeacon UUID format)
- Optional field - when set, only beacons matching UUID are reported

Backend:
- Add uuid_filter_hex to default config response
- Add upload_endpoint fields to default config for BLE/WiFi

Usage:
Admin enables UUID filter in device settings, device receives
config via polling (≤30 sec) and filters beacons by UUID.

🤖 Generated with [Claude Code](https://claude.com/claude-code)

Co-Authored-By: Claude Sonnet 4.5 <noreply@anthropic.com>
root 1 month ago
parent
commit
cb84953e10

+ 2 - 0
backend/app/api/v1/config.py

@@ -61,6 +61,7 @@ async def get_device_config(
             "enabled": True,
             "batch_interval_ms": 2500,
             "uuid_filter_hex": "",
+            "upload_endpoint": "",
         },
         "wifi": {
             "client_enabled": False,
@@ -68,6 +69,7 @@ async def get_device_config(
             "psk": "suhariki",
             "monitor_enabled": True,
             "batch_interval_ms": 10000,
+            "upload_endpoint": "",
         },
         "ssh_tunnel": {
             "enabled": False,

+ 4 - 0
frontend/src/i18n/index.js

@@ -72,6 +72,8 @@ const messages = {
         wifiScannerEnabled: 'WiFi Scanner enabled',
         bleScannerEnabled: 'BLE Scanner enabled',
         bleBatchInterval: 'Batch Interval',
+        uuidFilter: 'UUID Filter',
+        uuidFilterHint: 'Filter beacons by UUID (32 hex chars, optional)',
         wifiClientEnabled: 'WiFi Client enabled',
         wifiSsid: 'SSID',
         wifiPassword: 'Password',
@@ -183,6 +185,8 @@ const messages = {
         wifiScannerEnabled: 'WiFi сканер включен',
         bleScannerEnabled: 'BLE сканер включен',
         bleBatchInterval: 'Интервал пакетов',
+        uuidFilter: 'UUID фильтр',
+        uuidFilterHint: 'Фильтр маяков по UUID (32 hex символа, необязательно)',
         wifiClientEnabled: 'WiFi клиент включен',
         wifiSsid: 'SSID',
         wifiPassword: 'Пароль',

+ 7 - 0
frontend/src/views/superadmin/DevicesView.vue

@@ -133,6 +133,11 @@
                 <label>{{ $t('devices.config.bleBatchInterval') }} (ms)</label>
                 <input v-model.number="config.ble.batch_interval_ms" type="number" min="100" step="100" />
               </div>
+              <div class="form-group">
+                <label>{{ $t('devices.config.uuidFilter') }}</label>
+                <input v-model="config.ble.uuid_filter_hex" type="text" placeholder="f7826da64fa24e988024bc5b71e0893e" maxlength="32" />
+                <div class="form-hint">{{ $t('devices.config.uuidFilterHint') }}</div>
+              </div>
               <div class="form-group">
                 <label>{{ $t('devices.config.uploadEndpoint') }}</label>
                 <input v-model="config.ble.upload_endpoint" type="text" placeholder="http://custom.example.com:8080/ble" />
@@ -241,6 +246,7 @@ const config = ref({
   ble: {
     enabled: true,
     batch_interval_ms: 2500,
+    uuid_filter_hex: '',
     upload_endpoint: ''
   },
   wifi: {
@@ -351,6 +357,7 @@ function showEditModal(device) {
     ble: {
       enabled: device.config?.ble?.enabled ?? true,
       batch_interval_ms: device.config?.ble?.batch_interval_ms ?? 2500,
+      uuid_filter_hex: device.config?.ble?.uuid_filter_hex ?? '',
       upload_endpoint: device.config?.ble?.upload_endpoint ?? ''
     },
     wifi: {