コモノポリタン

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

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

 前回Raspberry Pi上に環境センサー(WxBeacon2/Omron 2JCIE-BL01)からデータを収集する仕組みを構築しました。 influxDBに蓄積されたデータをHome Assistantからアクセス・表示できるようにしましょう。

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

1. 前提

下記のバージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

  • ホームオートメーションサーバ(ソフト): Home Assistant 0.98.5
    (環境センサーの設定を詰めている間に0.95.xから0.98.xまでバージョンが進みました。画面デザインは少し変わりましたが同じように使えます)
  • ホームオートメーションサーバ(ハード): Raspberry Pi 3 Model B+

2. Configuration.yamlの記述

以前設定したように、Home AssistantでUIを使うには、「Configuration.yamlの記述」そして「UIの設定(GUIでの設定)」が必要です。

まずは呪文です。この宣言文は、Home AssistantのDBとしてinfluxDBにデータを「書き込む」ためのもので、環境センサーの蓄積されているinfluxDBから「読み込む」場合には本来不要なものです。 しかしながら、どうやらinfluxdbのコンポーネントにはBugがあり、これを書いておかないと再起動時に「influxDBのConfigurationが間違っています」って言われて正常に作動しません。

(前略)

# influxdb
influxdb:
  host: !secret influxdb_host

(後略)

influxdbサーバのIPアドレスをconfigurationファイルから隠蔽したり、APIキーやユーザ・パスワードを隠ぺいしたりする簡単な機構(それほどセキュリティレベルがあがるわけではない…)があります。 configuration.yamlに!Secretと書いて、その実態をsecrets.yamlに記述するのです。例えば、上記の様にinfluxDBのサーバのIPをconfigファイルに直書きしない場合には、下記の様にSecrets.yamlファイルを記述します。

# Use this file to store secrets like usernames and passwords.
# Learn more at 
#       https://home-assistant.io/docs/configuration/secrets/

# influxdb
influxdb_host: 192.168.xx.xx

次に、influxDBに蓄積されたデータをHome Assistantからアクセスできるように設定します。 Home Assistantから見れば「Sensor」扱いなので、Sensor: ブロックの中に追記します。 下記は、屋外に設置したWxBeacon2のデータをlast_value_outside_xxxxxとして読み込む設定です。

(前略)

# Sensor
sensor:
  # Server (Raspberry Pi 3+) info  (以前設定したもの(CPU温度))
  - platform: command_line

(中略)

  # Envsensor(OMRON 2JCIE-BL01 / WxBeacon2) data in influxDB
  - platform: influxdb
    host: !secret influxdb_host
    queries:
      # Envsensor - Outside
      - name: last value of outside temp
        unit_of_measurement: ℃
        value_template: '{{ value | round(1) }}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: temperature
        database: weather
      - name: last value of outside light
        unit_of_measurement: lux
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: light
        database: weather
      - name: last value of outside pressure
        unit_of_measurement: hPa
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: pressure
        database: weather
      - name: last value of outside humidity
        unit_of_measurement: '%'
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: humidity
        database: weather
      - name: last value of outside noise
        unit_of_measurement: 'db'
        value_template: '{{ value | round(1)}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: noise
        database: weather
      - name: last value of outside battery
        unit_of_measurement: V
        value_template: '{{ value | round(1)/1000}}'
        where: '"bt_address" = ''DExxxxxxxxxx'' and time > now() - 5m'
        measurement: 'wxbeacon2'
        field: battery
        database: weather

(後略)

configuration.yamlファイルを編集したら、左のサイドバーから[設定]を選び、[Server Control] --> [Configuration Validation]の[CHECK CONFIG]ボタンを押して設定ファイルの書式のチェックをします。 書式上の問題が無ければ、同じページ[Server Control] --> [Server Management]の[RESTART]リンクをクリックし、Home Assistantを再起動させます。

3. UIの設定

左のメニュー(サイドバー)から[状態]を選び、その中の右端のベルマークの右の縦三つ点から[Configure UI]をクリック。 編集画面の右下のオレンジプラスマークからCard ConfigureでカードタイプEntitiesを選んで編集します。
上のconfiguration.yamlで設定したlast_value_of_outside_xxxxxx (configuration.yamlでスペースだったところは、_(アンダースコア)になってます)をエンティティに登録してゆきます。 f:id:maky_Ba:20190913225655j:plain これでHome Assistantに取り込まれたデータを表示できるようになります。 しかしまだセンサーが英語名であったり、アイコンがすべてセンサーアイコン(目のやつ)だったりするので、そこを編集で変更します。 編集画面の下の方にある「{}」をクリックすると、下記の様にエディタ形式での編集画面になります。 f:id:maky_Ba:20190913230336j:plain 上の様に、icon: やname:といった編集を追加して記述すると、表示名やアイコンを変更できます。

4. 家のセンサー配置図

今、2台あるWxBeacon2の配置は下記の様になっています。 f:id:maky_Ba:20190914000453j:plain

  • S1: 屋外用のWxBeacon2:防水とは言え雨ざらしはまずいと思うので、電気メータ―の格納箱の空きスペース*1によろい戸(?)なども百均の部材で作って百葉箱的に仕上げました。
  • S2: 屋内用WxBeacon2:ダイニングの壁に設置。
  • R1: 環境センサーサーバ:外のセンサーとの交信が弱いので、電気メータ―と近い洗面所にサーバを置くことに。洗面台の鏡の裏側のコンセントを使ってRaspberry Pi Zero Wサーバを設置。

屋内外のセンサーを追加するとUIは下のようになります。 f:id:maky_Ba:20190913231455j:plain

5. おわりに

スマートホームはロボットのようなものだと思っています。 センサーを使って周囲の「情報を把握」し、情報を基に「判断」し、何らかの手段で「外界に働きかける」というのがロボット的ですね。 まず第一段階の状況を把握(と言っても気温、とかですが…)ができるようになりました。 次の段階は「外界に働きかける」を準備し、最終的に「情報の把握」と「外界への働きかけ」を繋げる「判断」を導入しましょう。 外界の働きかけの一例として、汎用赤外線リモコンでシーリングライトをオンオフしてみましょう。

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

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

*1:もともとは、アナログの買電、売電の2つのメーターが入っていたのですが、スマートメーター化して1台にすっきりしたため、1つスペースが空きました

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

