Je suis en train de créer une application BLE où je veux attraper la valeur de la température d'un appareil. J'utilise dispositif de Sitter Temp.
Je UUID = 0000ffe1-0000-1000-8000-00805f9b34fb. De là, je reçois un tableau d'octets.
// For all other profiles, writes the data formatted in HEX.
final byte[] data = characteristic.getValue();
if (data != null && data.length > 0) {
final StringBuilder stringBuilder = new
StringBuilder(data.length);
for(byte byteChar : data)
stringBuilder.append(String.format("%02X ", byteChar));
intent.putExtra(EXTRA_DATA, new String(data) + "\n" +
stringBuilder.toString());
}
Voici quelques résultats hexagonaux: AA 06 11 00 00 62 3E 0D --- AA 06 11 00 43 0D 00 67 --- AA 06 11 00 49 00 0D 6D
Quelqu'un peut-il me aide à lire la valeur exacte de ce tableau?
Après l' ingénierie inverse du IRULU / Guangdong Biolight Meditech Temp Sitter application, il semble que le message a le format suivant :
0 1 2 3 4 5 6 7
+------+------+------+------+------+------+------+------+
|Marker|Length|Type |Subtyp|Low |High |Unused|Chksum|
+------+------+------+------+------+------+------+------+
Example AA 06 11 00 3E 0D 00 62
Les champs sont les suivants:
- Marqueur : Toujours 0xAA. Marqueur utilisé pour un message delinate. Le format de message semble être conçu pour envoyer un flux de messages. 0xAA indique le début d'un nouveau message.
- Longueur : La longueur de la charge utile, en octets. Il est la longueur sans marqueur et sans contrôle.
- Tapez : Le type du message. 0x11 semblent être des messages de température. Il y a aussi un message qui semble tpe 0x12 intéressant (même si je ne comprends pas son but). D' autres types de messages sont ignorés par l'application.
- Sous - type : Le sous - type de message. Sous - type 0 sont des mesures de température. 1 et 2 Sous - type semble élevé et de faibles avertissements / indicateurs.
- Faible : Le faible octet de la valeur de température.
- Haut : L'octet de poids fort de la valeur de la température.
- Inutilisé : Cet octet semble unsued et mis à 0.
- Checksum : La somme de contrôle de la charge utile. Il est simplement calculée en additionnant tous les octets de la charge utile ( en commençant par la longueur et se terminant par l' inutilisée champ).
La valeur de température est stockée dans 0,01 degré (degré Celsius probablement). Donc, pour l'extraire, vous calculer:
double temperature = ((message[5] & 0xff) * 256 + (message[4] & 0xff)) * 0.01;
Dans l'exemple ci-dessus, le résultat serait 33,90 ° C.