55
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

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

Last updated at Posted at 2016-03-24

Home Assistantとは

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を使ったカスタムコンポーネントの作成をサポートしているそうなので、この手のものに慣れた人達なら困らないだろう。

インストール

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

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

設定

起動したユーザーのホームディレクトリに.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サービスとの連携
  • カスタムコンポーネントの作成
  • 遠隔センサからのデータ取得
55
65
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
55
65

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?