1. まえがき

 前回で環境センサーからデータを取得するサーバ用のRaspberry Piの準備ができました。今回はそのRaspberry Pi上に環境センサー(WxBeacon2/Omron 2JCIE-BL01)からデータを収集する仕組みを構築します。

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

2. 環境センサーについて

2.1. 「WxBeacon2」? それとも「2JCIE-BL01」?

ウェザーニューズ(weathernews)社が販売*1している簡易気象観測器 WxBeacon2(ウェザービーコン2)は、「温度」「湿度」「気圧」「明るさ」「騒音」「UV」の6要素*2を測定可能な優れモノです。4.6cm x 3.9 cm と非常にコンパクトな一体型環境センサーで、コイン電池で長期間稼働します。
中身はオムロン(Omron)製の2JCIE-BL01から3軸加速度センサーを除いたもの、と思っていましたが、オムロンサイトを再度確認すると、「6種類のセンサー」と記載されているので同じものなのかな??以前は違っていた気が…。でもまあ2JCIE-BL01の値段は12,000~13,000円ぐらい。一方、ウェザーニューズ社が販売しているWxBeacon2は4,798円(税・送料込み)。

https://weathernews.jp/sorashop/item_photo/430/210/1.png https://www.omron.co.jp/documents/35742/363283/evs-lineup02.png

ウェザーニーズの為だけに加速度センサーを外したりしないと思うし、万が一加速度センサーが無くても室内設置用途なので、まあいらない*3ので、価格面を考慮して今回はWxBeacon2を使います。

2.1. ORMONの資料の在り処

GitHubに上がっているOMRONの資料・ソースを利用する。
資料: omronmicrodevices.github.io ソースコードgithub.com 基本的にOMRONの資料に沿ってすすめる。

追記:日本語版のユーザーズマニュアル
形2JCIE-BL01 環境センサ ユーザーズマニュアル

2.2. 参考サイト

いろいろと先人が苦労している様子です。omron(の正式かどうかは不明ですが)のコードもpython-blueを使うようになって楽になりましたが、以前は皆様が色々なBlueZ対応ライブラリにトライされておられました。 今は、下記サイトあたりを見れば大体の感触はつかめるかと。ありがたい、です。
- RaspberryPi 3B+とWxBeacon2(OMRON 2JCIE-BL01)で環境測定 CSV出力まで | 電子計算機の操縦桿
- WxBeacon2 を使った室内環境監視 - tasuwo's notes
- OMRONの環境センサ2JCIE-BL01をRaspberry Piから使えるように設定する - シュウジマブログ
- WxBeacon2のBLEビーコンをラズベリーパイでキャッチして屋外環境をモニタリング | IoT PLUS

3.環境センサー(WxBeacon2/Omron 2JCIE-BL01)からデータ取得準備

3.1. Raspberry Pi側の確認(Bluetooth確認)

まずはBluetoothモジュールのバージョン確認して、Bluetoothモジュール(bluz)がインストールされていることを確認します。

$ apt-cache show bluetooth

(参考までに、Release Date:2019-7-10のRasbian Buster Liteにインストールされているバージョンは、Source=bluz, Version=5.50-1でした)

次に、Raspberry Pi Zero WのBluetoothがきちんと稼働しているか確認します。 下記のコマンドを打ち、"UP RUNNING"となっていたらOKです。

$ hciconfig
hci0:   Type: Primary Bus: UART
        DB Address: B8:27:EB:xx:xx:xx  ACL MTU: 1021:8 SCO MTU: 64:1
        UP RUNNING
        RX bytes:766 acl:0 sco:0 events:49 errors:0
        TX bytes:2980 acl:0 sco:0 commands:49 errors:0

もしUP RUNNINGでなければ、下記のコマンドでBluetoothインタフェースを稼働させておきます。

$ sudo hciconfig hci0 up

一応、Raspberry PiのBTのインターフェース番号とBluetoothバイスアドレスを確認する。

$ hcitool dev
Devices:
         hci0    B8:27:xx:xx:xx:xx

3.2. WxBeacon2の動作確認

まずWxBeacon2に電池を入れます。ほんの一瞬、表側のLEDが赤色→緑色と光る、が普通は裏側で電池を入れているので見えない…
スマホウェザーニュースのアプリを入れて、[メニュー]→[みんなで作る天気:WxBeacon2のデータ]を開く。下の方の[WxBeacon2の設定]から設定画面に入る。
f:id:maky_Ba:20190730225430p:plain:w250 f:id:maky_Ba:20190730230004p:plain:w250
と言ってもやれることは「WxBeacon2を受信」のトグルをオンにするだけです(左の画面)。 「デバイスアドレス」と「シリアル番号」をメモっておく。

WxBeacon2からデータを受信すると、右の画面のように「気温」「湿度」「照度」「気圧」「騒音」「紫外線指数」が表示されます。 ちなみに下の二つ「不快指数」「熱中症危険度」は、センサーデータではなく、「気温」と「湿度」からの計算値です。 (危険度の単位って「℃」なんだ…)

3.3. WxBeacon2とRaspberry Piの接続確認

まずは、WxBeacon2のBluetoothバイスアドレスのチェックします。

$ sudo hcitool lescan
LE Scan ...
70:86:XX:XX:XX:XX (unknown)
0E:0F:XX:XX:XX:XX (unknown)
...
D2:C6:78:E2:19:D5 Env
...

先ほどスマホアプリで確認したデバイスアドレスが、Envという名前でスキャンに引っかかっていることを確認する。Ctrl-cで止めます。

$ gatttool –i hci0 –b D2:C6:XX:XX:XX:XX –t random –I (←最後はアイ(大文字))
[D2:C6:78:E2:19:D5][LE]> connect
Attempting to connect to D2:C6:XX:XX:XX:XX
Connection successful
[D2:C6:78:E2:19:D5][LE]> char-read-uuid  0x2a00
handle: 0x0003   value; 45 6e 76 53 65 6e 7e 6f 72 2d 42 4c 30 31  (← Device Name “EnvSensor-BL01”)
[D2:C6:78:E2:19:D5][LE]> char-read-uuid  0x2a25
handle: 0x0012   value; 30 39 37 38 4d 59 30 31 36 35  (← Serial Number “0978MY0165”)
[D2:C6:78:E2:19:D5X][LE]> char-read-hnd  0x0019
Characteristic value/descriptor: 04 ff 09 a0 19 45 00 01 00 61 27 8b 0e 02 1d 47 09 3f 0c  (← 気象データ)
[D2:C6:78:E2:19:D5][LE]> disconnect
[D2:C6:78:E2:19:D5][LE]> quit

