Skip to content

Instantly share code, notes, and snippets.

@funky-monkey
Created October 19, 2021 11:51
Show Gist options
  • Save funky-monkey/8c71f30dde9652a18195254f6bdcc732 to your computer and use it in GitHub Desktop.
Save funky-monkey/8c71f30dde9652a18195254f6bdcc732 to your computer and use it in GitHub Desktop.

This Gist contains an example code fragment of how to read temperature and humidity data from Inkbird ibs-TH1 bluetooth thermometer in NodeJS with Noble.

Note that you can also read values directly via command line with gatttool:

gatttool -b <MAC> --char-read --handle=0x002d

Example value:

c8 0a a8 16 00 49 88  
  • c8 0a uint16 Little Endian temperature value * 100
  • a8 16 uint16 Little Endian humidity value * 100

To find MAC adress of sensor, you can use hcitool.

sudo hcitool lescan

or bluetoothctl.

Snippet:

const DATA_HND = 0x002d;

const parseData = (data) => {
    const rawTemp = data.readInt16LE(0);
    const rawHum = data.readInt16LE(2);
    return {
        temperature: rawTemp / 100,
        humidity: rawHum / 100
    }
}

exports.readData = async (peripheral) => {
    return new Promise((resolve, reject) => {
        peripheral.readHandle(DATA_HND, function (error, data) {
            if (error) {
                reject(error);
            }
            resolve(
                parseData(data)
            );
        });
    });
}

Thanks, that helped me a lot. How did you find the data handle (0x002d) ?

Do you know where to fetch the status of the battery?

Unfortunately, my TH1 returns just 5 bytes with that data handle (from gattool: 02 2e 00 f4 ff), and that doesn't seem to vary over time. Any hints as to how to explore further? I poked at other handles and didn't find any that returned 6 bytes.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment