コモノポリタン

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

【Home Assistant(Hass.io)でホームオートメーション】ルンバ 発進!

Five, Four, Three, Two, One, Roombas are GO!*1

昨年末のビックカメラの新聞広告に踊らされて、家のルンバを更新しました。今までのルンバはグルグル廻るちょっとバカっぽいルンバだった*2のですが、新型はどうだ?真っ直ぐなヤツだが、隅々まで気が回らないヤツだという噂も。

1. はじめに

f:id:maky_Ba:20191222142406j:plain:w400
(ルンバって買い換えても「変わった!」って感じにならないのですよね…)

今まではルンバ885Plus*3でした(左のやつ)。交換用フィルタや、お部屋ナビ(複数のお部屋を順番に掃除させる赤外線ゲート的なもの)2個、バーチャルウォール(入っちゃダメなところに赤外線で線引きするもの)とかおまけがいっぱいでした。赤外線リモコンがあったので、汎用赤外線リモコンで学習させてHomeAssistantから「Roomba Go!」とかは一応出来なくはない(テストはした)のですが、運用上はうまくいかなかった*4ので、Home Assistant連携は放置してました。

今回のビッグカメラの特価品はルンバ980でした(右のやつ)。同じ900番台にルンバ960という定価がちょっと安いのがあります。違いは「付属品(バーチャルウォール1個増、交換用フィルタ・エッジブラシ1個増)」「吸引力(カーペットブースト)」「稼働時間」だそうです。ううむ、あまり有難くない…バーチャルウォールって意外と使わないのです。カーペットブーストに至っては、我が家は部屋をルンバ仕様にしていて、一か所(1畳程度)を除いてカーペットが無いのです。稼働時間を気にするほど家は広くないし、バッテリー無くなったら充電して続きを掃除してくれるらしいので、まったく問題ないでしょう。ま、特価になっていたから良しとしますか。

2. Roomba 980の初期設定

2.1. 本体充電

箱からだして、充電ステーションを設置して本体を置く。3時間充電、とか書かれているが既に本体充電済みなので、すぐに満充電になって電気が消えるかもしれません。びっくりしないように(びっくりしました、私は。)。

2.2. iRobot Homeアプリ設定

まあ、アプリが無くても足で「Clean」ボタンをぽちっと押せば掃除はしてくれるのですが、まあアプリ連携推奨らしいので、設定しましょう。掃除したところをマップしてくれるって機能もあるらしいし。AppStoreもしくはGoogle Playで「iRobot Home」アプリをインストールしましょう。

アプリで家の外からでもアクセスできるようにするために、ユーザアカウントの作成を迫られます。あんまり好きではないのですが…しかたなし。
f:id:maky_Ba:20191222204233p:plain:w125 f:id:maky_Ba:20191222204325p:plain:w125 f:id:maky_Ba:20191222204347p:plain:w125 f:id:maky_Ba:20191222204824p:plain:w125

初めてルンバを接続する時は「ロボットを追加」画面がでます。 確認事項に表示される3点「充電ステーション」「ロボット」「Wi-Fi」以外に、「Bluetooth」「位置情報」が必要です。ううむ。
f:id:maky_Ba:20191222204849p:plain:w125 f:id:maky_Ba:20191222204918p:plain:w125 f:id:maky_Ba:20191222204943p:plain:w125 f:id:maky_Ba:20191222205005p:plain:w125

ルンバの名前を決めて、接続先のWi-Fiパスワードを入力(Home Assistantと同じネットワークのWi-Fi)するとルンバの起動を求められます。
あとでHome Assistantから操作するためにIPを固定化しておいた方がよいので、左から3番目の画面で「最新のネットワーク設定」をクリックし、静的IPを設定しておきます。
f:id:maky_Ba:20191222205058p:plain:w125 f:id:maky_Ba:20191222205116p:plain:w125 f:id:maky_Ba:20191222205144p:plain:w125 f:id:maky_Ba:20191222205212p:plain:w125

多分Bluetoothがちゃんと機能していれば、ルンバから「設定中です」的な音声が流れるのですが、うまくいかないと、下の左端の画面とその次の画面の間ぐらいかな、そこらへんで「(アプリを使っている)スマホ等のWi-Fiを切り替えて直接ルンバに接続せよ」って言われたりします。多分Wi-FiSSID/パスワードを伝えたいだけだと思います。スマホWi-Fi設定で「roomba........」というSSIDを選んで接続すると、またすぐに「元のWi-Fiに戻せ」って言われて右往左往…。それが終わると再び左端の画面になって、ネットに接続してFirmwareのアップデートなんやらが走って(いるらしい)しばらくすると「設定が完了しました!」画面になる*5
リモコン代わりに「Clean」できるボタンが表示されます。 ルンバを切り替えたいときは、左上の三本線をクリックすると選択できる画面が表示されます(下、右端)。
f:id:maky_Ba:20191222205328p:plain:w125 f:id:maky_Ba:20191222205407p:plain:w125 f:id:maky_Ba:20191222205447p:plain:w125 f:id:maky_Ba:20191222205512p:plain:w125

2.3. 掃除させてみた

f:id:maky_Ba:20191222211957p:plain:w125:left f:id:maky_Ba:20191222212026p:plain:w125:left 掃除させてみました。バカっぽさが消えて(愛くるしさも減少??)、真っ直ぐな優等生君に生まれ変わりました。左がClean Map機能でどこを掃除したか(しなかったか)がわかる機能です。しかも道中Wi-Fiの受信感度も測定しているし。
iRobot社の社長が「家の中がどうなっているかわかるIoTデバイスはルンバだけだ」的な発言をしたくなる気もわかります。が、しかし、ねぇ、家の中の情報がねぇ…。このClean Map機能をOffにすればCloud(iRobot社)にはデータが送られなくなるのですが、面白いからねぇこの機能。そこが狙いか。

3. Home AssistantからルンバGo!

次は本命のHome Assistantからのルンバ制御です。基本的には下記のHome AssistantのIntegrationsのiRobot roombaの記載に従えば良いのですが、相変わらず言葉足らず。
www.home-assistant.io

3.1. ルンバのBLID/Passwordを取得する

ルンバのBLID(Build ID?)とPasswordを取得しないと連携できないのですが、Home Assistantのサイトはそのあたりは、下記のサイトに丸投げ工法。
github.com

ただWindowsのWLS(ubuntu)環境でやろうとしたらPythonのバージョンなのか何なのかでイマイチうまくいかず。下記のサイトの言う通りに進めたら無事BLID/Passwordが取得でき、うまくいきました。 community.home-assistant.io

  1. Windowsのどこか(例えばデスクトップ)に、作業用のフォルダ(roomba)を作成して、exeインストーラgithubのファイルの置き場にします。
  2. Pythonのサイト(https://www.python.org)から最新版のexeインストーラを取得
  3. GithubのNickWaterton/Roomba980-Python(https://github.com/NickWaterton/Roomba980-Python)からRoomba980-Pythonをzipで固めたものを取得
  4. Pythonのインストール。「カスタムインストール」でC:\Pythonにインストール。「環境変数Pythonを追加」(Add Python to environment variables)も忘れずに。
  5. Roomba980-Python-master.zipの中のroombaというフォルダをC:\Pythonの直下に展開
  6. DOSプロンプトを立ち上げる(Windows左下の検索窓からcmdとか入れて)
> cd C:\Python
> pip install six
> python .\roomba\getpassword.py -R 192.168.xx.xx  (←ルンバのIP)

途中で止まって「ルンバがホームステーションに居て電源が入っている状態か確認しろ」「確認したらルンバのホームボタンをピロッって言うまで2秒ほど押せ」と言ってくるので言われた通り操作して、DOS窓でEnterを押す。

(中略)
Roomba (Roomba_no1) IP address is: 192.168.xx.xx
blid is: 69F4051123456789
Password=> :1:1577025355:SE0pEGauevFJOgxK <= Yes, all this string.
Use these credentials in roomba.py

このblid「69F4051123456789」とPassword「:1:1577025355:SE0pEGauevFJOgxK」(どちらも値はサンプルですよ)の両方が重要。メモっておきましょう。

ちなみにpip install sixは、1回やれば十分。次に(2台目ルンバ―とか)BLID/Passwordを取得したいときは、PythonスクリプトだけでOKです。

3.2. Configuration.yaml設定

先ほどメモったBLIDとPasswordそれとルンバのIPアドレスをConfigurationファイルに記載します。

(前省略)
# iRobot roomba 980
vacuum:
  - platform: roomba
    name: <表示用のルンバの名前>
    host: <IP_ADDRESS>
    username: <BLID>
    password: <PASSWORD>
(後省略)

あとは再起動。

これで、vaccum.turn_onやらvaccume.turn_offやらでルンバを制御することができるようになります。一日複数回のタイマー起動とかもOK(のはず)。コマンドは、掃除機(Vacuum)の項にありますよ。

www.home-assistant.io

3.3. UI設定

表示パネルのどこかに「vaccum.<付けた名前を基にしたエンティティ名>*6」を設定します。例えば下記の様に設定すると右のような感じになります。
f:id:maky_Ba:20200110005844j:plain:w300:leftf:id:maky_Ba:20200110005904j:plain:w250

右の画面のルンバの名前(上では「Roomba No.1 - 1st Floor」)をクリックするとルンバの状態と操作の画面がポップアップします。
f:id:maky_Ba:20200110010736j:plain:w300:left

4. さいごに

Home Assistantのコミュニティのやりとりを見るに、BLID/Passwordの取得は結構苦労しているみたいです。

「Multiple Connectionがいかん」(どうやらルンバは一度に一か所としかやり取りできないので、ルンバアプリ(クラウドサービス)とおうちサーバHass.ioの2か所(Multiple)の接続はだめだという理論)とか言って、すべての端末の全てのルンバアプリを削除してからgetpassword.pyスクリプトを実行すべし、とか言っている人もいましたが、少なくとも私はそんなことしなくても大丈夫でした。一応、アプリは停止させてからスクリプト実行しましたが。

またHass.ioからの制御に関しても「Multiple Connectionが邪魔をするのだ」とかいうコメントもありましたが、今のところiRobot HomeアプリとHAの両方からアクセスしてもきちんと動いています、今のところ。 まあ組み合わせや、タイミングでダメになったりしそうですが…

さて、新年早々、やっぱり汎用赤外線リモコンには到達せず。
赤外線リモコンにはいろいろやらせたいけど、とりあえず電気をつけるとこだけにするか。

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

  1. RaspberryPiにHome Assistant導入
  2. Home Assistant初期設定
  3. 環境センサー(Omron)を接続
    1. 環境センサー(Omron)を接続 - 前編
    2. 環境センサー(Omron)を接続 - 中編
    3. 環境センサー(Omron)を接続 - 後編
  4. スマートコンセントでクリスマスツリー点灯!(スマートプラグ)
  5. スマートディスプレイ
  6. OK、ぐーぐる、クリスマスツリーを点けて(IFTTT連携)
  7. ルンバ発進!《今回》
  8. 汎用赤外線リモコンを接続《次回》
  9. UIを改善
  10. データベースの外部化

*1:サンダーバード好きなので「発進!」(正確にはGoは準備完了的な意味合いですが)はこのセリフで。Roomba"s"なのは一階と二階の両方にあるからです。

*2:右往左往しながら何度もしっかりと掃除してくれるので、ういやつよのう、という感じで好きでしたよ。でもお別れ…

*3:ああこれもビッグカメラ.comで買ったやつだったなぁ。

*4:汎用赤外線リモコンは、基本的に横から上の範囲に赤外線を広範囲に照射するのですが、ルンバは床の上なので赤外線がうまく届かないのですが…なんか反射でうまくいくときもあったりするのですが。天井、と言うかシーリングライトに汎用赤外線リモコンを組み合わせるのが、到達範囲という点では何気に良いと思うのですが。製品化されないのかなPanasonicとかから。

*5:この「設定が完了しました!」画面はアニメーションが凝っています。ごみをぶちまけて(上記画面)、ぐるぐる走りまわってごみを掃除したり、猫を載せて走ったりして、最後は綺麗な状態で止まります。

*6:ちなみに名前にスペースとかピリオドとかが含まれるとそこはアンダースコアに置き換わります。また大文字は小文字に。「Roomba No.1 - 1st Floor」は「roomba_no_1_1st_floor」になります。

あけましておめでとうございます!

今年もよろしくお願いします。

1. Home Assistant再導入

年末年始は旅行に行っていたのですが、だいたい旅行中にHome Assistantが死ぬ…。前回はGWの旅行中に大往生。原因の切り分けと復旧に結構手間がかかりました。

今回の原因はDB(sqlite3)がイカレタみたい。そろそろSDカードへの負担を減らす方法を考えないと。

とりあえずコストコで新品のmicroSD 64GBを購入して再インストール。自分の記事が役に立つ…
f:id:maky_Ba:20200110012002j:plain:w350
(5枚で4000円弱で購入できました。さてどのぐらい持ちますやら)

2. WxBeacon2 (Omron製)の電池交換ラッシュ!

ラッシュは大袈裟か。大体同時期に使い始めたので、電池が切れるのも似た日程に。
湿度とか温度とかが時々「0(ゼロ)」になるっていう症状が出てきたら、大人しく電池交換の準備を。
f:id:maky_Ba:20191225012018j:plain:w225:left f:id:maky_Ba:20191225012056j:plain:w225
公称推奨電圧2.7~3.3Vなので、まあそんな感じかと。電池寿命は「約6ヵ月※3 (測定間隔5分/1日1回接続)」が定格らしいのですが、私の使い方とバルクの安売りボダン電池だと経験上3~4カ月ですかねぇ。

2020年もよろしくお願いします。
次こそは赤外線リモコンだ!きっと、たぶん、いや…どうだろう…

【Home Assistant(Hass.io)でホームオートメーション】OKぐーぐる、クリスマスツリーを点けて

IFTTTでGoogle AssistantとHome Assistantの連携!

ああ、いつまでたっても「汎用赤外線リモコン」に到達しない…
しかしながら、クリスマスまでにツリーを音声コマンドで操作できるように設定したい、のです。この手続きは「汎用赤外線リモコン」でも活用しますし(言い訳)。

1. まえがき

Home AssistantのWebページ(やAndroid/iOSアプリ)からクリスマスツリーを点灯・消灯できるようになりました(この記事)。しかし折角Google Home/Home mini/Nest Hubがあるのですから、「OK、ぐーぐる」で点灯できると家人へのインパクトも大!でしょう。まるで魔法のよう!

2. サービス間連携IFTTT

「OK、ぐーぐる」とHome Assistantの間を繋ぐのに、サービス間連携の仕組みIFTTT(IF This Then That)を使うことにします。

ifttt.com

連携の流れは、下記のような感じです。

「OK、ぐーぐる …」 ⇒ Google Assistant(のサービス) ⇒ IFTTT ⇒ Home Assistant(のサービス) ⇒ tp-link HS-105 (に繋がっているクリスマスツリー)

つまり

  • IF Thisパート: もし私が「OK、ぐーぐる、クリスマスツリーを点けて」と言ったら(とGoogle Assistantが検知したら)
  • Then Thatパート:Home Assistantの外部サービスを呼び出して、ip-link HS-105をオンにする。

と言った具合です。

3. Home Assistant側での準備

下記のHome AssistantのIFTTT関連のマニュアルの「Sending events from IFTTT to Home Assistant(IFTTTからのイベントをHome Assistantで受け止める)」の部分を設定する。 www.home-assistant.io

3.1. Configuration.yaml設定・設定確認

Home Assistantを外から呼べるようにするためには、下記条件が必要です。

  1. httpsでHome Assistantに接続できるようになっていること(下記設定ファイルでssl_ほにゃほにゃが設定されていること)
  2. DNSでサイト名引けるようになっていること(下記設定ファイルにbase_urlが設定できていること)

まあ、DuckDNSの設定をAdd-onでしていれば、このあたりはクリアしているはず。

(前省略)
# Uncomment this if you are using SSL/TLS, running in Docker container, etc.
http:
  base_url: !secret my_url
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem
(後省略)

つぎに、外からHome Assistantの機能を呼び出すサービス(webhook)をAutomationを使って設定する (ほぼおまじないと思って設定する)。

(前省略)
#****************************************************************
# automation for IFTTT
#****************************************************************
automation old:
  trigger:
    platform: event
    event_type: ifttt_webhook_received
    event_data:
      action: call_service
  action:
    service_template: '{{ trigger.event.data.service }}'
    data_template:
      entity_id: '{{ trigger.event.data.entity_id }}'

(後省略)

3.2. Webhook IDの取得

外からHomeAssistantのサービスを起動するためのインターフェースというか何というかがWebhook(Webサービスをひっかけるとっかかり、という感じかな)という機構なのですが、それを使えるようにする手順です。まずは左のパネルの「設定」を選んで、右画面の「Integrations」を選び、右下のオレンジの+で新しいIntegrationを追加します。リストから「IFTTT」を選択すると、「Set up the IFTTT Webhook Applet(IFTTTのWebhookアプレットを設定するかい?)」って聞かれるので「送信」を選択。
f:id:maky_Ba:20191221021338j:plain:w350 f:id:maky_Ba:20191221021352j:plain:w200

すると「Success!」という子画面が表示されます。この画面とっても重要です。4.2で設定する内容がここで生成され表示されるのですが、なんとこの画面「一度」しか表示されないのです!!
f:id:maky_Ba:20191221021438j:plain:w350
一旦「完了」を押してしまうと「Integrations」の中の「IFTTT」を押しても下記の様に冷たいメッセージしか表示されません。ということで、先ほどの画面が出たら少なくともURLパートはコピペしてどこかにメモっておきましょう。絶対ですよ。
f:id:maky_Ba:20191221021459j:plain:w400
.../api/webhook/<長い長い文字列>の長い長い文字列が私のHome AssistantのWebhookのIDなのです。 残念なことに、このIFTTT連携用のWebhook IDは一個しか作ってくれません。つまり忘れちゃったら「作り直すしかない」のです。作り直したら以前作ったIDは無効に!!!ということは…
(この記事を書くために2回ほど作り直して、その都度既に作ってあったIFTTTのほぼすべてのAppletのURLを設定しなおすことに…)

4. IFTTTのアプレットを定義する

まずIFTTT(https://ifttt.com/)のサイトに行き、Google Assistant(Google Home/Home mini/Nest Hub)で使っているGoogleのアカウントでログインします。こうしておくとGoogle Assistant連携がスムーズに行く(と思う)。

画面右上のユーザアイコンの中で「Create」を選択するとIFTTTのアプレット生成画面がスタートします。 f:id:maky_Ba:20191221000443j:plain:w500

4.1. IF Thisパートの設定。

上の画面のどこを押して進めたら良いか、イマイチ分かりづらいデザイン…
「+This」の部分が正解。
100種類以上のIF Thisに使えるサービスがタイルで列挙される(下図左)ので、ちょっと探し辛い。今回はGoogle Assistantを使いたいので、まずはGoogleと入れて絞り込むのが楽です。UI(タイル)で選択しやすいようにしているつもりで、結局テキスト入力が不可避、皮肉ですね。
f:id:maky_Ba:20191221000910j:plain:w275:left f:id:maky_Ba:20191221000923j:plain:w275

「もし」の部分=起動条件(トリガーTrigger)を設定します。Google Assistantのサービスのトリガーは4つ。今回は、一番シンプルな「Say a simple phrase(単純な文を言う)」を使います。「単純な」というのは、数字やキーワードなど変数的なものを含まない固定的な(?)文章の事を指します。 下記の様に設定しました。

  • What do you want to say?(何て言う?): クリスマスツリーの電気をつけて
  • What's another way to say it? (それ、他の言い方では?):クリスマスツリーをつけて
  • And another way?(他の言い方、もう一丁):(なし)
  • What do you want the Assistant to say in response?(Google Assistantに何て応えさせる?):クリスマスツリーの電気をつけます
  • Language: Japanese

f:id:maky_Ba:20191221002007j:plain:w275:left f:id:maky_Ba:20191221002033j:plain:w275

ちなみに、気が付く人は気が付いているかもしれませんが、「Google Assistantに何て応えさせる」は後段の成功失敗にかかわらず「応え」てくれます。たとえHome Assistantのサービス呼び出しに失敗しても気にしません。
だって「IF This」パートの設定画面にあるんですよ、したがって、まあ「条件うけたまわり!」ぐらいの感じの応答にするのが良いでしょう。「電気をつけました」ではなく「電気をつけます」とか。

「Create Trigger」すると次のパートに進めます
f:id:maky_Ba:20191221004327j:plain:w500

4.2. Then Thatパートの設定

IFTTTの流儀が見えてきましたか?「+That」を押すと実行パートのサービス設定ができます。
Home Assistantの外部からの呼び出しサービスを利用するのにWebhooksという機構を使いたいのですが、またしても山の様なThen Thatに使えるサービスが列挙されてうんざり…さっさとあきらめて検索窓に「Web」と入れて絞り込みます。
f:id:maky_Ba:20191221004958j:plain:w275:left f:id:maky_Ba:20191221005024j:plain:w275

このサービスには「Make a web request」しかありませんのでそれを選択して、「Complete action fields(アクションの設定項目を埋める)」に従って下記の様に埋めていきます。

  • URL: https://xxxxx.duckdns.org/api/webhook/長い長いwebhook_id
    (これが3.2で取得したURLです。ちゃんとメモってありますよね)
  • Method: POST
  • Content-Type: application/json
  • Body: { "action": "call_service", "service": "switch.turn_on", "entity_id":"switch.christmastree"} で、「Create action」を押すと、「Review & Finish(確認と終了)」が出ますが確認しようがないのでここは「Finish」で終了!
    f:id:maky_Ba:20191221024747j:plain:w250 f:id:maky_Ba:20191221024829j:plain:w250

おお、これでやっと終わりです。
f:id:maky_Ba:20191221024851j:plain:w350

これでGoogle Home/Home mini/Nest Hubに向かって「ねぇ、ぐーぐる、クリスマスツリーをつけて」と言えば、バチンというHS-150のリレー音が響き渡ってクリスマスツリーのライトが点灯します。ふう、結構長かったねぇ、設定。でもこれでWebhookは使い放題なので、次からは楽になるはずです。

5. おわりに

よおし、クリスマスに間に合った…
さてと、次は、本当の本当にほんとうに(?)汎用赤外線リモコンか!?乞うご期待。

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

  1. RaspberryPiにHome Assistant導入
  2. Home Assistant初期設定
  3. 環境センサー(Omron)を接続
    1. 環境センサー(Omron)を接続 - 前編
    2. 環境センサー(Omron)を接続 - 中編
    3. 環境センサー(Omron)を接続 - 後編
  4. スマートコンセントでクリスマスツリー点灯!
  5. スマートディスプレイ
  6. OK、ぐーぐる、クリスマスツリーを点けて(IFTTT連携)《今回》
  7. 汎用赤外線リモコンを接続《次回》
  8. UIを改善

【Home Assistant(Hass.io)でホームオートメーション】スマートディスプレイ

スマートディスプレイGoogle Nest Hub)

すみません!!
スマートコンセントでクリスマスツリーを無事点灯させたので、ついに汎用赤外線リモコンか!と思わせて、さらに寄り道…

1. まえがき

コストコに行ったら*1Googleスマートディスプレイ(Google Nest Hub)が1万円を切る値段になっていましたので、ついつい手が出てしまいました。

f:id:maky_Ba:20191214010546j:plain:w340

これで我が家には、Google系のスマートディスプレイが1個、スマートスピーカーが4個(Home x2、Mini x2)となりました。(他にAmazon系(Alexa)で、スマートディスプレイ化したタブレット1個、スマートスピーカー1個ありますが、存在感薄いです)

しかしながら、ただのスマートディスプレイとして使う気をさらさらありません。
実は、せっかくHome Assistantで「今の」「我が家の外の」気温がわかるようになっているのに、「ねぇ、ぐーぐる」すると教えてくれる外気温は「私の住んでいる市の」気温なのです。そこのところ敗北感…
Home Assistantの回答をGoogleスマートスピーカーに「しゃべらせる」様にするという手はありそう(Actions on Googleあたりでしょうか)ですが、まずは簡単にスマートディスプレイにHome Assistantの画面を出して、「今の」「我が家の外の」気温を表示できるようすることを目標にしましょう!*2

2. 準備

必要なものは下記のとおり。

品名 型番 説明
スマートディスプレイ Google Nest Hub コストコで9,980円でした。新型出るのかな。
PCかタブレット Google ChromeもしくはMicrosoft Edgeブラウザが動くもの 後述するHome Assistant Cast launcherを一度起動して設定するために使います
Home Assistantサーバー Ver. 0.103.0 ちょっとサブバージョンが上がりました…

3. Home Assistant Cast

3.1. Google Nest Hubの初期設定

特に変わったことをする必要はありません。電源入れて、言われたとおりに設定を進めれば良いと思います。

あ、一点、WiFiルータでMACアドレス制御をかけている場合は、接続しようとしている携帯アプリでMACアドレスを確認する必要があります。Nest Hubの画面側でどうやって確認するのかしばらく試行錯誤してしまいました。
下手に画面があるので惑わされますが(私だけ?)、Google Homeとか同じで「Wi-Fiネットワークの設定」画面の右上の設定ボタン(縦3つの点)をクリックするとMACアドレスが表示されます。ここだったか…

3.2. Nest Hub用UI作成

まずはGoogle Nest Hubに表示するためのHome AssistantのViewをつくらなければなりません。
Home Assistantで、[状態]→[設定ボタン(たて点三つ)]→[Configure UI]でConfigure UI画面(UI設定画面)を開きます。さらに[(画面の上の方にある+印) Add View]で、View Configuration画面(View設定画面)を立ち上げます。下記画面のように設定しました。

f:id:maky_Ba:20191216212119j:plain:w340

次に、そのViewの中で表示する情報を設定します。
今回は、カードのお試しを兼ねてVertical-Stack CardとHorizontal-Stack Cardを組み合わせて使ってみます。Configure UI画面の右下のオレンジの+印をクリックし、Vertical-Stack Cardを選択します。Vertical-Stack CardやHorizontal-Stack Cardは、「No visual editor available for: vertical-stack」だったりするので、ここではガシガシとテキスト入力していかなければなりません。
さてVertical-Stackとは上下にパネルを設置するカードなのですが、その上のパネルをHorizontal-Stack Card(左右にパネルを設置するやつ)にしてパネルを入れ子にしてみます。下記画面のように記述してみました。

f:id:maky_Ba:20191216212540j:plain:w340

結果は、下記のような感じです。
f:id:maky_Ba:20191216213525j:plain:w340

3.3. UIをNest Hubにキャスト(Home Assistant Cast)

Google Chromeブラウザ(もしくはMicrosoft Edgeブラウザ)でthe Home Assistant Cast launcher websiteにアクセスして、「Home Assistant URL」に外からhttpsでアクセスできるURLを設定し、「Authorize]ボタンを押します。
f:id:maky_Ba:20191216221437j:plain:w340

でログイン。
f:id:maky_Ba:20191216221806j:plain:w340

Stay log onとか聞かれたら、とりあえずYesとでも答えておきます。下の方にある「START CASTING」ボタンをクリックすると、Castする先の選択画面になります。
f:id:maky_Ba:20191216221858j:plain:w340

今回は、Nest Hubをダイニングのテーブルの上に置いたので、接続先として「ダイニング ルーム ハブ」(芸の無い名前ですみません)を選択します。
f:id:maky_Ba:20191216223213j:plain:w250

View選択画面(Pick a view画面)が出るので、先ほど作ったCast用のView「GoogleCast」を選択します。
f:id:maky_Ba:20191216222639j:plain:w340
一旦、Castしたら、ブラウザを閉じても大丈夫。

Google Nest HubのHome画面で「右から左へスワイプ」すると「Home Assistant」パネルが出てきます。それをクリックすると下の様なHome Assistantの画面(先ほど指定したView)が表示されます。
f:id:maky_Ba:20191211213347j:plain:w340

4. おわりに

さあこれで、温かいダイニングで、冬の寒い朝の「寒さ感」をじっくり味わうことが、Home Assistant+Google Nest Hubで出来るようになりました。 さてと、次は、本当の本当に汎用赤外線リモコンか!乞うご期待。

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

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

*1:まあ、コストコへは毎週行ってますが。我が家にとってはコストコも近所のスーパー扱いです。

*2:という言い訳で、Google Nest Hubを買う…ボーナス出たし…ちょびっと。お疲れ様>自分。

【Home Assistant(Hass.io)でホームオートメーション】クリスマスツリー点灯!!

tp-link HS-105 でクリスマスツリー On!!

次は「汎用赤外線リモコン!」と宣言しておきながら、うさぎなどに寄り道した挙句、早二ヶ月も放置….
ちなみにリモコンは既に設定は終わっており、家ではダイニングやベッドルームで大活躍中です。
「ねぇぐーぐる、ベッドルームの電気を消して」
寒い冬はベッドから出ないで電気を消せるって最高!

などと、うだうだ言っているうちにクリスマスシーズン到来です。先にスマートコンセント(スマートプラグ)を使ってクリスマスツリーをスマート化しましょう!

1. まえがき

昨年末にAmazonでクーポン適用で2個3,990円だったので、tp-link HS-105 ニ個セットを使い道も考えずに買ってしまいました*1

f:id:maky_Ba:20191211012639j:plain:w200

スマートコンセントとは、コンセントのオンオフで機器をオンオフしようとするものです。つまり、機器側にスイッチが無い(コンセントに指したら即スタート!)か、機械的なスイッチがある物しか使えないのです。
例えば扇風機でも、昔みたいに(?)機械的にツマミをガチャガチャするものなら良いのですが、ボタンで「ピッ」なんてするものはアウト!なのです。 意外と適した機器が見つかりません。

家を色々と探したところ、我が家のクリスマスツリーのランプはLEDでも無いクラシックなやつなので、コンセントに挿せば光ります。と言う事で、クリスマスツリーをスマート化しちゃいました。

2. 準備

品名 型番 説明等
スマートコンセント HS-105 (tp-link 社) tp-link社は「スマートプラグ」と呼んでいます
タブレット/携帯 Android or iOS スマートコンセントの設定アプリKasaをインストールために、Home Assistantと同じネットワークにつながる端末を準備
Home Assistantサーバー ver. 0.102.1 なかなか1.0になりません。0.99から0.100になったときは「そーきたか」と思いました。

3. スマートコンセント初期設定

基本的に、tp-linkの言う通り設定すれば良いと思います。私は余計なクラウド登録を避ける人なので、Kasaアカウントは作らずにセットアップしました。Kasaアカウントを作ると、

  • 家の外からでもオンオフ出来る
  • 複数の端末からオンオフ出来る

と言うメリットありますが、そこらへんはHomeAssistantにお任せなので必要ありません。

3.1. アプリ(Kasa)のインストール

Google PlayApp Storeからtp-link社のアプリKasaをインストールしてください。

3.2. アプリの初期登録

Kasaを立ち上げると「Kasaへお帰りなさい」と言う微妙な日本語でお迎えされます。この画面の選択肢は下記の2つのみ。正解は、さてどっち?

  • アカウントの作成
  • ログイン

正解は「アカウントの作成」です。その作成画面の右上に「スキップ」がありますので、アカウントの作成&ログインをスキップします。「本当によろしいですか」なんて聞かれますが、気にせず「アカウントなしで続ける」を押しましょう。

f:id:maky_Ba:20191210233846p:plain:w180:left f:id:maky_Ba:20191210234051p:plain:w180 f:id:maky_Ba:20191210234121p:plain:w180

3.3. スマートコンセント(HS-105)登録

あとは言われるがままに。

  • 「端末を追加」→「スマートプラグを追加」
  • →「スマートプラグ「ライト」/「ミニ」」選択
  • →「遠隔操作開始同意文」同意します
  • →「スマートプラグの電源を入れてください」HS-105をコンセントに挿して「次へ」
  • →「Wi-Fiランプを確認してください。」オレンジ色と青色が交互に光っていないければ電源ボタンを5秒長押しして交互に光るようにする
  • →「位置情報を有効にする」仕方が無いので有効にするが「アプリの使用中のみ許可する」に。
  • →「ネットワークを選択する」Home Assistantから見えるネットワークを選択しパスワードを入力
  • →「スマートプラグをホームネットワークに接続中](結構長い間ぐるぐるしていて心配になるが、見守る)
  • →「端末に名前を付ける」この名前がHome Assistantのエンティティ名になるので、半角英文字で入力。今回は"ChristmasTree"とする
  • →「アイコンをカスタマイズ」全く意味はないのだが、クリスマスツリーがあるのでそれを選ぶ。

