株式会社 日立製作所 OSSソリューションセンタ Blockchain推進部 梅田多一
はじめに
トイレの使用状況やにおいを通知、親の健康状態をラズパイで遠隔確認するシステム「今日のうん性」を改良すべく、今回はBLE(Bluetooth Low Energy)とRedisを使ってトイレの使用者を確認できるようにするための環境を作ってみます。
前提環境
Raspberry Pi 3 Model BにRaspbianをインストールします。
$ lsb_release -a
No LSB modules are available.
Distributor ID: Raspbian
Description: Raspbian GNU/Linux 9.6 (stretch)
Release: 9.6
Codename: stretch
BLE環境のセットアップ
Raspberry PiをBLEセントラルにしてBLEペリフェラルからのアドバタイズメントを受け取れるようにします。Node.jsのbleaconモジュールをインストールして使用します。
- nobleの前提ライブラリをインストール
$ sudo apt-get install bluetooth bluez libbluetooth-dev libudev-dev
参考:
A Node.js BLE (Bluetooth Low Energy) central module
- Node.js v8.xのインストール
$ curl -sL https://deb.nodesource.com/setup_8.x | sudo -E bash -
$ sudo apt-get install -y nodejs
- node-bleaconのインストール
$ npm install bleacon
参考:
A Node.js library for creating, discovering, and configuring iBeacons
BLE環境の動作確認
以下のプログラムを作成して実行します。受け取ったアドバタイズメントをコンソール出力しています。
var Bleacon = require('bleacon');
// Start scanning
Bleacon.startScanning();
// Events
Bleacon.on('discover', function(bleacon) {
console.dir(bleacon);
});
iBeaconのシミュレータ等を使ってアドバタイズメントを飛ばしてみます。私はAndroidアプリのBeacon Simulatorを使用しました。アドバタイズメントに含まれるuuidで人を、proximityがimmediateかnearの場合にトイレにいると判定できそうです。
$ sudo node beacon.js
{ uuid: 'a881f9bec064434ba659df4cbb445b95',
major: 1,
minor: 1,
measuredPower: -65,
rssi: -97,
accuracy: 6.265184188618567,
proximity: 'far' }
{ uuid: 'a881f9bec064434ba659df4cbb445b95',
major: 1,
minor: 1,
measuredPower: -65,
rssi: -87,
accuracy: 3.5309536541092137,
proximity: 'near' }
Redis環境のセットアップ
Raspberry PiにRedisをインストールしてBLEペリフェラルからのアドバタイズメントを管理できるようにします。
- Redisのインストール
$ sudo apt-get install redis-server
- node-redisのインストール
$ npm install redis
Redis環境の動作確認
先ほどのプログラムを改造して実行します。受け取ったアドバタイズメントからuuidとproximity を取り出しRedisに登録します。uuidをkeyにproximityをvalueとしてセットします。Redisへのセット時にsetexを指定しTTL(Time to live)を5秒に設定しているのでトイレから離れるとRedisから情報は自動的に削除されます。
var Bleacon = require('bleacon');
var client = require('redis').createClient();
// Start scanning
Bleacon.startScanning();
// Events
Bleacon.on('discover', function(bleacon) {
console.dir(bleacon);
client.set(bleacon.uuid, bleacon.proximity, 'EX', 5, function(){});
});
Redisに付属のredis-cliを使えば登録されているアドバタイズメントを簡単に確認できます。
$ redis-cli
127.0.0.1:6379> keys *
(empty list or set)
127.0.0.1:6379> keys *
1) "a881f9bec064434ba659df4cbb445b95"
127.0.0.1:6379> get a881f9bec064434ba659df4cbb445b95
"near"
127.0.0.1:6379>
おわりに
Raspberry Piひとつで近くにいる人を管理する仕組みを簡単に作れました。いろんな業務に応用できるのではないでしょうか。例えば働き方改革。時間や場所にとらわれない多様な働き方の実現には、従業員がいつどこで働いているか証明できる必要があります。
仕事の証明と言えばPoW(Proof of Work)。PoWと言えばブロックチェーン。次回は便座の使用状況をブロックチェーンで管理します。便座とブロック、ベンザとブロック、、お楽しみに。