WxBeacon2 の入手
直販サイトから入手した。
WxBeacon2 は OMRON の環境センサ 2JCIE-BL の OEM 品らしい。
ユーザーズマニュアル(PDF)
Ambient へ登録
Ambient へユーザ登録(無償)をする。
新規チャネルを 1 つ作成しておくこと。
参考サイトを元に各種設定をする。
なお、Raspberry Pi 3 の初期設定は完了しているものとする。
$ sudo apt-get update
$ sudo apt-get upgrade
pyenv を導入
当方環境では python 2,3 が共存している。
2 系、3 系を同時設定が可能な pyenv を導入する。(参考サイト)
必要なパッケージのインストール、git から pyenv をクローンする。
なお、sudo のパスが通らないときは ここ を参照し /etc/sudoers の記述を変更する。
$ sudo apt-get install -y git openssl libssl-dev libbz2-dev libreadline-dev libsqlite3-dev
$ git clone git://github.com/yyuu/pyenv.git ~/.pyenv
.bash_profile に設定を追加。
$ sudo vi ~/.bash_profile
# 以下の内容を追記
export PYENV_ROOT="$HOME/.pyenv"
export PATH="$PYENV_ROOT/bin:$PATH"
eval "$(pyenv init -)"
. "$HOME/.bashrc"
設定を反映。
.bash_profile があると .bashrc が読み込まれないので注意。(参考サイト)
$ source ~/.bash_profile
インストール可能な python パッケージを確認。
$ pyenv install --list
...
...
3.6.4
3.6.5
3.6.6
...
...
python 2系、3系を共存させる。
python 2 のバージョン確認。
$ python -V
Python 2.7.13
pyenv で 2系、3系をともにインストールする。
本件の参考サイトで使用していた 3.6.5 をインストールする。
$ pyenv install 2.7.13
$ pyenv install 3.6.5
同時使用できるようにする。
$ pyenv global 2.7.13 3.6.5
$ pyenv version
2.7.13 (set by /home/pi/.pyenv/version)
3.6.5 (set by /home/pi/.pyenv/version)
$ python -V
Python 2.7.13
$ python3 -V
Python 3.6.5
pip を最新版にする。
$ pip3 install --upgrade pip
Python BLE ライブラリを導入
$ sudo apt-get install libglib2.0-dev
$ pip3 install bluepy
BLE ライブラリが import できない場合は、次を実行する。
bluepy 公式サイトから最新のソースコードを DL する。
$ cd /tmp
$ wget https://files.pythonhosted.org/packages/27/91/6cfca10bee9862f93015413cf9e6a52c3081a71f1518963396a055128f8e/bluepy-1.3.0.tar.gz
$ tar xvzf bluepy-1.3.0.tar.gz
$ cd bluepy-1.3.0
$ sudo python3 setup.py build
$ sudo python3 setup.py install
Ambient のライブラリを導入
$ sudo pip3 install git+https://github.com/AmbientDataInc/ambient-python-lib.git
Raspberry Pi 3 の Bluetooth バージョン確認
$ bluetoothd -v
5.43
WxBeacon2 の設定
WxBeacon2 に電池を入れて hcitool で BLE をスキャンする。
末尾が Env のものが WxBeacon2 である。
$ sudo hcitool lescan
LE Scan ...
...
XX:XX:XX:XX:XX:XX (unknown)
AA:BB:CC:DD:EE:FF Env
スキャンした WxBeacon2 に接続してサービスを調べる。
connect コマンドがエラーになる場合は何回かリトライする。
$ gatttool -b AA:BB:CC:DD:EE:FF -t random -I
[AA:BB:CC:DD:EE:FF][LE]> connect
Attempting to connect to AA:BB:CC:DD:EE:FF
Connection successful
[AA:BB:CC:DD:EE:FF][LE]> primary
attr handle: 0x0001, end grp handle: 0x0007 uuid: 00001800-0000-1000-8000-00805f9b34fb
attr handle: 0x0008, end grp handle: 0x000b uuid: 00001801-0000-1000-8000-00805f9b34fb
attr handle: 0x000c, end grp handle: 0x0016 uuid: 0000180a-0000-1000-8000-00805f9b34fb
attr handle: 0x0017, end grp handle: 0x0025 uuid: 0c4c3000-7700-46f4-aa96-d5e974e32a54
attr handle: 0x0026, end grp handle: 0x003a uuid: 0c4c3010-7700-46f4-aa96-d5e974e32a54
attr handle: 0x003b, end grp handle: 0x0043 uuid: 0c4c3030-7700-46f4-aa96-d5e974e32a54
attr handle: 0x0044, end grp handle: 0xffff uuid: 0c4c3040-7700-46f4-aa96-d5e974e32a54
[AA:BB:CC:DD:EE:FF][LE]> exit
$
WxBeacon2 をブロードキャストモードにする
設定はスマホアプリ BLE Scanner で行う。
詳細は 参考サイト のプログラム2(ブロードキャストモード) の項目を参照。
データ取得プログラム
計測データを取得する Python ソースコードを DL する。
Github のソースコードを使用する。
$ cd ~
$ mkdir WxBeacon2
$ cd WxBeacon2
wget https://raw.githubusercontent.com/AmbientDataInc/EnvSensorBleGw/master/src/gw_RPi/env2ambientBS.py
Ambient で 新規チャネル を作成しておく。
チャネルID と ライトキー を使う。
$ vi env2ambientBS.py
(17行目)
channelID = 100
↓
channelID = xxxxx
(18行目)
writeKey = 'writeKey'
↓
writeKey = 'xxxxxxxxxxxxxxxx'
(52行目)
if companyID == 'ffff':
↓
if devs[target]['companyID'] == 'ffff':
プログラムの起動
ヘルプを表示する。
$ sudo python3 env2ambientBS.py -h
usage: env2ambientBS.py [-h] [-d] [-o] [-b] [-bb]
optional arguments:
-h, --help show this help message and exit
-d debug msg on
-o device is omron env sensor
-b device is BBC micro:bit
-bb device is BBC micro:bit + BME280
今回は WxBeacon2(オムロン環境センサ)を使用するので -o オプションを付ける。
ret = 200 は ambient からの書き込み成功を意味する。
$ sudo python3 env2ambientBS.py -o
omron
23.62 47.29 0 0.02 1011.0 33.18 2.97
sent to Ambient (ret = 200)
BTLE Exception while scannning.
23.59 47.29 0 0.01 1011.0 32.77 2.97
sent to Ambient (ret = 200)
23.54 47.33 0 0.02 1011.0 32.77 2.97
sent to Ambient (ret = 200)
23.5 47.36 0 0.02 1011.0 33.57 2.97
sent to Ambient (ret = 200)
バックグラウンドで動作させる。
ログは一切出力しない。
参考サイト
$ sudo nohup python3 env2ambientBS.py -o > /dev/null 2>&1 &
起動スクリプトを書いて、ラズパイ起動時に自動起動させる。
$ cd /usr/local/bin/
$ sudo touch WxBeacon2_autostart.sh
$ sudo vi WxBeacon2_autostart.sh
#!/bin/sh
/usr/bin/sudo /usr/bin/nohup /home/pi/.pyenv/shims/python3 env2ambientBS.py -o > /dev/null 2>&1 &
$ chmod a+x WxBeacon2_autostart.sh
スクリプトを rc.local に登録する。
$ sudo vi /etc/rc.local
exit 0 の手前に以下の行を追加
WxBeacon2_autostart.sh
出力ログ
上記実行時のログについて。
env2ambientBS.py の 58 行目 MSG より。
MSG(temp / 100, humid / 100, light, uv / 100, press / 10, noise / 100, (batt + 100) / 100)
23.62 47.29 0 0.02 1011.0 33.18 2.97
温度 |
相対湿度 |
環境光 |
UV指数 |
気圧 |
騒音 |
バッテリ電圧 |
degC |
%RH |
lux |
|
hPa |
dB |
V |
23.62 |
47.29 |
0 |
0.02 |
1011.0 |
33.18 |
2.97 |
ambient への書き出し
env2ambientBS.py の 59 行目 sendWithRetry より。
以下の順序で ambient へ送っている。
sendWithRetry({'d1': temp / 100, 'd2': humid / 100, 'd3': press / 10, 'd4': (batt + 100) / 100, 'd5': light, 'd6': noise / 100})
温度 |
相対湿度 |
気圧 |
バッテリ電圧 |
環境光 |
騒音 |
d1 |
d2 |
d3 |
d4 |
d5 |
d6 |
ambient のグラフ編集
上記 d1 ~ d6 のデータ項目を元に、見やすいようにグラフを編集する。
UI が優れているので慣れれば任意にデザイン可能。