4. Omronサンプルコード利用の準備

4.1. InfluxDBのインストール

OMRONのサンプルスクリプトでは、データの書き出し先にファイルorデータベースが選べます。 データベースには、IoT系のデータ(時系列データ)の格納に特化したInfluxDBが利用できます。
まずはこれをインストールしておきましょう。 基本的なやり方は下記のとおりですが、このページではStrechベースですので、そこをBusterに置き換えて進めます。 www.influxdata.com

まずは InfluxDataパッケージのリポジトリを追加。

$ curl -sL https://repos.influxdata.com/influxdb.key | sudo apt-key add -
$ echo "deb https://repos.influxdata.com/debian buster stable" | sudo tee /etc/apt/sources.list.d/influxdb.list

influxDBを実際にインストールする。

$ sudo apt-get update
$ sudo apt-get install telegraf influxdb chronograf

telegrafは、将来的にいろいろなデータソースから取り込む時用なので、今はインストールしなくて良い。 chronografはinfluxDBのUIなので、今回の用途ではあまり必要ないかもしれないが、UIはあった方が良いかと思いインストール。

influxDBの起動停止

[起動]
$ sudo systemctl start influxdb.service
[停止]
$ sudo systemctl stop influxdb.service

InfluxDB起動状態の確認

$ systemctl status influxdb

4.2. PythonからBLE(Bluetooth Low Energy)を利用できるように設定

OMRONのサンプルスクリプトは、PythonからBLE(bluez)にアクセスするモジュールとして、python-bluezを利用するので、まずはそれを入れておきます。

$ sudo apt-get install -y python-bluez

Omronのサンプルコード実行のためには、GET REQEUST送信用のライブラリであるRequestsモジュールも必要なので入れておきます。

$ sudo pip install requests --upgrade

ついでにinfluxdb関連のモジュールもインストールしておきます。

$ sudo pip install influxdb
$ sudo pip install --upgrade influxdb

4.3 環境センサー(WxBeacon2)をBroadcastモードに変更

WxBeacon2は購入した状態では、スマホとconnectしてからセンサーデータを取得するモードになっています。 このままではOMRONのサンプルスクリプトは使えません。 OMRONのサンプルスクリプトは、WxBeacon2から周りにまき散らしているアドバタイジングメッセージにセンサーデータも含めた状態を想定しているからです。 OMRON曰くの正式名称は、Without Data RecoedingモードのGeneral Broadcaster 2というBeacon Modeです。

さて、この切り替えはWxBeacon2にBLE(Bluetooth Low Energy)で接続して行います。 まず、スマホにBLE Scanner: Read,Write, Notify (Android, たぶんBLE Scanner 4.0と同じもの)を導入します。 ここではAndroidを使っていますが、iOSにも同様のものがあるはずです。 このアプリを立ち上げるとBLEデバイスを探しに行きます。

左の画面の一番下「Env」が今回設定を変更しようとしているWxBeacon2です。 Bluetoothのデバイスアドレスで確認した上で、「CONNECT」をタップします。
マニュアルによるとアドバタイズの設定(ADV Setting)のUUIDは、0x3042なので、「CUSTOM SERVICE - C4C3040-7700-......」をタップすると、右画面の様に「UUID: C4C3042-7700-....」展開されます。
f:id:maky_Ba:20190801200829p:plain:w250 f:id:maky_Ba:20190801200848p:plain:w250

横にある丸い「R」ボタンをタップするとADV Settingに現在書き込まれている値が表示されます(左画面)。初期値は、0x 0808 A000 0A00 3200 08 00 (スペースは読みやすさのために入れました)です。後ろから2ブロック目の「08」がBeacon Modeで、08 = Event Beaconとなっています。ここを04 = General Broadcaster 2に書き換えます。
丸い「W」ボタンを押すと書き込み画面がポップアップするので、「Byte Array」にした上で、 0808 A000 0A00 3200 04 00  (スペースは読みやすさのために入れましたので入力しないでください)を設定します(右画面)。
f:id:maky_Ba:20190801202418p:plain:w250 f:id:maky_Ba:20190801202437p:plain:w250

「Env」だったデバイスが「EP」に変わっていれば、設定変更は成功です。
f:id:maky_Ba:20190801203245p:plain:w250

4.4. OMRONサンプルスクリプト入手

本命のOMRON社(の公式かは不明ですが)のサンプルスクリプト(Python)の入手です。

$ cd ~pi
$ git clone https://github.com/OmronMicroDevices/envsensor-observer-py omron

~piディレクトにomronというディレクトリが出来ていたらOK。

展開したサンプルスクリプトディレクトに移って、中核となるPythonのコードに実行権限を付与する。

$ cd /home/pi/omron/envsensor-observer-py/
$ chmod +x envsensor_observer.py

5. Omronサンプルコードの設定と利用

5.1. conf.pyの設定(influxDBの設定)

サンプルスクリプトディレクトリにあるconf.pyが設定ファイル。

(前略)
# uploading data to the cloud (required influxDB 0.9 or higher)
INFLUXDB_OUTPUT = True
# InfluxDB
INFLUXDB_ADDRESS = "localhost"     # enter IP address of influxDB
INFLUXDB_PORT = 8086               # enter port number of influxDB
INFLUXDB_DATABASE = "weather"      # enter influxDB database name
INFLUXDB_MEASUREMENT = "wxbeacon2"   # enter measurement name
INFLUXDB_USER = "root"             # enter influxDB username
INFLUXDB_PASSWORD = "root"         # enter influxDB user password

5.2 envsensor_observer.pyの自動起動設定

/etc/systemd/systemに、自動起動の為のサービス設定ファイルenvsensor_observer.serviceを作る。

$ sudo nano /etc/systemd/system/envsensor_observer.service
[Unit]
Description = OMRON sensor observer
After = influxdb.service

[Service]
ExecStart= /home/pi/omron/envsensor-observer-py/envsensor_observer.py
Restart = always
Type = simple