f:id:maky_Ba:20191211000901p:plain:h400 ・・・・・・ f:id:maky_Ba:20191211001330p:plain:h400
(最後だけ違う端末のスクリーンショットなのはご愛敬ということで)

これでこの端末のKasaアプリからコンセントをOn/Offできるようになりました。コンセントにクリスマスツリーを繋いでオンオフしてみましょう!はいっオン!

f:id:maky_Ba:20191211002709j:plain:h300
写真に撮ると結構貧相なツリーだな…

4. HAでHS-105を使えるようにする

いままでのデバイスは、configuration.yamlに記述する必要ありましたが、HS-105とHome Assistantサーバを同じネットワークにしておくと、自動的に組み込んでくれます。

【追記】
もし追加されていなければ、手動で読み込ませます。まずは左のパネルの「設定」を選んで、右画面の「Integrations」を選び、右下のオレンジの+で新しいIntegrationを追加します。ポップアップしたリストから「TP-Link Smart Home」を選択すると自動でHS-105を探してくれます。

4.1. HS-105の設定確認

f:id:maky_Ba:20191211004046j:plain:w600
「Integrations インテグレーションの管理とセットアップ」からでも「Devices Manage connected devices」からでもどちらからでもつながっているデバイスの管理ができます。

f:id:maky_Ba:20191211004439j:plain:w600
TP-Link Smart Home製品群は自動で設定を読み込みます。スマートプラグに関しては、デバイス名を読み込んで、エンティティ名にします。

