SmartThings Hubに新しいデバイスを追加した方法、パート1

この記事では、いわゆるSmartThingsのデバイスハンドラーの開発における私の経験についてお話したいと思います。 タスクは、Z-Waveプロトコル-Z-Unoに基づくユニバーサルデバイスと、それに接続された子デバイスの処理を追加することでした。







開発の紹介にはかなりの時間がかかりましたが、ほとんどのドキュメントの注意深い研究を啓発した後、さらなる開発に多くの労力は必要なくなりました。 この結果、ロシア語を話すユーザーの作業を促進するために、この記事を書くことが決定されました。



開発プロセス全体は、GroovyのSmartThings IDE Webアプリケーションで行われます。 テストはモバイルデバイスから実行する方が便利ですが、同じ開発環境でデバイスシミュレーターを作成することは可能です。 グラフィカルシェルをテストする場合、SmartThings Classicモバイルアプリケーション( AndroidiOS )を使用する必要が既にあります。



プラグインデバイスは、Z-Waveのほぼすべてのデバイスに制御を追加できるボードです。 さらに、接続されているデバイスは異なる数(最大32個)にすることができます。 したがって、ソフトウェアレベルでは、接続されているすべてのタイプのデバイスも処理し、アプリケーションへの出力を制御する必要があります。



処理されたタイプのリスト:







文書構造



2つの論理ブロックを区別できます。





一連の記事の中で、各ブロックの目的と内容をさらに詳しく説明します。



メタデータ



メソッドの名前からわかるように、これにはメタ情報が含まれています。



このブロックに含まれるものを順番に考えてみましょう。



定義()



このメソッドでは、引数はそれぞれハンドラーの名前、名前空間、作成者の名前の3つのことを示します。





  definition(name: "Your device", namespace: "yournamespace", author: "your name") {}
      
      





次の変数をメソッド本体で宣言できます: attribute, capability, command, fingerprint



。 さらに、それが何であり、いつ適用されるかについて、より詳細に検討します。



接続とフィンガープリント



デバイスを接続します。 この場合、SmartThings V2 HubとZ-Unoが使用されます。



新しいZ-WaveまたはZigBeeデバイスの追加時に、ハブは接続しようとしているデバイスのタイプを認識し、最も関連性の高いハンドラーの検索を開始しようとします。 彼は「指紋」によってそれを選択します。 ハブがカスタムハンドラーで一致を検出しない場合、最も近い標準テンプレートの1つを使用しようとします。



「フィンガープリント」はハンドラー自体に設定され、サポートするデバイスのタイプを示します。 公式ドキュメントには、Z-WaveデバイスとZigBeeデバイスでは異なると記載されていますが、Z-Waveの実装を検討します。



Z-Waveプロトコルデバイスには、製造元、デバイスタイプ、機能などに関する情報が保存されます。 デバイスとのいわゆる「インタビュー」の間に、STはこの情報をZ-Waveの生の説明で収集します。 そのような行の例:



 zw:Ss type:2101 mfr:0086 prod:0102 model:0064 ver:1.04 zwv:4.05 lib:03 cc:5E,86,72,98,84 ccOut:5A sec:59,85,73,71,80,30,31,70,7A role:06 ff:8C07 ui:8C07
      
      





各キーの値は、「指紋」を埋めるために使用されます。 各項目の詳細な説明は、 ここにあります 。 ハンドラーで使用されるものを検討します。



情報を含むこの行を見つけるには、[マイデバイス]タブに移動して、目的のデバイスをクリックする必要があります(その前に、デバイスをネットワークに追加する必要があります)。







mfrは、製造元IDを含む16ビット値です。 製造元とそのIDのリストは、 ここにあります



prod-製品タイプIDを含む16ビット値-一意のデバイスタイプID。



modelは、製品IDを含む16ビット値です。



inClusters-特定のコマンドクラスの必要性を確立する8ビット値。 たとえば、ハンドラがMultiChannel CCで動作することを示す必要がある場合、そのコード0x60を記述する必要があります。 SmartThings CCで利用可能なリストは、 ここにあります



これらの4つのキーは、このハンドラが属するデバイスをハブが正確に理解するのに十分です。 それらが私とどのように使用されるかの例:



 fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60"
      
      





デバイスはより多くのパラメーターを持つことができます。その場合、このハンドラーに正常に接続できますが、宣言された指紋と一致しないパラメーターが少なくとも1つある場合、デバイスはこのハンドラーを無視します。



Smartthingsでは、製造元(mfr)とモデル(prod、model)に関する指紋情報を追加して、ハンドラーの選択が明らかでない場合を除外することをお勧めします。 たとえば、デフォルトで使用されるテンプレートまたは例のいずれかの指紋が自分のものと一致する場合。



コード内の場所

 metadata { definition(...) { ... fingerprint mfr: "0115", prod: "0110", model: "0001", inClusters: "0x60" fingerprint mfr: "0115", prod: "0111", inClusters: "0x60" } ... }
      
      







リリースまで、記事の完全なサイクルが計画されています。 この情報が開発に役立つことを願っています。



All Articles