[Install]
WantedBy=multi-user.target

Raspberry Pi Zeroの起動時に自動起動するように設定。

$ sudo systemctl enable envsensor_observer.service

5.3. 環境センサーデータ取得スクリプトの稼働を確認

環境センサーデータ取得スクリプト(envsensor_observer.py)の稼働を確認する。

$ influx -precision rfc3339       # rfc3339は日付がUTCで読める御呪い
Connected to http://localhost:8086 version 1.7.7
InfluxDB shell version: 1.7.7
> show databases        # 環境センサー用のデータベースが出来ているか確認
name: databases
name
----
telegraf
_internal
weather          # これが環境センサー用のDB
> use weather    # weatherのデータを読めるようにする
Using database weather
> select time, bt_address, temperature, humidity from wxbeacon2 where time > ‘2019-09-09T12:00:00Z’ 
time                           bt_address   temperature  humidity
----                           ----------   ---------    --------
2019-09-09T13:03:12.819828025Z C8F66C158490 27.63        59.06
....
> quit

設置した環境センサーのBluetoothアドレス(bt_address)と気温(heat temperature)・湿度(humidity)が記録されていれば、スクリプトは順調に動いていると言えるでしょう。

6. つづく

これで環境センサーデータ収集サーバ側は完了で、センサーデータはこのサーバに蓄積されてゆきます。つぎは、このサーバとHome Assistantを繋ぎます。

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

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

*1:ウェザーニーズ社的には、WxBeacon2は観測ポイントでの交換が主だと思う。一方で観測点も増やしたい、という目論見から販売もしている(申し訳ないが、私は何個買っても観測点増加には貢献出来ていません。そのうち売ってくれなくなるかな…)。

*2:6つの要素以外に、「温度」と「湿度」から「熱中症警戒度」「不快指数」を計算してくれて、これらもデータとして取得可能です

*3:加速度センサーは地震の測定に使う、ってオムロンのサイトに書かれていました。ううむ、それはそれで惹かれる…でも常時監視してないとダメか。

【Nabaztag】うさぎ復活計画(その1)

スマートうさぎ、入手しました! f:id:maky_Ba:20190908005422j:plain 手に入れたNabaztagは、第2世代機("The second first wireless rabbit"だそうです)Nabaztag:tagです。おへそにマイクがあるの特徴です。

スマートホームの設定も終わっていないのに、何をやっているのか…

1. まえがき

2005年にフランスで生まれ、2009年頃に日本に上陸したウサギ型コネクティッドデバイスNabaztag(ナバズタグ)。いまなら「ウサギ型スマートスピーカー」といったものでしょうか。 基本的にネットワーク越しにサーバに接続して様々なこと(天気をしゃべらせる、メッセージを読むなどなど)をさせるデバイスでした。 ピーターラビットミッフィーでウサギ好きに育った私としては、その可愛らしい姿は「是非飼い主になりたい!」と思わせるものでした。
が、しかし、ボーっと見ているうちに、

  • 2009年(日本で発売された年だったと思う)年末には、製造元のフランスViolet社が倒産、Mindscape社が買収。
  • 2011年にMindscape社は後継機Karotzを発売すると、ほどなくしてNabaztagのサポートを終了。
  • ところが同年(2011)、Mindscape社は、Aldebaran Robotics社に買収される!
  • でAldebaranは2年ほどKarotsにお付き合いするが、2014年には "nearly 10 years after its first appearance, Karotz is facing a very strong technological competition: the connected devices are now 4G, mobile and evolutionary. Karotz and its users have not only helped establish connected devices; they have paved the way. New products make a stronger match to market needs, marking the end of Karotz's great story."(意訳:まあね、うさぎちゃんは、コネクティッド・デバイスの立ち上げには大貢献したけど、今やモバイルなんだよね。もっと良いのが出てきているよね)というお言葉で、Aldebaran Robotics社はサービスの終了を宣言。
  • 以来、うさぎ(Nabaztag、Karots)は、正式にはネットから切り離され、お亡くなりになりました

という不遇な人生(兎生?)をばく進。
さすがに置物を買うのは寂しいので、さらにしばらく静観することに。

しばらくすると、当然、代替のサーバサービスを考える人や、スタンドアロンで動かせるようにする人、中身を入れ替えて改造人間ならぬ改造うさぎロボ(?)にする人など出てきました。特にRaspberry Piを使った改造は心惹かれるところ大。スマートホームと組み合わせられるのでは!?
よし、やはり頑張って入手しないと。しかしながら、中古でしか手に入らない状況なので、丹念にオークションやらフリマやらを根気よく覗いて見続けました。 そして前述のとおり、今年になって、やっと確保しました。

2. Nabaztagの復活の方法を調査

うさぎを復活させる方法は世界中のいろいろな方々がチャレンジしております。すでに挫折の末(?)消え去っているものもありますが、現存するものを調査しました。

2.1 サーバ側を何とかする方式

まずはViolet社やMindscape社のサーバが使えなくなったのなら、代わりのサーバを準備すればいいじゃん、と考えるのはいたく自然。どうやら一時的にサーバ側を含めたSourceコードが公開されてたようで、それを活用してViolet社やMindscape社が提供してたサービスを有志で提供できるようにする、という活動をしていた人々がいます。

2.2. うさぎのfirmwareを入れて替えて何とかする方式

次が、サーバが使えないなら、サーバなしでうさぎが動くようにすればいいではないか!という派閥。

  • ServerlessNabaztag
    github.com andreax79さんによるサーバ不要のNabaztag用のfirmwareです。firmwareとmp3をうさぎにアップロードするためにWebサーバは必要だが、一旦アップロードされればその後はサーバは不要に。

  • Home Assistant Nabaztag
    community.home-assistant.io 上のServerless化したうさぎを使って、Home Assistantからうさぎを操作できるようにしたもの。これは興味深い。

2.3. 改造してしまいましょう方式

最後は、「見た目が可愛い」「耳が動くの好き」「おなかがほんのり光るのイイ」「でも別に今までのサービスにあまり思い入れが無い」という人たち。彼らは、ガワだけ使って中身(主に制御装置部分)を入れ替えて改造うさぎに手を出しています。

3. まずは動くところを見てみたい

正規のViolet社のサーバに繋いで動いているところを生で見たことがないので、とりあえず動作するうさぎをみたい。

