コモノポリタン

コモノ、デジモノが好きなKomonopolitan住民 (はてなダイアリーからの引っ越しです)

【Home Assistant (Hass.io)でホームオートメーション】2. 環境センサー(Omron)を接続 ー 前編

環境センサー(WxBeacon2/Omron 2JCIE-BL01)編

1. まえがき

 前回スマートホームの核となるホームオートメーションサーバHome Assistantの導入はできました。 maky-ba.hatenablog.com

次は家の状況を把握するセンサーを設定します。 いろいろなセンサーがありますが、今回はOMRONの環境センサーを使います。 複数の環境センサーと接続して情報を一元的に記録したいので、センサーデータを受け取るセンサーデータ収集サーバをHome Assistantとは独立して構築します。

WxBeacon2写真

まずは収集サーバとなるRaspberry Pi Zero Wをセットアップします。既に設定済みのRaspberry Piがあるなら不要です。

  1. 前編:収集サーバとなるRaspberry Pi Zero Wをセットアップ(この記事)
  2. 中編:環境センサー(OMRON)からデータを収集
  3. 後編:Home Assistantでのセンサーセットアップ

2. 準備

種類 品名 入手先
環境センサー weathernews WxBeacon2 ウェザーニューズで購入。中身はオムロン 2JCIE-BL01から加速度センサーを除いたものと同じ?。価格半分なのでこちらを。
サーバ(ハード) Raspberry Pi Zero W サイズを重視して今回はPi Zeroを購入。私はマルツで購入しましたが、あっちこっちで買えます
サーバ(ソフト) Raspbian Buster*1 Lite https://www.raspberrypi.org/downloads/raspbian/
ACアダプタ 2.0A USB Micro-Bコネクタ出力 Raspberry Pi Zero Wは、Pi3 model B+ほど電流を必要としません。
SDカード microSD 32GB FAT32でフォーマットされている必要あり

3. センサーデータ収集サーバのセットアップ

3.1. ディスプレイ/キーボード/有線LAN無しでRaspberry Pi Zero Wを使う準備

  1. Raspbian image (Raspbian Buster Lite) をサイトからダウンロード。Home Assistantの導入でも使ったEtcherでmicroSDにRaspbian imageを書き込み。
  2. そのmicroSDをもう一度PCに刺し直して、そのルートディレクトリ(ドライブ名:boot)にsshという空ファイルを作る(Windowsならエクスプローラで右ボタンでtextファイルを作り、拡張子txtを削除。Linuxならtouchコマンドかな)。これで再起動時にsshで接続できるようになる。
  3. 無線LANを使えるように、microSDのルートディレクトリ(ドライブ名:boot)にwpa_supplicant.confを作成。
country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1
network={
  ssid="<接続する無線LANのSSID>"
  psk="<暗号化キー>"
}

3.2. WSL(Windows Subsystem for Linux)を設定

Windows10からssh接続をするためにWSL*2を設定する。 設定済み、もしくはterminalソフトからssh接続する場合には読み飛ばしてOK。

1) WSL機能を有効にする:

「コントロールパネル」→「プログラムと機能」→「Windowsの機能の有効化または無効化」→「Windows Subsystem for Linux」にチェックを入れ有効化する。

2) Microsoft StoreからWSLパッケージをインストール:

WSLとしてはUbuntuが情報が多くメジャーだが、他のDebian等のLinuxディストリビューションもあるので、慣れているものがあればそれを使うべし。私はUbuntuを入れました。

3) WSL初期設定:

Windows左下の検索窓からbashを検索し(以前に古いubuntuを入れているとBash on Ubuntu on Windows(デスクトップアプリ)が検索結果にでるかも)、それをクリックし起動。初回は初期設定で少し待たされる。UNIX usernameとUNIX passwordの設定を要求されるので、自分の好きなように設定する。

...
Enter new UNIX username: hass01
Enter new UNIX password: hoge
Enter new UNIX password: hoge
passwd: password updated successfully
...

3.3. Raspberry Pi Zero W起動後の初期設定

1) Raspberry Pi Zero Wの起動

  1. microSDRaspberry Pi Zero Wに挿入し電源(micro USB)をつなぐ。
  2. LEDの点滅が落ち着くのを待ってから、IPアドレスをFing(1. RaspberryPiにHome Assistant導入を参照)で確認する。

2) ssh接続

$ ssh pi@<Raspberry Pi Zero WのIPアドレス>

パスワードを聞かれたら、raspberryと入力のこと。上手くいけば下記の様にRaspberry Pi Zero Wにログインできるはず。

pi@raspberrypi:~ $

もしCredentialがうんたらかんたら言われたら、表示された説明にあるようにssh-keygenで削除しておくこと。初回接続では出ないはず。

3) Raspbian (Buster) Liteの初期設定

ログインしたらRaspbianの初期設定をしておく。

