Aller au contenu

BLE Scanner

Résumé

  • Nom interne : Ble_scanner
  • Catégorie : Bluetooth
  • Objectif : Scanner les appareils BLE à proximité pendant une durée fixe, avec filtrage optionnel par force du signal, nom, ou adresse MAC, et retourner la liste trouvée.
  • Type de tâche : Normale

Compatibilité

  • Version minimale AndroMate : 1.1.0

  • Version maximale AndroMate : 1.1.0

  • Android minimum : Android 13 (API 33)

  • Android maximum testé : Android 16 (API 36)

  • Constructeurs supportés :

    • ✅ Tous les constructeurs
  • Permissions requises :

    • BLUETOOTH_SCAN
    • BLUETOOTH_CONNECT
    • Localisation de l'appareil activée (exigence Android pour les opérations BLE)

Description détaillée

La tâche BLE Scanner recherche les appareils Bluetooth Low Energy à proximité pendant ScanDurationMs millisecondes, en appliquant jusqu'à trois filtres optionnels (force de signal minimale, sous-chaîne du nom, sous-chaîne de l'adresse MAC), et retourne chaque appareil correspondant sous forme de tableau JSON — chaque appareil n'apparaissant qu'une seule fois (dédupliqué par adresse MAC).

Utilisez cette tâche pour découvrir des appareils avant de vous y connecter avec Ble_connect, par exemple lorsque le mac_ble exact n'est pas connu à l'avance.


Paramètres d'entrée

Paramètre Type Obligatoire Valeurs possibles Compatibilité Android Compatibilité AndroMate Défaut
ScanDurationMs Integer Non Durée du scan en millisecondes Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 30000
RssiMin Integer Non Force de signal minimale (dBm, ex. -70) ; 0 = pas de filtre Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 0
name_filter String Non Sous-chaîne (insensible à la casse) que le nom de l'appareil doit contenir ; "" = pas de filtre Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""
mac_ble String Non Sous-chaîne que l'adresse MAC de l'appareil doit contenir ; "" = pas de filtre Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 ""

Paramètres de sortie

Paramètre Type Condition Compatibilité Android Compatibilité AndroMate Défaut
json_array_output String (tableau JSON) Toujours, en cas de succès Android 13 (API 33) → Android 16 (API 36) 1.1.0 → 1.1.0 <ANDROMATE_NULL_VALUE>

json_array_output

Un tableau JSON des appareils correspondants, ex. [{"mac": "AA:BB:CC:DD:EE:FF", "name": "Capteur01", "rssi": -58}, ...]. Tableau vide si rien n'a correspondu.


Exceptions

Code Nom de l'exception Description
BLE-TASK-001 Bluetooth désactivé Le Bluetooth est désactivé sur l'appareil.
BLE-TASK-002 Bluetooth non supporté Cet appareil ne supporte pas le Bluetooth.
ERROR-001 Permission non accordée BLUETOOTH_SCAN ou BLUETOOTH_CONNECT n'a pas été accordée.
GPS-ERROR-003 Localisation désactivée La localisation de l'appareil est désactivée — requise par Android pour le BLE.
BLE-TASK-003 Format MAC invalide Le filtre mac_ble est défini mais n'est pas une (sous-)chaîne MAC valide.

Diagramme d'exécution

flowchart TD
    Start([▶ Ble_scanner]) --> Prereq{BLE activé, supporté,\npermissions, localisation OK ?}
    Prereq -->|Non| E1[❌ BLE-TASK-001/002\nERROR-001/GPS-ERROR-003]
    Prereq -->|Oui| CheckMac{Filtre mac_ble\nformat valide ?}
    CheckMac -->|Non| E2[❌ BLE-TASK-003\nINVALID_MAC]
    CheckMac -->|Oui| Scan[📡 Démarrer le scan BLE]
    Scan --> Filter[🔍 Filtrer chaque résultat :\nRSSI, nom, MAC]
    Filter --> Dedup[🗂 Dédupliquer par MAC]
    Dedup --> WaitDuration{ScanDurationMs\nécoulé ?}
    WaitDuration -->|Non| Filter
    WaitDuration -->|Oui| Build[📋 Construire le tableau JSON]
    Build --> StoreResult[💾 Stocker json_array_output]
    StoreResult --> Success([✅ JsonArrayTaskResult])

    E1 --> Error([❌ Exception])
    E2 --> Error

    style Start fill:#e3f2fd
    style Success fill:#c8e6c9
    style Error fill:#ffcdd2
    style Scan fill:#fff9c4
    style StoreResult fill:#c8e6c9

Comment ça fonctionne :

  1. Vérifications préalables : Bluetooth activé/supporté, permissions, localisation.
  2. Validation du filtre mac_ble : s'il est défini, doit être un format d'adresse MAC valide.
  3. Scan : démarre un scan BLE pendant ScanDurationMs millisecondes.
  4. Filtrer chaque résultat : ignoré si sous RssiMin, ou si le nom de l'appareil ne contient pas name_filter, ou si l'adresse ne contient pas le filtre mac_ble.
  5. Dédupliquer : chaque adresse MAC n'est signalée qu'une seule fois, même si vue plusieurs fois pendant le scan.
  6. Stocker : écrit les appareils correspondants sous forme de tableau JSON dans json_array_output.

Détails des paramètres d'entrée

1. Paramètre d'entrée : ScanDurationMs

Durée du scan, en millisecondes.

Exemple

"ScanDurationMs": 15000

Détails

  • Optionnel — vaut 30000 (30 secondes) par défaut.

2. Paramètre d'entrée : RssiMin

Force de signal minimale (dBm) qu'un appareil doit avoir pour être inclus.

Exemple

"RssiMin": -70

Détails

  • Optionnel — 0 (défaut) signifie aucun filtrage RSSI.
  • Plus négatif = signal plus faible ; ex. -90 est faible/lointain, -40 est fort/très proche.

3. Paramètre d'entrée : name_filter

Sous-chaîne (insensible à la casse) que le nom annoncé de l'appareil doit contenir.

Exemple

"name_filter": "capteur"

Détails

  • Optionnel — chaîne vide (défaut) signifie aucun filtrage par nom.
  • Les appareils sans nom annoncé sont exclus quand ce filtre est défini.

4. Paramètre d'entrée : mac_ble

Sous-chaîne que l'adresse MAC de l'appareil doit contenir — utilisé ici comme filtre, pas comme cible.

Exemple

"mac_ble": "AA:BB"

Détails

  • Optionnel — chaîne vide (défaut) signifie aucun filtrage par MAC.

Exemple JSON complet

{
  "Ble_scanner": [
    {
      "id": "1",
      "title": "Recherche de capteurs à proximité",
      "ScanDurationMs": 15000,
      "RssiMin": -70,
      "name_filter": "capteur",
      "json_array_output": "$DEVICES_TROUVES"
    }
  ]
}