f:id:maky_Ba:20191211004740j:plain:w600
ここで表示名を変えたり、ここからオートメーションを作ったりできます。「真夜中になったら消す」とかできますね。
またエンティティが登録済みなので、「状態」でLovelace UIを使ってスイッチを登録したりできます。

4.2. オートメーション登録

試しに、時間が来たらクリスマスツリーを消灯する自動化スクリプトを設定してみましょう。消し忘れに効果があります。
先ほど見たデバイス情報の下の方に「When something is triggerd...」という欄があります。そこの「Turn off クリスマスツリー」を選択します。

f:id:maky_Ba:20191215233855j:plain:w500

オートメーションの名前に「クリスマスツリー消灯」と設定します。

  • トリガー:「トリガーの種類」=「時刻」、「At」=「00:00:00」
  • 条件:「条件の種類」=「状態」、「エンティティ」=「switch.christmastree」、「状態」=「on」
    (あ、下の画面では「On」になっている、間違えた「on」です。大文字小文字の区別有)
  • アクション:「アクションの種類」=「Device」、「Device」=「Christmastree」、「Action」=「Turn off クリスマスツリー」(この項は、設定済みだと思いますが)

これで、0:00になった時に(トリガー)、クリスマスツリーが点いていたら(条件)、クリスマスツリーを消す(アクション)という自動化スクリプト(オートメーション)が設定できたはず。