3.1.うさぎをWifiに接続する

ここLife with a Rabbit : brief quick-star t guide - RobotShopに、接続の取説がありますが、結構このハードルが高いようす。 。
WPA対応だけどWPA2には時期的に対応していなさそうだし、家のスマートホーム用の無線ルーターではどうやってもダメ。 とりあえず、セキュリティの事は忘れて、繋いでみたい。ということで、家で余っているルーターを探しました。
ということで、家探しして、下記に記事でも触れている海外出張セットに入れてあった「ちびファイ」を掘り出しました。2012年かぁ。まあうさぎの年齢に近いので相性はよさそう。 maky-ba.hatenablog.com

セキュリティを全く考えていないap-game-xxxxというSSIDがプリセットにあったので、それを使用してみました。

  1. Make your Rabbit blue (あなたのうさぎを青くする)
    うさぎの頭を押さえながら電源を入れる(底のプラグを差し込むか、コンセント側を差し込むかする)。LED(おなかの横一列の3個と鼻の1個の計4個)がすべて青色になったらボタンから手を放す
  2. Connect to your Nabaztag:tag(ナバズタグに繋げる)
    PCの無線LAN設定を開くと「NabaztagXX」というSSIDのネットワークが見つかるので接続する
  3. Access your Rabbit’s configuration page(うさぎ設定画面に入る)
    PCのブラウザで「http://192.168.0.1」を開き、Nabaztagの設定に入る
  4. Modify your Nabaztag:tag’s connection parameters(ナバズタグの接続パラメータを変更する)
    設定画面ではドロップダウンリストからap-game-xxxxというSSIDを選び、No encryptionとする。Advanced Configurationに移ってDHCPをYesとして、「Update and Start」をクリックする。
    一旦すべてのLEDがオレンジになって、おなかの左側から順に全部緑に変われば問題なし。(お鼻のLEDはサーバ設定を変更していないので、無視)

ちなみにStep.1で電源を頻繁にオンオフすることになるので、百均でスイッチ付きコンセントを買ってきた。
f:id:maky_Ba:20190908190625j:plain:w250
片手でボタンを押しながら、もう一方の片手で底のプラグとかコンセントのプラグを挿すとかは結構難しかったので、これはとっても便利な一品。しかも安い…

3.2.うさぎをopenJabNabに繋ぐ

下記の手順で一応うさぎが動いているのを見ることができる。

  1. openJabNabサイトを開き、Sign Upする。ユーザ名とパスワードを設定すればとりあえずは大丈夫
  2. 4.1.でやったとおり再度うさぎの設定画面を開く。Advanced configurationの下の方の「Violet Platform」に「openjabnab.fr/vl」を設定する
  3. openJabNabのサイトにログインしてうさぎのシリアル#(=Wifi MACアドレス)を指定して登録
  4. plug-inを登録すれば機能が使えるようになる

ただし、「時刻」(ボタンを押すと現在時刻を日本語以外(例えば英語)で話す)、 「ムード」(小話的な会話の断片を日本語で話す)、 「太極拳」(時々、耳をぐりぐり動かして、腹のLEDをピカピカさせる)、 「呼吸のLEDの色変更」(まあそのまま、本体の下面にあってほんわか点滅しているLEDの色を変える) といったplug-inを動かしてみたが、 それ以外のplug-inの動きはイマイチわからない。

とりあえず、うさぎが動く姿を見ることができた。次は、Serverless Nabaztagに挑戦して、Home Assistantから操作してみたい。

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

1. まえがき

 前回スマートホームの核となるホームオートメーションサーバHome Assistantの導入はできたので、次は家の状況を把握するセンサーを設定します。 いろいろなセンサーがありますが、今回は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を使う準備

  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起動後の初期設定

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がリリースされそうですが。

【Home Assistant (Hass.io)でホームオートメーション】2. Home Assistant初期設定

 前回でおうちサーバであるHome AssistantをRaspberry Piに導入するところまではいきました。 基本的なところを設定して、Home Assistantがとりあえずちゃんと動くところまで設定を続けましょう。

前回の記事はこちら。 maky-ba.hatenablog.com

1. 前提

下記のバージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

  • ホームオートメーションサーバ(ソフト): Home Assistant 0.95
    (0.96でも違いなし。画面デザインは少し変わりましたが)
  • ホームオートメーションサーバ(ハード): Raspberry Pi 3 Model B+

2. Add-Onの導入

いろいろな便利な機能をAdd-On(アドオン)として組み込み可能。そのなかでもOfficial Add-Onから幾つかインストールします。 左側のメニューの[Hass.io] を選び、[ADD-ON STORE]タブに進みます。下記のようなアドオン一覧がでるので、クリックして出てきた画面でインストールします。

f:id:maky_Ba:20190715172931p:plain

  • Check Home Assistant configuration
    新しいバージョンになった時に設定ファイルに互換性があるかどうかのチェック用、と言っていますが上手く動かせた事がありません。まあ、期待を込めてインストールしています。きっとそのうち使えるはず。

  • Configurator
    設定ファイル(configuration.yaml等)をHomeAssistant上/ブラウザ上で編集できる優れもの。 これがきちんと動かなかった頃は、sambaでフォルダ共有してwindowsで編集して戻すとか sshでリモート接続(Windows Subsystem for Linuxを活用)してリモートでファイル編集する、とか結構面倒でした。

  • Duck DNS
    Dynamic DNSの一つであるDuckDNSを使うためのアドオン。外からアクセスするために利用。 プロバイダ(光プロバイダ等)からグローバルIPをもらっていない場合(大半がそうだと思います)に、プロバイダから割り当てられたIPが変わっても上手いこと接続できるように名前で接続できるようにする仕組みがDynamic DNSです。

Community Hass.io Add-onsからもひとつインストールしましょう。

  • SSH & Web Terminal
    sshでセキュアに別のPCからHass.ioに接続したり、セキュアなFTPでファイルをやり取りしたりできるsshサーバ機能とweb版のTerminal画面のアドオン。Configuratorが使えるようになったので、あまり出番はありませんが、やはり基本としてリモートでHass.ioに接続できるようしておくと色々と安心です。

(1) Check Home Assistant configuration

(いまのところ、自分自身上手く使えていないので、省略)

(2) Configurator

