node-red-contrib-blebeacon-scanner
をインストールしますが、いきなり通常のパレットからインストールではフローが停止する問題を抱えています。
正常にインストールするには事前に以下を行ってください。
ノードの説明ページです。
このライブラリを動かすためには”Noble”というnode.jsのモジュールをインストールする必要があります。
コマンドラインから以下を実行します。
sudo apt-get install libbluetooth-dev libudev-dev pi-bluetooth
npm install @abandonware/noble
sudo setcap cap_net_raw+eip $(eval readlink -f `which node`)
cd .node-red
npm install node-red-contrib-blebeacon-scanner

色々警告が出ますが、インストールは完了するはずです。
このコマンドを実行後にあらためてパレットからインストールを行ってください。
今回使用するデバイスは以下です。
SwitchBot CO2センサー 二酸化炭素濃度計 温湿度計 アラーム – スイッチボット デジタル 大画面 高精度 CO2測定器 快適指数 天気予報 時計 卓上 カレンダー スマホ連動 アラート通知 グラフ記録 スマートホーム Alexa Google Home Siriに対応

フローは上記のとおりです。
BLEノード:置くだけ
Switchノード:payload.id == BLE MACのアドレスすべて小文字 Swichbot公式アプリから参照可能
limitノード:メッセージの流量制限 、1メッセージ/3秒
Functionノード:以下の通り
デバイスの値の割り付けがなかったので解析しました。3箇所だけわからない部分があります。
const b = msg.payload.other;
//デバイスのタイプ
const machineType = b[0]
//デバイスの所属グループ
const group = b[1]
//デバイスのMACアドレス
const mac = [b[2],b[3],b[4],b[5],b[6],b[7]].map(x=>x.toString(16).padStart(2,'0')).join(':');
//不明な値
const nazo = b[8]
//デバイスのバッテリ残量%
const battery = b[9]
//温度の少数部絶対値
let tempDecimal = b[10] & 0x0F
//温度の符号 1→正 0→負
let tempSign = b[11] & 0x80
//温度の整数部絶対値
let tempIntger = b[11] & 0x7F
//温度の計算処理
let tempC = tempIntger + (tempDecimal/10); // signed BE /100
if(tempSign == 0){
tempC = tempC * -1
}
//湿度
const humid = b[12];
//不明な値
const nazo2 = b[13] + b[14]
//CO2濃度
const co2ppm = ((b[15] << 8) | b[16]);
//不明な値
const nazo3 = b[17]
msg.payload = { machineType ,group, mac,battery, co2ppm, tempC, humid,
};
return msg;

コメント