1. はじめに
学習内容
- スクリプトによる自動化を計画して記述する方法。
 - スクリプトによる自動化をテストする方法。
 
必要なもの
- Google Home アプリを搭載した Android または iOS スマートフォン。
 - Works with Google Home 認定で、オン / オフを切り替えることができるスマートライトなどのデバイス。
 
2. デバイスをセットアップします。
デバイスをまだセットアップしていない場合は、家でセットアップします。
デバイスが Google Home アプリに表示され、Google Home アプリを使用してオン / オフを切り替えられることを確認します。
3. スクリプトによる自動化を計画する
まず、スクリプトによる自動化で何を実現したいのかを考えます。たとえば、次のような点について検討します。
- 自動化するデバイス。
 - スクリプトによる自動化の実行をトリガーする開始条件(またはイベント)。
 - トリガーされたスクリプトによる自動化を実行するかどうかを制御する追加の条件(ある場合)。
 - 実行するアクション。
 
この Codelab では、スクリプトによる自動化で次の 2 つの処理を行う予定です。
- 特定の時刻にライト(または他のスマート デバイス)をオンにする。
 - 特定の時刻にデバイスの電源を切る。
 
スクリプトによる自動化で行う処理を明確にしたので、スクリプト エディタを開いてスクリプトによる自動化を記述します。
4. スクリプトによる自動化を記述する
スクリプトによる自動化は、YAML データ シリアル化言語を使用して宣言的に記述されます。
スクリプトによる自動化は、主に次の 2 つのセクションで構成されています。
- メタデータ - スクリプトによる自動化の名前と、その機能の説明。
 - 自動化ルール - 自動化の開始ロジックと動作を定義します。
 
メタデータ
自動化のメタデータには、自動化の名前と機能が示されます。メタデータは metadata ブロックで指定します。次に例を示します。
metadata:
  name: Scheduled light
  description: Turn the light on and off at specific times
自動化のルール
自動化のルールは、実際の処理を行う場所です。開始条件は、開始条件、条件、アクションの 3 つの部分で構成され、順番に評価されます。
1 開始条件  | 2 つの条件  | 3 つのアクション  | 
開始条件は、自動化を開始するものです。後続の条件を評価するには、少なくとも 1 つの開始条件が   | これらは省略可能です。スターターが有効化された後に評価される 1 つ以上の追加制約で構成されます。条件が  複数の制約を含める場合は、 条件はステータス変更通知とは異なります。 
  | アクションは、開始条件と制約条件が満たされたときに実行されるオペレーションです。  | 
自動化の automations ブロックには、次の 2 つのルールが含まれています。
automations:
  - starters:
      - type: time.schedule
        at: 1:00 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: true
  - starters:
      - type: time.schedule
        at: 1:05 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: false
次の点にご注意ください。
automationsルールは 2 つあります。1 つ目はライトをオンに、2 つ目はライトをオフにします。- 各ルールには 1 つのアクションがあります。
 on: trueは「照明をオンにする」という意味です。同様に、on: falseは照明を消すことを意味します。- 各ルールには、自動化を開始する時刻を自動化に指示する 
time.schedule開始条件が 1 つあります。 - この自動化には条件がありません。
 
5. スクリプトによる完全自動化
これらの要素をすべて組み合わせると、スクリプトによる完全な自動化は次のようになります。
metadata:
  name: Scheduled light
  description: Turn the light on and off at specific times
automations:
  - starters:
      - type: time.schedule
        at: 1:00 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: true
  - starters:
      - type: time.schedule
        at: 1:05 PM
    actions:
      - type: device.command.OnOff
        devices: Desk light - Office
        on: false
- 上記のオートメーションをコピーします。
 - ウェブ用 Google Home に移動します。
 - 3 つの星のアイコン(
)で表される [自動化] タブを選択します。 - [+ 新規追加] をクリックします。
 - スクリプト エディタで、自動化テンプレートを削除します。
 - 自動化を貼り付けます。
 Desk light - Officeは、デバイスの名前と場所に置き換えます。- [検証] をクリックします。スクリプト エディタでは、エラーを含むスクリプトによる自動化のセクションが下線付きで表示されます。発生したエラーを解決し、エラーがなくなるまで検証と修正を続けます。たとえば、デバイス名が異なる場合があります。その場合は、自動入力機能を使用して有効なデバイス名を選択できます。
 - [保存] をクリックします。
 - スクリプトのテキストの下にある [有効にする] スイッチが [オン] の位置(
)にあることを確認します。 
6. 自動化をテストする
- デバイスが電源に接続され、Google Home アプリに表示されていることを確認します。
 - デバイスの電源がオンになっている場合は、電源をオフにします。
 - Google Home for web の [自動化] ページで、自動化の横にある [実行] ボタンをクリックします。

 - デバイスがオンになります。
 
自動化をテストしましょう。
- デバイスの電源をオフにします。
 - 自動化を編集し、7 行目の「デバイスのオン」時間を 5 分後に変更します。
 - 14 行目の「デバイスの電源を切る」時間を、「電源を入れる」時間の直後の時間に変更します。
 - [検証] をクリックします。発生する可能性のあるエラーを解決します。
 - [保存] をクリックします。
 - [有効にする] スイッチが [オン] の位置にあることを確認します。
 - 2 つの開始時間が経過するまで待ちます。指定した時刻にデバイスの電源がオンになり、オフになります。
 
7. 完了
スクリプトによる自動化が正常に作成されました。
この Codelab では、以下について学びました。
- 自動化を設計して記述する方法。
 - 自動化をテストする方法。
 
次のステップ
この Codelab では、非常にシンプルな自動化を作成しました。自動化では、電源スイッチの切り替えをスケジュールするだけでなく、自動化の作成の基本を理解したところで、Google Home エコシステムで利用できるさまざまな開始条件、条件、アクションについて説明します。
次のエクササイズをお試しください。
- 自動化に 
time.schedule開始条件を追加します。 - 同じスケジュールで別のデバイスの電源をオン / オフにするように自動化を変更します。
 time.schedule開始条件を削除せずに、他のデバイスの電源がオンになったときにのみデバイスの電源がオンになるように自動化を変更します。condition句を使用するスクリプト例をご覧ください。- 誰かが家にいるときだけデバイスをオンにするように自動化を変更します。
 
関連情報
Google Home の自動化について詳しくは、自動化のリファレンス ドキュメントをご覧ください。