インストールして、スタートすれば使えるようになります。[Show in sidebar]トグルをオンにすると、左側のメニュー(サイドバー)に、Configuratorという項目が追加されます。 Configuratorを起動し、ブルーのバーの左端にあるフォルダをクリックすると編集するファイルが選べます。 f:id:maky_Ba:20190715180956j:plain

(3) DuckDNS

外からHome Assistantにアクセスするためには、1) IPではなく名前でアクセスできる事(Dynamic DNS)、2) httpsでセキュアに接続できる事、が欠かせません。DuckDNSアドオンではこの両方(正確には 2)はLet's Encryptの機能ですが、このアドオンの裏側で使えるようになるので知らなくて良いハズ)が実現できます。

Home Assistantの正式の情報は下記。 www.home-assistant.io 上のとおりやればよいのですが、設定の仕方、コツをメモしておきます。

1) ルーターの外側(INTERNET側/WAN側)のIPの確認
通常のプロバイダ契約では一時的(といってもかなり長い間同じIPが割り当たりますが)に割り当てられたインターネット上のあなたのIPを知っておく必要があります。
下記のサイトにアクセスするとあなたの外向きのIPを知ることができます。

www.cman.jp

2) DuckDNSの登録
下記サイトを開いてTwitter/GitHub/reddit/Googleのいずれかのアカウントを用いてログインし、下記を設定/取得する。

www.duckdns.org

  • domain (ex. maky-home)
  • token (ex. 8f68773c-xxxx-xxxx-xxxx-xxxxxxxxxxxx)
  • ip (あなたのルーターの外側(INTERNET側/WAN側)のIP。これは後でDuckDNSにて自動的に更新される)

これで外部から<あなたのドメイン>.duckdns.orgで、あなたのルーターまでアクセスすることができるようになりました。

3) DuckDNSアドオンの設定
[Hass.io] - [Dashboard] - [ DuckDNS]と進み、アドオン画面を開き、Configの欄に先ほどのtoken、domainを設定する。

{
  "lets_encrypt": {
    "accept_terms": true,
    "certfile": "fullchain.pem",
    "keyfile": "privkey.pem"
  },
  "token": "<あなたのtoken>",
  "domains": [
    "<あなたのdomain>.duckdns.org"
  ],
  "seconds": 300
}

先ほどのConfiguratorを早速使って、configuration.yamlファイルのhttp:の項に下記を記述。

http:
  base_url: https://<あなたのdomain>.duckdns.org
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

4) ルーターの設定
外からhttps:// で呼ばれたら(細かく言うとport 443で呼ばれたら)、ルーターの内側にいるHome Assistantサーバのport 8123へと繋いであげる必要があります。 これはルーター毎に異なるので、詳しくは自分のルーターの取扱説明書を見ていただきたいのですが、私のBuffaloのAirstationでは、[ゲーム&アプリ]タブの中の[ポート変換]で設定できます。 「ポート変換の新規追加」画面で設定すればうまく動きました。

  1. グループ: 既存のグループでよいでしょう。無ければ新規追加。
  2. Internet側IPアドレス:「エアステーションのInternet側アドレス」
  3. プロトコル: TCP/UDP、「HTTPS(TCPポート443)」
  4. LAN側IPアドレス:<あなたのHome AssistantサーバのIP>
  5. LAN側ポート: 8123

5) DuckDNSアドオンのスタート
再び[Hass.io] - [Dashboard] - [ DuckDNS]と進み、アドオン画面を開きをスタートさせる。 この時、結構時間がかかるが、下の方のLOGを見ておき、Errorとか出ていないか眺めておく。 ここでじっと待つのが肝、のような気がする。ここで焦ってカチャカチャ操作するとうまくLet's Encryptとかが登録されない。 順調に行けば、Let's Encrypt とかの設定も、DuckDNSへのルータIPの設定等も行われるはず。

(4) SSH & Web Terminal

これもインストールして、Config記述すれば動きます。 Config記述するためにssh authorized keyが必要になります。 Windowsですと、WSLの中でssh-keygenコマンドを使うとか、GitをインストールしてC:\Program Files (x86)にあるssh-keygenコマンドを使うなどして、keyを生成する手があります。

3. Configuration.yamlの記述

Configuration.yamlは、Home Assistantの中核設定ファイル(まあConfigurationというだけはあります)です。 他には、複数の処理をまとめて実行するためのAutomation.yamlやScript.yamlがありますが、このあたりは段々とWeb UIで設定できるようになってきています。

が、しかしConfiguration.yamlだけはゴリゴリ書かなければなりません。 たとえエディタがWeb UI(Configurator Add-On)になったとしても、何か新しい機器をHome Assistantに追加しようと思えば、ごりごりyaml形式の記述をする必要があります。

試しに何かの情報をHome AssistantのStatus画面(状態画面)に表示できるようにしてみましょう。 測定機器類は無くても、サーバ(Raspberry Pi)はあるはずですので、そのサーバのCPUの温度を測ってみましょう。 configディレクトリの下にあるconfiguration.yamlに以下の記述を追加する。

sensor:
  - platform: command_line
    name: CPU Temperature
    command: "cat /sys/class/thermal/thermal_zone0/temp"
    unit_of_measurement: "°C"
    value_template: '{{ value | multiply(0.001) | round(1) }}'
  • sensor: センサー型のエンティティであることの宣言
  • platform: 「command_line」コマンドラインで呼び出したコマンドの返す値を使うセンサー
  • name: このエンティティの名前
  • command: このエンティティの本体。Linuxのコマンドを記述する。
  • unit_of_measurement: 表示される単位
  • value_template: 表示するときの値の整形を設定。/sys/class/thermal/thermal_zone0/temp には温度は1000倍で記録されているので、0.001で掛けて(=1000で割って)、小数点以下1桁目で丸める。

これでHome Assistantは、Raspberry PiのCPU温度を粛々と記録し続けるようになっているはずです。

4. UIの設定