f:id:maky_Ba:20191215234050p:plain:w450

出来上がったオートメーションの確認・変更は、左のパネルから「設定」→「オートメーション」と進んで「オートメーションエディタ」から行えます。

f:id:maky_Ba:20191215235151j:plain:w500

バイスの登録も結構自動化が進んでますし、オートメーションとかもGUIでの設定がドンドンできるようになってきています。バージョンが上がるたびにファイルを直接いじらなくともGUIで設定できる範囲が広がってゆく。コミュニティは活発な様子。それはうれしいのですが、それにHome Automationの解説が追い付いてない感じ。残念…結局トライアンドエラーで頑張る必要あり、なのです。
(まあ、けど、相変わらず言葉足らず・説明不足なところが、HAっぽいところ、かもしれませんが)

5. おわりに

さあこれで、クリスマスシーズンもHome Assistant大活躍。IFTTTとかと連携すれば「クリスマスツリーの電気をつけて」と帰宅した暗闇で輝くクリスマスツリーに出会えるかも。

さてと、次は、本当に汎用赤外線リモコンか!乞うご期待。

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個で3,500円!、4個で6,000円!!お買い得!!いや、そんなにいらないか…

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

前回うさぎを一応生き返らせることが出来ました。

maky-ba.hatenablog.com

