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 * 100a8 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.