Home Assistantとは
Pythonで作られた、オープンソースのホームオートメーションプラットホーム。この分野では、OpenHABというものもあるようだ。
「コンポーネント」と呼ばれる機能を自由に組み合わせて、各コンポーネントが対応するデバイスの制御や自動化を行うことができる。また、Webページに状態を表示し、そこから制御することもできる。
対応するコンポーネントには、電動シャッターなど国内では入手できなさそうなIoT機器もあるが、
- IFTTT
- PushBullet
- Philips Hue
- Raspberry PiのGPIO入出力
- Firmata(汎用入出力制御プロトコル)ファームウェアを搭載したArduino
- MQTTを介した入出力
- HTTPを介した入出力
- iTunesやGoogle Cast、MPDといったネットワークメディアプレイヤーのデバイス発見と、再生・停止等
- Slack
などをサポートしている、とある。
またコマンドライン標準出力からのデータ取得(Command line sensor等)や、コマンドラインからの制御(Command line switch等)、もしくはPythonを使ったカスタムコンポーネントの作成をサポートしているそうなので、この手のものに慣れた人達なら困らないだろう。
インストール
Raspberry PiはRaspbian Jessieであることが条件。PyPIからのインストールで完了する。
https://home-assistant.io/getting-started/installation-raspberry-pi/
初回起動時に、コンポーネントが要求するPythonのモジュールを自動的に取得したり、IPアドレスから現在地を取得(Sun(日の出/日の入り)コンポーネントなどで使用される)したりする。
自動起動させたい場合は、Launch Home Assistant on Bootを参考にする。Raspbian Jessieの場合はSystemdの方法で設定する。
デモモードで起動したい場合は、
$ hass --demo-mode
で起動する。
起動後、http://(IPアドレス):8123にアクセスすると、制御用Webページにアクセスできる。また、起動時に--open-gui
オプションを付けると、起動後に自動的にブラウザを開いてくれる。
Androidのマテリアルデザインのような感じで、実際スマホのブラウザ画面からも操作できる。
デモ画面、ちょっと盛り過ぎのような気もするんですけど。
設定
起動したユーザーのホームディレクトリに.homeassistant
ディレクトリが作成され、中にconfiguration.yaml
ファイルが作成される。
設定はYAMLで記述する。初回起動時にIPアドレスから取得された現在地情報からタイムゾーンなどが設定済みだが、変更もできる。
詳細については上記Configurationのページ、および各コンポーネントの詳細ページを確認のこと。
設定を変更したら、http://(IPアドレス):8123にアクセスしサイドパネルの"Configuration"をクリック。[Configuration.yaml]-[CHECK CONFIG]ボタンを押し、設定記述の確認処理を行う。
問題が出なければ、[RELOAD CORE]をクリックすることで設定が反映される。
初期設定項目
homeassistant:
# Name of the location where Home Assistant is running
name: Home
# C for Celcius, F for Fahrenheit
temperature_unit: C
# Pick yours from here: http://en.wikipedia.org/wiki/List_of_tz_database_time_zones
time_zone: Asia/Tokyo
# 緯度
latitude: [省略]
# 経度
longitude: [省略]
# ログインパスワード
http:
api_password: [省略]
# Track the sun
sun:
デバイスの登録
手持ちのBME280 (温湿度気圧センサ)と、CPU温度をCommand line sensorとして登録する。
また、CPUクロックをCPU speed sensorで取得する。
BME280からの取得については、スイッチサイエンスが公開しているPythonスクリプトを若干修正し、Force modeで動作させ、コマンドラインオプションで指定された温度、湿度、気圧の数値のみを表示するように修正して使用した。
sensor:
- platform: command_line
name: "BME280 temperature"
command: "/home/pi/sbin/bme280_sample.py -T"
unit_of_measurement: "°C"
- platform: command_line
name: "BME280 pressure"
command: "/home/pi/sbin/bme280_sample.py -P"
unit_of_measurement: "hPa"
- platform: command_line
name: "BME280 humidity"
command: "/home/pi/sbin/bme280_sample.py -H"
unit_of_measurement: "% RH"
- platform: cpuspeed
name: 'CPU speed'
- platform: command_line
name: "CPU Temperature"
command: "cat /sys/class/thermal/thermal_zone0/temp"
unit_of_measurement: "°C"
value_template: "{{ value | multiply(0.001) }}"
グループの設定
単独でコンポーネントを登録した場合は、制御用Webページ上部に丸いアイコン状の「バッジ」形式で表示される。
関連するコンポーネントをまとめてグループ設定をすることにより、制御用Webページに「カード」形式で表示できるほか、スイッチ等はまとめて制御することができるようになる…らしい。
タブグループ化させる設定もある。(view: yes)
グループにするコンポーネントは、各コンポーネントのサービス名 (entity_id)をリストで記述していく。
group:
Weather:
- sun.sun
In the room:
- sensor.bme280_temperature
- sensor.bme280_pressure
- sensor.bme280_humidity
Raspberry Pi 2:
- sensor.cpu_speed
- sensor.cpu_temperature
で、表示はこんな感じに。
設定したコンポーネントをクリックすると、グラフなどの詳細が表示される。
今後の目標
- その他のコンポーネントのお試し
- 取得したデータを用いたオートメーションの設定
- IFTTTを経由した各種Webサービスとの連携
- カスタムコンポーネントの作成
- 遠隔センサからのデータ取得