UIは、以前は.yamlファイルをゴリゴリ記述しなければならなかったのですが、最近は「Lovelace UI」というのがまともに動くようになって、UIでUIを設定できるようになりました。 (ラブレス、は詩人でしょうか、どんな意味が…) 左のメニュー(サイドバー)から[状態]を選び、その中の右端のベルマークの右の縦三つ点から[Configure UI]をクリック。 編集画面の右下のオレンジプラスマークからCard Configureでカードタイプを選んで編集。 f:id:maky_Ba:20190726222101j:plain 25種類のカードタイプが選べる。 ここでは「Entities」を選んで編集している。
f:id:maky_Ba:20190726215601j:plain 設定を進めるとカード編集(Card Configuration)画面の右側(もしくは下側)にプレビューされる。

  • Title: カードの左上に表示されるタイトル
  • Theme: (正直まだよくわからない)
  • Show Header Toggle?: エンティティがトグルの時、カード全体を一括してOn/Offするトグルを表示するか否かの設定。
  • Entiies: 使えるエンティティがドロップダウンで表示されるので選んで追加してゆく。
  • TOGGLE EDITOR: Card Configurationを旧来のファイル型で編集するモード
  • キャンセル/SAVE: カード編集結果を保存するか否か。

次に先ほど設定したCPU温度も表示させよう。これはカードタイプとして「GAUGE」(ゲージ)を使ってみる。
f:id:maky_Ba:20190726221100j:plain

  • Name: 円弧型のゲージの中心部分に表示される値の名前。設定しなければデフォルト=エンティティの名前が表示される。
  • エンティティ: 表示するエンティティ。ドロップダウンリストで選ぶ
  • Unit: 単位。設定しなければ、エンティティで設定されているもの(unit_of_measurementで設定したもの)が表示される。
  • Theme: (正直まだよくわからない)
  • Minimum: 表示される最小値
  • Maximum: 表示される最大値
  • Define Severity: 緑・黄・赤で値を表現するか否かのトグル

最終的には、こんな感じに。
f:id:maky_Ba:20190726221809j:plain 前回では上の方に丸で記述されているものや、独自に設定したものをカードに表示するように出来た。 らくちん。

6. おわりに

便利なアドオンの設定と、設定ファイル(Configuration.yaml)の基本的な記述方法、それからUIの設定をやってみました。 Home Assistantはバージョンが変わると結構設定の仕方が変わるのに、説明があんまり体系的でない。 英語圏の人でも「これどうやるの?」ってコミュニティで聞きまくっているので、そこん所どうにかならんかなあ。

次はついにセンサーの情報を表示するように頑張ります!

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

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

【Home Assistant (Hass.io)でホームオートメーション】1. Raspberry PiにHome Assistant導入

再起動、って言ってから早何か月だ?!…ゆるゆると進めてゆきます

0. まえがき の まえがき

 2017年後半にGoogle Homeが日本で発売されました。 デジモノ、コモノ好きの私は当然購入しました。 まあ「毎日天気予報を聞く」「忘れてしまった俳優の年齢を確認する」「忘れずに体重を記録する(※これはそのうち記事にしましょう)」という用途では役に立っており、今では計4個(Homeが2個、Home Miniが2個)が活躍中です。
 が、しかし、それだけでは何だか可哀そう。何か他に役立つことはないのかと。
 「ねぇGoogle、電気をつけて」
これだ! 当時はまだ、家をコントロールする仕組みはあまり世に出ていない様子でしたので、それならコモノ(=デジタルガジェット)を組み合わせて家をスマート化(?)してGoogle Homeと繋いで、我が家で「ねぇGoogle」してやろう!と思い立った次第。
 さて、世の中的には、クラウドサービスを活用してスマートホーム化する流れだと思うのですが、私は残念ながら、古い世代で自分の情報は極力身近に置いておきたい派なのです。ありていに言ってしまうと、クラウドサービスの継続性をまったく信用していないのです。きっとそのうちサービスされなくなって、おうちのコントロールが出来なくなっちゃったりするのです。*1
で、いろいろ調べるとHome Assistantというオープンソースシステムで、家庭内ホームオートメーションサーバが簡単に作れそうということで、Home Assistantを中心に頑張ってスマートホームを目指してみることに。現在も奮闘中。

1. まえがき

 スマートホームのガジェット(学習赤外線リモコン、スマートコンセント等)は、基本的にはその会社のクラウドサービスやアプリと組み合わせて使うことが前提となっています。ただ、最近はAlexaとかGoogleHomeとかと連携できるものが多いので、それを核にしてスマートホームを満喫することも可能です。それでも、アプリからの操作などはやはり個別のままだったりします。


 Home Assistantは、様々なメーカーのいろいろな製品を直接操作(クラウド経由での操作もありますが)する統一的ホームオートメーションを実現する「おうちサーバ」のオープンソースソフトウェアです。ここ1年半でバージョンも0.6台から0.9台への着実に進歩しておりますし、しばらくは活発に活動するのではないかと思います。まあ、コミュニティは英語中心であまり日本語での紹介が無いのが玉に瑕ですが…  まずは、Home Assistantを導入して、センサーやスイッチなどを順番に繋いでゆきます。

2. 前提

下記のバージョンを前提とした手順です。 (最新版では動かないこともあるかもしれませんが、私が使っている限り、備忘録を兼ねて最新化してゆきたいとは思っています)

  • ホームオートメーションサーバ(ソフト): Home Assistant 0.95
    (0.96でも同様。少し画面デザインが変わりましたが)
  • ホームオートメーションサーバ(ハード): Raspberry Pi 3 Model B+

3. 準備

さてまずは本命のホームオートメーションサーバの準備を進めてゆきましょうか。

f:id:maky_Ba:20190713222847j:plain:w150:left サーバ(ハード)
Raspberry Pi 3 Model B+

私はマルツで購入しましたが、あっちこっちで買えますね。

f:id:maky_Ba:20190713231122j:plain:w150:left ケース
サーバ用途なので、一応ファン付きのものを。 「Smraza Raspberry Pi 3B+ ケース」と次で紹介する「スイッチ付ACアダプタ」のセットを使っています。

f:id:maky_Ba:20190714213311j:plain:w150:left ACアダプタ 2.5A USB Micro-Bコネクタ出力
RaspberryPi3が2.5A必要なので流用は難しいですね。 それから、Raspberry Piは電源スイッチが無くUSBケーブルの抜き差しが電源スイッチがわりなのですが、これはスイッチ付きUSBケーブルです。便利。

