¿Cómo obtener el valor de la temperatura correcta a partir de la matriz de bytes

user10539558:

Estoy intentando crear una aplicación BLE donde quiero coger el valor de la temperatura de un dispositivo. Estoy usando el dispositivo de temperatura Sitter.

Tengo este UUID = 0000ffe1-0000-1000-8000-00805f9b34fb. Desde aquí consigo una matriz de bytes.

        // 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());
        }

Aquí están algunos resultados Hex: AA 06 11 00 3E 0D 00 62 --- AA 06 11 00 43 00 67 0D --- AA 06 11 00 49 00 0D 6D

¿Puede alguien que me ayude a leer el valor exacto de esta matriz?

Codo :

Después de la ingeniería inversa del IRULU / Guangdong Biolight Meditech Temperatura Sitter aplicación, parece como si el mensaje tiene el siguiente formato:

            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 

Los campos son:

  • Marcador : Siempre 0xAA. Marcador utiliza para delinate mensaje. El formato del mensaje parece estar diseñado para enviar un flujo de mensajes. 0xAA indicaría el comienzo de un nuevo mensaje.
  • Longitud : La longitud de carga útil, en bytes. Es la longitud sin marcador y sin suma de comprobación.
  • Tipo : El tipo del mensaje. 0x11 parecen ser mensajes de temperatura. También hay un mensaje TPE 0x12 que parece interesante (aunque no entiendo su propósito). Otros tipos de mensajes son ignorados por la aplicación.
  • Subtipo : El subtipo mensaje. Subtipo 0 son mediciones de temperatura. Subtipo 1 y 2 parece altas y bajas advertencias / indicadores.
  • Baja : El byte bajo del valor de la temperatura.
  • Alto : El byte alto del valor de la temperatura.
  • No utilizados : Este byte parece estar unsued y se pone a 0.
  • Suma de comprobación : La suma de comprobación de la carga útil. Simplemente se calcula mediante la adición de todos los bytes de la carga útil (comenzando con la longitud y terminando con el no utilizada de campo).

El valor de temperatura se almacena en 0,01 grados (Celsius probablemente grado). Así que para extraerlo, a calcular:

double temperature = ((message[5] & 0xff) * 256 + (message[4] & 0xff)) * 0.01;

En el ejemplo anterior, el resultado sería 33,90 ° C.

Supongo que te gusta

Origin http://43.154.161.224:23101/article/api/json?id=214908&siteId=1
Recomendado
Clasificación