Nodejs에서 Inkbird IBS-TH1 (BLE 온습도 센서)에서 온도 습도 정보 얻기

소개



Bluetooth(BLE)로 날리는 온도계로서 Amazon에서 팔고 있는 Inkbird IBS-TH1 미니의 데이터를 RasberryPI에서 nodejs를 사용하여 읽어 보았습니다.

개발 환경


  • Central: Rasberry Pi3 B+ (Raspbian)
  • Peripheral: Inkbird IBS-TH1 mini
  • nodejs: v8.15.0 + noble

  • 데이터 형식



    여기 참조했습니다. 9바이트의 데이터가 전송되고 있어 1, 2바이트가 온도, 3, 4바이트가 습도 데이터, 8바이트째가 배터리 잔량인 것 같습니다.

    코드



    inkbird.js
    const INKBIRD_ADDR = 'xx:xx:xx:xx:xx:xx'; //IBS-TH1のアドレス
    const INTERVAL = 5 * 60 * 1000;  //5分おきにスキャン
    
    var noble = require('noble');
    
    noble.on('stateChange', function(state) {
      if (state === 'poweredOn') {
          noble.startScanning();
      } else {
          noble.stopScanning();
      }
    });
    
    noble.on('scanStart', function() {
      console.log('scanStart');
    });
    
    noble.on('scanStop', function() {
      console.log('scanStop');
    });
    
    noble.on('discover', function(peripheral) {
      var buf = peripheral.advertisement.manufacturerData;
      if( peripheral.address == INKBIRD_ADDR){
        var t = buf.readInt16LE(0) / 100;
        var h = buf.readInt16LE(2) / 100;
        var b = buf[7];
        console.log('[discover IBS-TH1] temp:' + t + ' degree, humidity:' + h + '%, battery:' + b + '%\n');
        noble.stopScanning();
      }
    });
    
    setInterval(function() {
        console.log('Start scanning..');
        noble.startScanning();
    }, INTERVAL);
    
    

    실행


    $ sudo node inkbird.js
    scanStart
    [discover IBS-TH1] temp:16.47 degree, humidity:45.78%, battery:14%
    
    scanStop
    

    현재는 냉장고 내의 온도 기록에 사용하고 있습니다. 냉장고 내에서 RaspberryPI까지 10m 정도 있습니다만, 문제없이 수신할 수 있습니다.


    끝에



    본체 내장의 데이터 로거를 사용하면 배터리 소모가 빠르기 때문에, 미리 스마트폰 앱으로 데이터 로그 간격을 최장의 30분으로 설정해 두면 좋은 것 같습니다. CR2032로 1개월 이상 구동하고 있습니다.

    좋은 웹페이지 즐겨찾기