しかしながら、確かに課題も幾つかあって、

  • なんだか自由度が低い(時報太極拳だけでは…まあopenJabNabの機能を理解しきれてないだけだとも思いますが…)
  • 日本語をほとんど喋らない(独り言はなぜか日本語で話すのですが…)
  • セキュアなWiFi接続が成功しない(ちょっと古いうさぎなのです…)

なんて所は少しづつ手を入れていきたいところです。

3番目は、モバイルルーター「ちびファイ」で機能しそうなのですが稼働しっぱにする目的のルータではないので、古めの普通のWifiルータを入手して常設できるようにしようかと思います。ということで後回し。

2番目は結構重症で、既に当時の日本語音声は失われているらしいとのこと。ウサギ好きでNabaztag好きのHarukaさんが調査済みの様子。ううむ、大変そう。
rabb-it-days.tokyo

ということで、今回、その2では、1番目の「自由度が低い」というのをちょっとだけ改善してみたいと思います。やり方としては、firmwareを入れ替えてスマートホームHome Assistantから操作できるようにする、ということを考えています。

1. うさぎちゃんをサーバレス化する

前回の記事の「2.2. うさぎのfirmwareを入れて替えて何とかする方式」で紹介した下記のサイトに従って、Nabaztagをサーバいらずにプチ改造します。