f:id:maky_Ba:20190714213355j:plain:w150:left SDカード (microSD 64GB)
32GB推奨だが、FAT32でフォーマットされている必要あり。 Windows10では64GB SDはFAT32フォーマットできない(そもそも64GBをFAT32にするのは規格外)ので、なんらかのツールを使う必要があります。 アクセス速度より常時起動を考慮して、高耐性のMLCタイプのSDカードを使っています。

f:id:maky_Ba:20190714212255j:plain:w150:left サーバ(ソフト)
Home Assistant

https://www.home-assistant.io/getting-started/

それ以外に必要なもの: インターネット接続(無くてもおうちサーバは立てられますが、そもそもインストールが大変…)、 無線LANルーター(ホームオートメーション専用に1台古いのを準備。無線LANと有線LANが両方あるとよし)、 LANケーブル(必要なだけ)、 PC(Windows/MAC/Linux)(microSDにHome Assistantを書き込むのに使用)、 PC/タブレット/スマホ(Home Assistantをブラウザ越しに設定するのに使用)、 ぐらいでしょう。

4. さあHome Assistant(Hass.io)を導入するぞ

Home Assistantが、オープンソースのサーバソフトだという事は言及しましたが、ではタイトルにある「Hass.io」というのは何か。まあ、難しいことを省くと、インストールと管理が便利な「一塊になったHome Assistant」のこと、とでも覚えておけば問題ない。 基本的には、Install Home Assistantに従ってインストールを進めれば良い。下記のその手順。

(1) ソフトウェア(Hass.io)のダウンロード

Installing Hass.ioのページから該当するハードウェアのzipファイルをダウンロードする。今回はRasPi3B+なので『Raspberry Pi 3 Model B and B+ 32bit (recommended)』をダウンロードする。

(2) SDカードに書き込む

Windows/Mac/Linux用のSD書き込みソフトEtcherをインストールする。FAT32でフォーマットされた32GB以上のSDカードをパソコンに挿入して、Etcherを起動し、下記のステップで書き込む。

  1. Select image: (1)でダウンロードしたzipファイルを指定
  2. Select drive: SDカードのドライブ(決してシステムドライブとかと間違えないこと)
  3. Flash!: これで書き込み開始

(3) Raspberry Piの固定IP化

Raspberry Pi側で固定IPに出来るはずですが、設定が面倒なので、ルーターDHCPでのIPの割り当て時に固定IPを割り当てるようにする。

1) IP確認の準備
今回準備したルーター(インターネット接続までは準備を完了していること)に接続したスマホタブレットに、Fing(iPhone/Android)をインストール。このアプリで同一ネットワーク内のマシンのIPやMACアドレスがわかるようになる。
2) Raspberry Piの起動
MicroSDカードを挿入し、LANケーブル(準備したルーターに繋いだもの)を接続し、最後に電源(USBケーブル)を接続する。しばらく激しくLEDが点滅するので傍観する。
3) IPアドレスMACアドレスの確認
LEDの点滅が落ち着いたら(本当はHass.ioのネットワーク初期設定が完了したら、だが外からはよくわからない)、Fingを起動し準備したルーターを選択。Bonjour名:hassio、MAC販売元:Raspberry Piというデバイスがあるはず(なければもう少し待つ)なので、そのIPアドレスMACアドレスをメモる。(例:IPアドレス=192.168.1.3、MACアドレス=B8:27:EB:xx:xx:xx)
4) ルーターDHCP設定
ルータ毎にDHCPでの振り出しIPの固定化手順は違うと思うが、私が使っているBuffaloのルーターでは、「Internet/LAN」→「DHCP リース」で、3)で調べたMACアドレスを「手動割当」に変更できる。(例えば、192.168.1.30に設定(固定)する)
5) Home Assistantの画面にアクセス
先ほどFingを実行したスマホ/タブレットのブラウザからhttp://(Raspberry PiIPアドレス):8123にアクセスする。Name/Username/Passwordを設定しろと言われるので、設定する。UsernameとPasswordは、このHass.io(Raspberry Pi)にアクセスするときに使うので忘れないように。 左上のメニューから設定(歯車のマーク)を選び、「一般」→「サーバー管理」「再起動」とすすむ。
6) IP固定化の確認
Raspberry PiのLEDのチカチカ(Hass.ioの起動中)が落ち着いたら、再びFingでhassioデバイスIPアドレスを確認する。

(4) Home Assistantの起動確認

さきほど既に、Home Assitant画面にアクセスしてますが、固定IP化したアドレスhttp://<Raspberry PiのIPアドレス>:8123 でHome Assistantの画面を開く。何も設定していないので、さみしい画面が表示されるはずです。

f:id:maky_Ba:20190715165138p:plain
Hass.io初期画面

5. おわりに

 ここまででRaspberry PiにHome Assistantを導入出来ました。まあこれだけだと何もできない(天気がわかるぐらい)ので、これから順にスマートホームバイスをつないでいきます。
 入力側の環境センサーで気温とかを測りたいところですが、次は、まずはHome Assistantをとりあえず使えるように初期設定しましょう。

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

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

*1:ほらね、という訳ではないのですが、「マウスのスマートホーム販売終了、クラウドサービスは2022年まで - 家電 Watch」というニュースが。継続して売れ続けないとクラウドが維持されなくなっちゃう…

コモノポリタン再開

2019年あけましておめでとうございます。

前回は2013年の10月、気が付いたら、何年もたっていました。浦島太郎か。

書きかけの記事も沢山…なのに、はてなダイアリーは今春で終了とか…
いやはや月日の経つのは早いです。

わが身も、海外で働いたり、戻ってきてすっかりドメスティックな仕事になったりと、いろいろありました。

いろいろ変わったこと

仕事はさておき、身の回りも色々変わりました。

他にも色々変わったなぁ。ドキュメントスキャナは微妙にCanon DR-C225Wになったし、プリンタは永らくHPだったのにbrotherのDCP-J973N(フラッドヘッドスキャナがついててコピーが取れることが基準)に、外付けHDDは、NAS(Synology DS218+ とバックアップ用のHDD)に等々。

あ、コモノ的には(特に金銭面で)禁断のゴルフを始めましたよ。GarminのApproach S6J ⇒ Approach S60を購入したり、TruSwing J、Approach CT10に手を出したり。

 

最近の興味は、一昨年に購入したGoogle Home/Miniに始まる「おうちスマート化」ですね。

 

 まあ、ぼちぼち再開してゆきますか。