Weave スキーマ

Weave スキーマ

スキーマは、Weave システムの論理デバイスまたは物理デバイスから出力されたデータの表現と解釈を促進する、基盤となるデータモデルを記述します。

スキーマは次のとおりです。

  • 標準化 — どのような実装であっても、一貫性のあるインターフェースを提供する、正式に承認された機能の定義が含まれます。たとえば、スキーマで表現される電球には、オン/オフの状態やアクション、調光レベルなどのコア機能が常に存在します。
  • コンポーザブル - ユーザーは、少量の明確に定義された機能から構成される複雑なリソースを作成できます。たとえば、Google Nest Detect には、モーションと開閉の 2 種類のセンサーがあります。これらのセンサータイプの機能はスキーマ内で標準化されており、デバイス間で再使用できます。
  • 拡張可能 - ユーザーは標準機能のカスタム拡張機能を作成できます。たとえば、特定のセキュリティ アプリケーションに対して、スキーマの標準モーション センサー機能を追加して機能を拡張できます。
  • バージョニング - スキーマのすべての変更は、上位互換性と下位互換性を維持するためにバージョン管理されます。

スキーマは、トレイト、インターフェース、リソースの 3 つの要素を定義します。Google Nest エコシステムのほぼすべての機能がスキーマ内で定義されます。では、各要素について詳しく見ていきましょう。

トレイト

トレイト は基本的な機能の単位です。一般的なデバイスの状態または機能を示す場合や、動作を通知する構成を記述する場合があります。1 つのトレイトは、多くのデバイスに共通する場合もあれば、あるタイプのデバイスに固有である場合もあります。

たとえば、Google Nest デバイスで使用する次のトレイトをスキーマで定義できます。

トレイト

インターフェース

特に、複数のトレイトが特定の特定の機能を表す場合、それらをグループ化することで、トレイトのコンポーザブルを拡張できます。このようなトレイトのグループは、インターフェース と呼ばれます。

たとえば、Intercom インターフェースはスピーカーとマイクのトレイトで構成されます。

トレイトとインターフェース

リソース

リソース は、スキーマ内の論理要素または物理要素を表します。たとえば、Google Nest Protect はリソースです。Google Nest Guard もそうですユーザー、またはユーザーの家などの構造。

リソースは、構成、状態、機能をカプセル化する一連のトレイトで構成されます。

リソース、インターフェース、トレイトの関係は次のようになります。

リソース、インターフェース、トレイト

このように、Motion トレイトのような一部のトレイトは、異なるリソースに共通しています。また、Intercom インターフェースなどの一部のインターフェースも、異なるリソースに共通しています。トレイト、インターフェース、リソースはスキーマ内で一度定義され、Weave システム内のさまざまなリソースやデバイスで再利用されます。

トレイトの要素

トレイトはさらに、プロパティ、コマンド、イベントという 3 つの主要要素に分割されます。各トレイト要素の例を見てみましょう。

プロパティ

プロパティ は、トレイトの状態を表します。プロパティは、読み取りと書き込み、または読み取り専用です。

例:

  • Software Version はデバイス ID トレイトのプロパティです。これは、ほとんどのデバイスの特性です。Google Nest Thermostat、カメラ、Google Nest Protect はすべて独自のソフトウェア バージョンを保有しています。
  • Bolt State は Bolt Lock トレイトのプロパティですが、Yale x Nest Lock などのデバイスに固有です。たとえば、Google Nest サーモスタットにはボルトロックがありません。

コマンド

コマンド は、トレイト固有のカスタム アクション リクエストであり、想定されるレスポンスを返します。通常、これらはカスタム コマンドと呼ばれ、プロパティの特定の状態変化に拡張できます。例:

  • Bolt Lock Change は、Bolt Lock トレイトの Bolt State プロパティを変更するカスタム コマンドです。
  • ユーザー PIN コードの設定は、ユーザー PIN 設定トレイトの新しいユーザー PIN コード プロパティまたは既存のユーザー PIN コード プロパティを更新するカスタム コマンドです。

イベント

イベント は、トレイトのハプニングの記録です。トレイトのプロパティやシステム リセットなどのなんらかの変更を行ったことをサブスクライバーに通知します。

たとえば、Bolt Lock トレイトの Bolt Actuator State Change イベントは、複数の Bolt Lock プロパティの現在の状態をサブスクライバーに通知します。また、Bolt Actuator State プロパティを最後に変更したユーザーも通知します。この情報はすべて単一のイベントとして配信されます。

Weave スキーマの説明言語

Weave のスキーマ トレイト、インターフェース、リソースは、Google プロトコル バッファ v3 の構文を活用したドメイン固有の言語(DSL)で定義され、記述されます。この言語は、Weave スキーマ説明言語(WDL) と呼ばれます。

WDL は、異なるプラットフォーム固有の認識とエンコードを生成するコンパイラを介して実行されます。生成されるコードの種類は、リソースによって異なります。

  • Objective-C、Swift、Java、Scala - モバイルアプリとクラウド サービス
  • Weave TLV エンコードを使用した C++ - 埋め込みデバイスとモバイルアプリ

WDL の例については、後ほど詳しく説明します。

まとめ

学習した内容:

  • スキーマ は、Weave システムの基盤となるデータモデルを記述します。
  • スキーマは次の 3 つの要素を定義します。
    • 基本機能の単位
    • インターフェース は、新しい特定の関数を表すトレイトのグループです。
    • リソース論理要素または物理要素
  • トレイトは、プロパティ、コマンド、イベントで構成されます。
    • プロパティ : リソース トレイトの状態
    • コマンド トレイトの操作のカスタム リクエスト
    • イベントの 記録
  • スキーマは、Google Protocol Buffers v3 に基づく Weave スキーマ記述言語(WDL) を使用して定義されます。

詳細については、次をご覧ください。