Edited at

メモ:Home Assistant + Raspberry Pi + センサー でホームオートメーションしたい #1

More than 1 year has passed since last update.


Home Assistantとは

https://home-assistant.io/

Pythonで作られた、オープンソースのホームオートメーションプラットホーム。この分野では、OpenHABというものもあるようだ。

「コンポーネント」と呼ばれる機能を自由に組み合わせて、各コンポーネントが対応するデバイスの制御や自動化を行うことができる。また、Webページに状態を表示し、そこから制御することもできる。

対応するコンポーネントには、電動シャッターなど国内では入手できなさそうなIoT機器もあるが、


  • IFTTT

  • Twitter

  • PushBullet

  • Philips Hue

  • Raspberry PiのGPIO入出力


  • Firmata(汎用入出力制御プロトコル)ファームウェアを搭載したArduino

  • MQTTを介した入出力

  • HTTPを介した入出力

  • iTunesやGoogle Cast、MPDといったネットワークメディアプレイヤーのデバイス発見と、再生・停止等

  • Slack

などをサポートしている、とある。

またコマンドライン標準出力からのデータ取得(Command line sensor等)や、コマンドラインからの制御(Command line switch等)、もしくはPythonを使ったカスタムコンポーネントの作成をサポートしているそうなので、この手のものに慣れた人達なら困らないだろう。


インストール

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

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_demo_mode.png

デモ画面、ちょっと盛り過ぎのような気もするんですけど。


設定

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

起動したユーザーのホームディレクトリに.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

で、表示はこんな感じに。

homeassistant.png

設定したコンポーネントをクリックすると、グラフなどの詳細が表示される。

homeassistant_humidity.png


今後の目標


  • その他のコンポーネントのお試し

  • 取得したデータを用いたオートメーションの設定

  • IFTTTを経由した各種Webサービスとの連携

  • カスタムコンポーネントの作成

  • 遠隔センサからのデータ取得