github.com

1.1. (失敗編)firmware書き換え用サーバの準備

(失敗編ですので「1.2. (とりあえず編)firmware/mp3用Webサーバの準備」へ)

1度しか使いませんがWebサーバが必要となります。スマートホームサーバHome Assistant (Hass.io)が導入済みの私としては、Nabaztag/tag, the smart rabbit is back! (•ㅅ•)の言う通りにHass.ioをWebサーバにしたいところですが、sshでセキュア化済みですので断念。
( Home Assistant (Hass.io)サーバのConfigフォルダの下にwwwというフォルダを作っても、https://<your hass.io ip>/local/xxxx.htmlでしかアクセスできない。うさちゃんはhttps://で接続できないのです…)

Nabaztagと同じネットワーク(つまりはHome Assistant (Hass.io) と同じネットワーク)にあるWindows PCを使ってWebサーバを準備しましょう。以前、環境サーバを設定した時に導入したWSL (Windows Subsystem for Linux)を今回も使います。

多分pythonは3系列が入っていると思うのですが、念のためpython3のバージョン確認。

$ python3 --version
Python 3.5.2

次に、gitでandreax79さんのファイルを取得し、wwwというディレクトリを作って、そこにandreax79さんのweb/vlディレクトリを置きます。

$ git clone https://github.com/andreax79/ServerlessNabaztag nabaztag
$ mkdir www
$ cp -r nabaztag/web/vl www/

python3の標準モジュールにWebサーバ(httpサーバ)があるのでそれを起動します。

$ cd www
$ python3 -m http.server 8080

これでwwwディレクトリをトップとする簡易webサーバが立ち上がりました。http://<Windows PC's IP>:8080/でアクセスできるようになりました。
その1の「3.1.うさぎをWifiに接続する」1.~3.までに従ってNabaztagの設定画面に入ります。
Advanced configurationに移って、一番下のGeneral InfoにあるViolet Platformに「<Windows PC's IP>:8080/vl」と入力して"update and start"します。

おお!
http://<Nabaztag IP>/で操作画面が出て、耳を動かしたり、太極拳をさせてたり、おなかランプを光らせたりできる!

むむ?
Windows上のPython Webサーバーにアクセスが続いているぞ…もしかして「ServerlessNabaztag is a firmware allowing control of the Nabaztag/tag directly via the web, without an external server (a web server is needed only for downloading the firmware and the mp3s).」とは、「Webサーバが全くいらない」ではなくて「操作画面としては、Nabaztagオリジナルの様な外部のWebサーバはいらず直接うさぎに接続でき」&「firmwareとmp3をダウンロードして利用・再生するためにはWebサーバが(常時)必要」という事か!!
そうするとHome Assistant (Hass.io)にプレーンなWebサーバが無いのが残念だ。ううむ。

1.2. (とりあえず編)firmware/mp3用Webサーバの準備

仕方が無いので、余っているRaspberry Pi ZeroWH(余っているというよりはテスト用なのですが…)にWebサーバを構築しましょう。
下記で構築したRaspberry Pi Zero Wと同じものを4GB microSDカードを使って構築します。 maky-ba.hatenablog.com 下記の順ですすめます。

  1. 3.1. ディスプレイ/キーボード/有線LAN無しでRaspberry Pi Zero Wを使う準備
  2. 3.3. Raspberry Pi Zero W起動後の初期設定
  3. 3.4. ソフトの最新化・インストール
    ( 3) pipのインストールはいらないかな)

python3のWebサーバーを使うのも芸がないので、軽量*1webサーバーであるnginx(エンジンエックスって呼ぶらしい)を導入してみます。

$ sudo apt-get install -y nginx

既に自動起動サービスまで登録されてしまっています。確認は下記コマンドで。

$ systemctl status nginx         # 起動状態の確認
$ systemctl is-enabled nginx     # 自動起動登録の確認

http://<your RasPi IP>/にアクセスすると「Welcome to nginx!」という確認画面が表示されます。

コンテンツの置き場(http root)は、/etc/nginx/以下にあるconfファイルを確認するのが正しいのですが、下記コマンドで確認しておきましょう。

$ grep "root" -r /etc/nginx/ | grep "html"
/etc/nginx/sites-available/default:     root /var/www/html;

ということで、コンテンツは、/var/www/html以下ですので、そこにandreax79さんのweb/vlディレクトリを置きます。

$ cd
$ git clone https://github.com/andreax79/ServerlessNabaztag slnabaztag
$ sudo cp -r slnabaztag/web/vl  /var/www/html/