$ sudo raspi-config
1. Change User Password:
新しいパスワードを入力
2. Network Option:
"N2 Wi-fi"で、SSIDとPassPhrase(Wifiの暗号化キー)を入力
4. Localization Option:
"I1 Change Locale"で、en_US.UTF-8 と ja_JP.UTF-8 を選択(en_GB.UTF-8は外しておこうか)。選択はスペースバーで。Default localeには、jp_JP.UTF-8を指定
4 Localization Option:
"I2 Change Timezone"で Asia/Tokyoを選択。
4 Localization Option:(キーボードを繋いだ時には)
"I3 Change Keyboard Layout": Generic 105 (intel) PCを選択
5 Interfacing Options:
“P2 SSH” でonにする

raspi-configを< FINISH >で終了したら、まずは/etc/wpa_supplicant/wpa_supplicant.conf の設定を確認するために、nanoエディタを起動。 (Ctrl-O:ファイル書き込み、Ctrl-X:エディタ終了)

$ sudo nano /etc/wpa_supplicant/wpa_supplicant.conf

wpa_supplicant.confの中身は下記の通りになっているはず。

country=JP
ctrl_interface=DIR=/var/run/wpa_supplicant GROUP=netdev
update_config=1

network={
  ssid="<接続する無線LANのSSID>"
  psk="<暗号化キー>"
}

一応、無線LANインタフェースも設定しておく

$ sudo nano /etc/network/interfaces.d/wlan0

wlan0の中身は下記の通り

allow-hotplug wlan0
iface wlan0 inet manual
  wireless-power off
  wpa-conf /etc/wpa_supplicant/wpa_supplicant.conf

4) WiFiの自動再接続

電波の状況やルータの状況により、ルータとのWiFi接続が切れたときに、Raspberry Piがルータに再接続出来ないことがある。 (時々勝手に回線切断される症状が出たときは、これで改善された)

$ sudo nano ~pi/reconnect.sh
#! /etc/bash
router_address="<ルーターのIPアドレス>"
ping -c 1 $router_address > /dev/null 2>&1
if [ $? -ne 0 ]; then
  sudo ifconfig wlan0 down
  sudo ifconfig wlan0 up
fi

定期的(毎分)に上記スクリプトを起動して、Wifi接続状況を確認し、切断されていたら再接続するようする。cronの機能でこれを実現する。

$ sudo crontab –e

立ち上がったcrontab編集画面(初回に使用するエディタを選択する。nanoが推奨)でcronetabで定期起動を設定。『#』でコメントアウトされている行を下に見て行って、最後の空白行に、下記の一行(毎分(毎時 毎日 毎月 毎曜日)にreconnect.hを起動する設定)を追記。

* * * * * bash ~pi/reconnect.sh

5) Raspberry Piの固定IP化

1. RaspberryPiにHome Assistant導入』と同じように、Fingを使ってRaspberry Pi Zero WのIPアドレス/MACアドレスを探し、ルーターの機能で手動割当(固定IP化)する。

6) 再起動

変更を有効にするために再起動

$ sudo shutdown –r now

もしくは

$ sudo reboot

3.4. ソフトの最新化・インストール

1) Raspbianの最新化

再度Raspberry Pi Zero Wにssh接続して、忘れないうちにRaspberry Pi Zero Wに入れたRaspbianを最新のものにする。しばらく待たされるので気長に。

$ sudo apt-get update
...
$ sudo apt-get upgrade
...
(途中で確認プロンプトが出るが[y]とする)

2) Git cloneを使えるようにする

OMRONのPythonコードはGitに公開されているので、Git Hub上の公開リポジトリをダウンロードできるようにする。

$ sudo apt-get install -y git

3) pipのインストール

Pythonをメイン言語としてセットアップしてゆきたいのだが、pip(Pythonパッケージのインストーラ)がRaspbianにインストールされていない。 ちなみに下記のようにpipを確認すると、

$ python -m pip -V
/usr/bin/python: No module named pip

そんなモジュールない、って言われる。入れましょう。

$ sudo apt-get install -y python-dev
$ sudo apt-get install -y python-pip
$ sudo pip install --upgrade pip 

4. つづく

これで環境センサーデータ収集サーバの土台はできました。つぎは、OMRONのサンプルスクリプトを流用して、データ収集サーバをつくります。

Home Assistant(Hass.io)でホームオートメーション

  1. RaspberryPiにHome Assistant導入
  2. Home Assistant初期設定
  3. 環境センサー(Omron)を接続
    1. 環境センサー(Omron)を接続 - 前編《今回》
    2. 環境センサー(Omron)を接続 - 中編《次回》
    3. 環境センサー(Omron)を接続 - 後編
  4. 汎用赤外線リモコンを接続
  5. スマートプラグを接続
  6. UIを改善

*1:知らないうちにStretchがBusterに

*2:そろそろ、Full LinuxWindows Subsystem for Linux 2がリリースされそうですが。