BLE Read Characteristic
Résumé
- Nom interne :
Ble_readChar - Catégorie : Bluetooth
- Objectif : Lire la valeur d'une caractéristique GATT depuis un appareil BLE déjà connecté et la décoder dans une variable de workflow.
- 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_SCANBLUETOOTH_CONNECT- Localisation de l'appareil activée (exigence Android pour les opérations BLE)
Description détaillée
La tâche BLE Read Characteristic lit la valeur d'une caractéristique GATT (identifiée par son UUID de service + UUID de caractéristique) depuis un appareil BLE qui doit déjà être connecté via Ble_connect. Les octets bruts sont décodés selon le type decoder choisi et stockés sous forme de chaîne dans value_output.
Avant la lecture, la tâche découvre les services GATT de l'appareil et localise le service/caractéristique demandé — les deux doivent exister sur l'appareil, sinon la tâche échoue.
Paramètres d'entrée
| Paramètre | Type | Obligatoire | Valeurs possibles | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|---|
mac_ble |
String | Oui | Une adresse MAC Bluetooth valide, doit déjà être connectée | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | "" |
service_uid |
String | Oui | Un UUID de service GATT valide | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | "" |
char_uid |
String | Oui | Un UUID de caractéristique GATT valide | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | "" |
decoder |
Integer | Non | Voir le tableau Types de décodeur ci-dessous | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | -1 (UNKNOWN → repli sur HEX) |
read_timeout |
Integer | Non | Millisecondes à attendre la réponse de lecture | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | 5000 |
Types de décodeur
| Code | Décodeur | Remarques |
|---|---|---|
1 |
AUTO |
UTF-8 si tous les octets sont imprimables, sinon repli sur hex espacé |
2 |
UTF8 |
Décoder les octets en texte UTF-8 |
3 |
ASCII |
Décoder les octets en texte ASCII |
10 |
INT8 |
Entier signé 8 bits |
11 |
UINT8 |
Entier non signé 8 bits |
12 |
INT16 |
Entier signé 16 bits, little-endian |
13 |
UINT16 |
Entier non signé 16 bits, little-endian |
14 |
INT32 |
Entier signé 32 bits, little-endian |
15 |
UINT32 |
Entier non signé 32 bits, little-endian |
20 |
FLOAT32 |
Flottant IEEE-754 32 bits, little-endian |
21 |
FLOAT64 |
Flottant IEEE-754 64 bits, little-endian |
30 |
BOOL |
Premier octet : 0 = false, non-zéro = true |
31 |
BITMASK |
Premier octet comme entier non signé (bitmask) |
40 |
HEX |
Hex espacé en majuscules, ex. "AF 01 3C" |
41 |
HEX_COMPACT |
Hex sans espace en majuscules, ex. "AF013C" |
42 |
BASE64 |
Chaîne encodée en Base64 |
43 |
BYTES |
toString() de tableau d'octets Java, ex. "[12, -1, 3]" |
Tout code non listé ci-dessus (ou omis) résout en UNKNOWN, que cette tâche traite comme HEX.
Paramètres de sortie
| Paramètre | Type | Condition | Compatibilité Android | Compatibilité AndroMate | Défaut |
|---|---|---|---|---|---|
value_output |
String | Toujours, en cas de succès | Android 13 (API 33) → Android 16 (API 36) | 1.1.0 → 1.1.0 | <ANDROMATE_NULL_VALUE> |
value_output
La valeur de la caractéristique, décodée selon le paramètre decoder (voir tableau ci-dessus).
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 | mac_ble n'est pas une adresse MAC Bluetooth valide. |
BLE-TASK-005 |
MAC BLE déconnectée | L'appareil n'est pas actuellement connecté. |
BLE-TASK-006 |
MAC BLE non enregistrée | L'appareil n'a jamais été connecté via Ble_connect dans cette session. |
BLE-TASK-011 |
Aucune connexion GATT active | Aucune connexion GATT active disponible pour cet appareil. |
BLE-TASK-007 |
UUID invalide | service_uid ou char_uid n'est pas un format UUID valide. |
BLE-TASK-008 |
Service introuvable | Aucun service GATT correspondant à service_uid sur cet appareil. |
BLE-TASK-009 |
Caractéristique introuvable | Aucune caractéristique correspondant à char_uid dans le service donné. |
BLE-TASK-010 |
Lecture impossible | Le serveur GATT a retourné un statut d'échec pour la lecture. |
BLE-TASK-012 |
Timeout lecture/écriture | Aucune réponse dans le délai read_timeout (pendant la découverte de services ou la lecture elle-même). |
Diagramme d'exécution
flowchart TD
Start([▶ Ble_readChar]) --> Prereq{BLE activé, connecté,\nenregistré, permissions OK ?}
Prereq -->|Non| E1[❌ BLE-TASK-001/002/005/006/011\nERROR-001/GPS-ERROR-003]
Prereq -->|Oui| CheckUuid{service_uid, char_uid\nUUID valides ?}
CheckUuid -->|Non| E2[❌ BLE-TASK-007\nINVALID_UUID]
CheckUuid -->|Oui| Discover[🔍 discoverServices]
Discover --> WaitDisc{Découvert dans\nread_timeout ?}
WaitDisc -->|Non| E3[❌ BLE-TASK-012\nTIMEOUT]
WaitDisc -->|Oui| FindService{Service\ntrouvé ?}
FindService -->|Non| E4[❌ BLE-TASK-008\nSERVICE_NOT_FOUND]
FindService -->|Oui| FindChar{Caractéristique\ntrouvée ?}
FindChar -->|Non| E5[❌ BLE-TASK-009\nCHAR_NOT_FOUND]
FindChar -->|Oui| Read[📖 readCharacteristic]
Read --> WaitRead{Réponse dans\nread_timeout ?}
WaitRead -->|Non| E3
WaitRead -->|GATT_SUCCESS| Decode[🔄 Décoder les octets selon decoder]
WaitRead -->|Statut d'erreur| E6[❌ BLE-TASK-010\nCANNOT_READ]
Decode --> StoreResult[💾 Stocker value_output]
StoreResult --> Success([✅ StrTaskResult])
E1 --> Error([❌ Exception])
E2 --> Error
E3 --> Error
E4 --> Error
E5 --> Error
E6 --> Error
style Start fill:#e3f2fd
style Success fill:#c8e6c9
style Error fill:#ffcdd2
style Read fill:#fff9c4
style StoreResult fill:#c8e6c9
Comment ça fonctionne :
- Vérifications préalables + connexion : Bluetooth prêt,
mac_bleconnectée et enregistrée. - Validation des UUID :
service_uid/char_uiddoivent être des UUID valides. - Découvrir les services : attend la table des services GATT (bornée par
read_timeout). - Localiser le service et la caractéristique : échoue si l'un des deux est introuvable sur l'appareil.
- Lire : lance la lecture GATT et attend la réponse du serveur.
- Décoder : convertit les octets bruts selon le type
decoder(repli surHEXsi non défini/inconnu). - Stocker : écrit la chaîne décodée dans
value_output.
Détails des paramètres d'entrée
1. Paramètre d'entrée : mac_ble
L'adresse MAC de l'appareil déjà connecté à lire.
Exemple
2. Paramètre d'entrée : service_uid / char_uid
Les UUID de service et de caractéristique GATT à lire.
Exemple
"service_uid": "0000180f-0000-1000-8000-00805f9b34fb",
"char_uid": "00002a19-0000-1000-8000-00805f9b34fb"
3. Paramètre d'entrée : decoder
Comment décoder les octets bruts lus depuis la caractéristique — voir le tableau Types de décodeur ci-dessus.
Exemple
Détails
- Optionnel — les codes non définis ou non reconnus se replient sur
HEX(chaîne hex espacée).
4. Paramètre d'entrée : read_timeout
Millisecondes à attendre à la fois la découverte de services et la réponse de lecture.
Exemple
Détails
- Optionnel — vaut
5000(5 secondes) par défaut.
Exemple JSON complet
{
"Ble_connect": [
{ "id": "1", "mac_ble": "AA:BB:CC:DD:EE:FF" }
],
"Ble_readChar": [
{
"id": "2",
"title": "Lire le niveau de batterie de la caractéristique",
"mac_ble": "AA:BB:CC:DD:EE:FF",
"service_uid": "0000180f-0000-1000-8000-00805f9b34fb",
"char_uid": "00002a19-0000-1000-8000-00805f9b34fb",
"decoder": 11,
"value_output": "$BLE_BATTERY_LEVEL"
}
]
}