おお! (再度…) http://<Nabaztag IP>/で操作画面が出て、耳を動かしたり、太極拳をさせてたり、おなかランプを光らせたりできる!
f:id:maky_Ba:20190923145223p:plain

しかし、あまり喋りませんね。nginxのログ関係を確認します。

$ nano /var/log/nginx/access.log
$ nano /var/log/nginx/error.log

ううむ、/vl/config/clockall/ukのXX.mp3が無い(http code 404)って言っているなぁ。/vl/config/reco/uk/ComprendX.mp3も無いっていってる。後で探しておかないかと。
それからつぶやき(surprise)は英語だな。openJabNabの日本語ファイルを拾ってこれないかな…

2. サーバレスうさぎをHome Assistantからアクセスできるようにする

と言いながら、まだ完全には出来ていません…
community.home-assistant.io

基本的には、このサイトが定義してくれたPackageを使うのですが、UIやらConfigやらが大分変わって来ているので、エラー出たり、機能しなかったり。 f:id:maky_Ba:20190928110121j:plain あれやこれや手を入れて、とりあえず、上記のHome Assistantの画面から、うちのうさぎちゃんを操作できるようになりましたが、依然格闘継続中です。
ということで、一旦ここでこの記事をリリースします。一揃い落ち着いたら、Home Assistantでの設定は別の記事で上げたいと思います。

まあ、中の人は、ServerlessNabaztagなので「日本語は話さない」うさぎですが。
(時々突然、耳を動かしたり、英語でつぶやいたりするので、隣の机で大学のレポートを書く息子には不評(?)の様です)

つづく(とイイな) *2

*1:大量アクセスに対して「軽量」のような気がするので、今回の様な用途にはどうですか。ま、やったことないものに手を出す、という基本姿勢で。

*2:この記事を必要としている人が日本にどのぐらいいるのか?というのが気になる点。Nabaztag x Home Assistant ですから小数同士の掛け算…。いや、まあ、備忘録として書きましょう

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

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

(注:一度公開しましたが、UIの設定、特にカスタイマイズ(Customize)の扱いなどが古いやり方だったので、新版に差し替えました)

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

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

1. 前提

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

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

2. 観測データをHome Assistantで利用する設定

以前設定した時とは少し異なりますが、Home AssistantでUIを使うには、「Configuration.yamlの記述」(この章の下のYAML, Basic Information, Setting up devicesあたり)、次に「エンティティのカスタマイズ」(このあたりかな)、そして「UIの設定(GUIでの設定)」が必要です。

2.1.Configuration.yamlの記述

まずは呪文です。この宣言文は、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として読み込む設定です*1

(前略)

# 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]ボタンを押して設定ファイルの書式のチェックをします。

2.2. エンティティのカスタマイズ

このままだと表示されるのはエンティティの名前が英語名(例:last value of outside battery)のままであったり、アイコンがすべてセンサーアイコン(目のやつ)になったりするので編集が必要です。 サイドバーから[設定] --> [カスタマイズ] と進み、エンティティのカスタマイズ画面を出します。 f:id:maky_Ba:20190927220800j:plain

上記の設定内容は下記のとおりです。

  • Entity: 編集したいエンティティをドロップダウンリストから選ぶ
    (ex: last value of outside battery (sensor))
  • Name: UI上の表示名。エンティティ名自体の変更では無く、多分friendly_nameの設定だと思います
    (ex: 電圧(屋内))
  • Pick an attribute to override: 他の属性(アイコンとか)を変更できます。
    (ex: attriburte = icon, value = mdi:battery)

繰り返し、設定してゆきます。設定結果は/config/customize.yamlに設定されます。

sensor.last_value_of_inside_pressure:
  friendly_name: 気圧(屋内)
  icon: mdi:altimeter
sensor.last_value_of_outside_pressure:
  friendly_name: 気圧(屋外)
  icon: mdi:altimeter
sensor.last_value_of_inside_temp:
  friendly_name: 気温(屋内)
  icon: mdi:thermometer
sensor.last_value_of_outside_temp:
  friendly_name: 気温(屋外)
  icon: mdi:thermometer
sensor.last_value_of_inside_humidity:
  friendly_name: 湿度(屋内)
  icon: mdi:water-percent
sensor.last_value_of_outside_humidity:
  friendly_name: 湿度(屋外)
  icon: mdi:water-percent
sensor.last_value_of_inside_light:
  friendly_name: 照度(屋内)
  icon: mdi:lightbulb
sensor.last_value_of_outside_light:
  friendly_name: 照度(屋外)
  icon: mdi:lightbulb
sensor.last_value_of_inside_battery:
  friendly_name: 電圧(屋内)
  icon: mdi:battery
sensor.last_value_of_outside_battery:
  friendly_name: 電圧(屋外)
  icon: mdi:battery
sensor.last_value_of_inside_noise:
  friendly_name: 騒音(屋内)
  icon: mdi:volume-high
sensor.last_value_of_outside_noise:
  friendly_name: 騒音(屋外)
  icon: mdi:volume-high

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

2.3. UIの設定

左のメニュー(サイドバー)から[状態]を選び、その中の右端のベルマークの右の縦三つ点から[Configure UI]をクリック。 編集画面の右下のオレンジプラスマークからCard ConfigureでカードタイプEntitiesを選んで編集します。
上のconfiguration.yamlで設定したlast_value_of_outside_xxxxxx (configuration.yamlでスペースだったところは、_(アンダースコア)になってます)をエンティティに登録してゆきます。 f:id:maky_Ba:20190927223307j:plain これでHome Assistantに取り込まれたデータを表示できるようになります。 右側のプレビュー画面のように、カスタマイズで設定した表示名、アイコンが反映されています。

ちなみに編集画面の下の方にある「{}」をクリックすると、エディタ形式での編集画面になります。 icon: やname:といった編集を追加して記述すると、表示名やアイコンをカスタマイズしたものから更に上書き設定できます。

4. 家のセンサー配置図

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

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

屋内外のセンサーを追加するとUIは下のようになります。 f:id:maky_Ba:20190928105211j: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:configuration.yamlのファイルは肥大化する一方です。そろそろ別ファイルに分割することを考えないといけませんね

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