ThingConnect

提供: IoT
移動先: 案内検索

Go Up to メインページ


ThingConnect デバイスでは、次のいずれかの技術を使用します。

目次

Z-Wave

Z-Wave プロトコルは、相互運用性を持つ RF ベースの無線通信技術であり、住居/軽商業環境での制御/監視/状態読み取りアプリケーション専用に設計されています。Z-Wave 技術の詳細は、「About Z-Wave Technology(Z-Wave 技術について)」を参照してください。

Z-Wave の概要

Z-Wave デバイスを使用するには、コントローラの役割を果たすデバイスが必要です。弊社では VeraLite スマート ホーム コントローラを使ってデバイスをテストしていますが、互換性のある Z-Wave コントローラであればどれを使用してもかまいません。

Z-Wave コントローラのセットアップ手順については、製造元の公式ドキュメントを参照してください。たとえば VeraLite スマート ホーム コントローラの場合は、Vera ユーザー ガイドを参照してください。

Z-Wave IoT フレームワークの使用

Z-Wave IoT フレームワークは、HTTP を使用したもので、ユーザーとデバイスの間のレイヤとして動作し、容易かつ透過的な対話を可能にします。Z-Wave IoT フレームワークを使用すると、プロパティにアクセスすることによってデバイスと対話できます。これらのプロパティには、読み取りが可能なもの、書き込みが可能なもの、両方が可能なものがあります。詳細と例については、「ThingConnect デバイスの操作」と「チュートリアル:ThingConnect IoT アプリケーションを作成する」を参照してください。

Z-Wave デバイスの検出メカニズム

Z-Wave デバイスに接続するには、以下を行う必要があります。

  • Z-Wave コントローラの IP アドレスを指定する: IP アドレスをコンポーネントの URL プロパティに設定します。
  • デバイスの一意識別子を指定する: デバイスの一意識別子をコンポーネントの DeviceNum プロパティに設定します。この識別子は、Z-Wave コントローラの Web インターフェイスで確認(および変更)することができます。たとえば VeraLite の場合は、デバイスの[Advanced]セクションの id フィールドです。 AeonLightLedBulb-DeviceNum.png
  • コンポーネントをアクティブ化する: コンポーネントの Active プロパティを True に設定します。
Delphi の場合:
IPAddress = '192.168.1.99'; //IP address of the Z-Wave controller
DeviceID = 1234;            //The unique identifier of the device
FVeraAeotecLEDBulb.URL := 'http://' + IPAddress + '/port_3480';
FVeraAeotecLEDBulb.DeviceNum := DeviceID;
FVeraAeotecLEDBulb.Active := True;
C++ の場合:
IPAddress = "192.168.1.99"; //IP address of the Z-Wave controller
DeviceID = 1234;            //The unique identifier of the device
FVeraAeotecLEDBulb->URL = "http://" + IPAddress + "/port_3480";
FVeraAeotecLEDBulb->DeviceNum = DeviceID;
FVeraAeotecLEDBulb->Active = True;

キャラクタリスティックの読み取りまたは書き込み

キャラクタリスティックの読み取りや書き込みは簡単です。コンポーネントに用意されているプロパティを使用するだけです。たとえば、Aeon Labs 電球の色を取得するには、次のようなコードを使用します。

Delphi の場合:
Value := FVeraAeotecLEDBulb.Color;
C++ の場合:
Value = FVeraAeotecLEDBulb->Color;

キャラクタリスティックのサブスクライブ

Z-Wave 技術では、BLE の場合のようにキャラクタリスティックをサブスクライブする手段が用意されていません。"サブスクライブ" と同様の機能を実現するには、コントローラに対して定期的にクエリを実行し、アラートを受信していないかを確認します。

たとえば、Honeywell サーモスタットの温度の読み取りを "サブスクライブ" したい場合は、次のようなコードを使用します。

Delphi の場合:
procedure THoneywellThermostatApp.Timer1Timer(Sender: TObject);
begin
  InsideTempLabel.Text := FloatToStr(FVeraHoneywellThermostat.TemperatureValue) + '°F';
end;
C++ の場合:
void __fastcall THoneywellThermostatApp::Timer1Timer(TObject *Sender)
{
	InsideTempLabel->Text = FloatToStr(FVeraHoneywellThermostat->TemperatureValue) + "F";
}

アラートの受信

Z-Wave デバイスの中にはアラートを発生させるものがあります。そのようなデバイスでアラートが発生すると、Z-Wave コントローラはそのアラートを受信します。アラートを "サブスクライブ" するには、コントローラに対して定期的にクエリを実行します(そのためのタイマまたはスレッドを使用します)。

たとえば、Fibaro 窓センサのアラートを "サブスクライブ" したい場合は、次のようなコードを使用します(抜粋)。

Delphi の場合:
var
  XMLNodeList: IXMLNodeList;
  XMLDocument: IXMLDocument;
...
...
XMLDocument := LoadXMLData(FibaroWindowSensorApp.FVeraFibaroWindowSensor.Xmlfile);
if XMLDocument <> nil then
begin
  XMLNodeList := XMLDocument.DocumentElement.ChildNodes['alerts'].ChildNodes;
  for I := XMLNodeList.Count - 1 downto 0 do
  if (XMLNodeList[I].Attributes['PK_Device']) = DeviceID then
    break;
  Date = '';
  Date := XMLNodeList[I].Attributes['LocalTimestamp'];
  ...
end;
...
C++ の場合:
String XMLData, Date;
_di_IXMLNode XMLNodeList, XMLNodeListChild;
_di_IXMLDocument XMLDocument;
...
XMLDocument = LoadXMLData(FibaroWindowSensorApp->FVeraFibaroWindowSensor->Xmlfile);
if (XMLDocument)
{
	XMLNodeList = XMLDocument->DocumentElement->ChildNodes->FindNode("alerts");
	for (I = XMLNodeList->ChildNodes->Count - 1 ; I >= 0; I--)
	{
		XMLNodeListChild = XMLNodeList->ChildNodes->Get(I);
		if ((XMLNodeListChild->Attributes["PK_Device"]) == (DeviceID))
			break;
	}
	Date = "";
	Date = XMLNodeListChild->Attributes["LocalTimestamp"];
...

Z-Wave Android の[使用する権限]

Android で Z-Wave デバイスを使用する場合、[使用する権限]のデフォルト設定を変更する必要はありません。

Bluetooth LE

Bluetooth LE(ブランド名は Bluetooth Smart)は、転送データ量と消費電力が少ないデバイスのための新しい環境を提供します。

Bluetooth LE の概要

汎用アクセス プロファイル(GAP)

汎用アクセス プロファイルは、Bluetooth における接続とサービスのアドバタイズを制御するものです。Bluetooth LE デバイスの汎用アクセス プロファイルにより、そのデバイスと他のデバイスとのやり取りの方法が決まります。

汎用アクセス プロファイルには、下記のデバイスのさまざまな役割が定義されます。

  • 転送データ量と消費電力が少ない周辺デバイス。周辺デバイスは自らのサービスをアドバタイズするほか、強力な中央デバイスに接続できます。周辺デバイスの実例としては、心拍数モニタや血圧モニタなどがあります。
  • より処理能力が高く搭載メモリが多い中央デバイス(周辺デバイスの接続先となります)。中央デバイスは他のデバイスを検索し、1 つの周辺デバイスとの接続を確立します。

プラットフォーム サポート

プラットフォーム Bluetooth LE
中央 周辺

Windows*

8+

Mac OS X

10.7+

10.9+

iOS

5+

6+

Android

4.3+

* Windows Server では Bluetooth をサポートしていません(「General Bluetooth Support in Windows(Windows における Bluetooth のサポート状況概要)」を参照)。

GATT(汎用属性プロファイル)プロファイル

プロファイルは、アプリケーションでの標準サービスの使用方法を高レベルで定義したものです。たとえば、健康管理アプリケーションに使用される Heart Rate(心拍数)プロファイルがあります。心拍数センサを備えたサーバー デバイスから標準の Heart Rate サービスが公開されているため、Bluetooth LE クライアントでは、そのサービスを検出しデータ(たとえば拍動数/分など)の収集を開始します。

GATT プロファイルは、サービスキャラクタリスティックを組み合わせたものです。

GATT プロファイルの公式ページは Bluetooth 開発者向けポータルの[GATT Specifications|Profiles]ページです。

Bluetooth LE サービス

サービスは他のサービスとの関係とキャラクタリスティックの集まりで、デバイスの構成要素の動作をカプセル化したものです。

GATT プロファイルには、番号で識別される標準サービスが 1 つ以上含まれています。たとえば、Heart Rate サービスには "0x180D" という公式番号が割り当てられています。

標準サービスの公式ページは Bluetooth 開発者向けポータルの[GATT Specifications|Services]ページです。

Bluetooth LE キャラクタリスティック

キャラクタリスティックは、単一の論理値を格納した属性型を定義しています。

1 つのサービスには、その特定のサービスの情報を提供するキャラクタリスティックが 1 つ以上含まれています。それぞれのキャラクタリスティックは公式番号で識別されます。たとえば、Heart Rate サービスには、心拍数を測定するためのキャラクタリスティック Heart Rate Measurement があります。

採用されているキャラクタリスティックの公式ページは Bluetooth 開発者向けポータルの[GATT Specifications|Characteristics]ページです。

Bluetooth LE IoT フレームワークの使用

Bluetooth LE ベースのデバイスの IoT フレームワークでは、TBluetoothDeviceDiscoveryManager を使用して、IoT デバイスとの接続を Bluetooth LE ベースの一般的な接続メカニズムとして管理し、各デバイスをコンポーネントとしてラップします。たとえば、TWahooTICKRHeartRateMonitor コンポーネントは Wahoo TICKR 心拍数モニタをラップしたものです。

TBluetoothDeviceDiscoveryManager コンポーネントは、Bluetooth LE ベースのデバイスに接続するための基本メカニズムを提供するものです。TBluetoothDeviceDiscoveryManager コンポーネントでは、これらのデバイスに接続する際のタイムアウトと再試行回数を定義することができます。

Bluetooth LE デバイスの検出メカニズム

Bluetooth LE デバイス検出マネージャに用意されている検出メカニズム メソッド

TBluetoothDeviceDiscoveryManager コンポーネントでは、次のように、検出メカニズム(DiscoveryMethod プロパティ)の複数の選択肢をサポートしています。

検出メソッドの種類 説明
Connect 中央デバイスが指定の周辺デバイスに直接接続します。
ScanResponse 中央デバイスが、周辺デバイスからアドバタイズされたデータを使用して、その周辺デバイスに高速に接続します。
ScanResponseAllDevices アドバタイズするデータに同じプライマリ サービスを含んでいる周辺デバイスを中央デバイスがすべて検索します。


メモ:
  • 32 ビット Windows および 64 ビット Windows プラットフォームのアプリケーションの場合は、検出メソッドの種類として Connect を設定する必要があります。
  • 一部のデバイスでは、アドバタイズするデータで自分の名前やサービスをブロードキャストしません。その場合は、代わりに検出メソッド Connect を使用し、接続先のデバイスの名前を手動で設定する必要があります。
  • ScanResponse メソッドでは、指定されたプライマリ サービスを持つ ThingConnect デバイスのうち、最初に見つかったものに接続します。

ThingConnect コンポーネントの検出メカニズム イベント

TBluetoothDeviceDiscoveryManager に設定されているどの検出メソッドについても、すべての Bluetooth LE コンポーネントに次のイベントが用意されています。

イベント名 説明
OnDeviceConnected コンポーネントがデバイスを検出しそれに接続したときに発生します。
OnDeviceDisconnect デバイスとの接続が解除されたことをコンポーネントが検出したときに発生します。
OnDeviceDiscovered コンポーネントが新しいデバイスを検出したときに発生します(複数回発生することがあります)。


TBluetoothDeviceDiscoveryManager の検出メソッドが ScanResponseAllDevices に設定されている場合は、ThingConnect デバイスに接続する前に次のイベントが発生することがあります。

イベント名 説明
OnDeviceListDiscovered コンポーネントが検出したデバイスをすべてリストに追加し終わったときに発生します。

コンポーネントが検出したデバイスをすべてリストに追加し終わる(かつ、OnDeviceListDiscovered イベントが発生する)と、次のコンポーネント プロパティが更新され、それらを使用してデバイスに接続することができます。

  • DiscoveredDeviceCount: リストに含まれている検出済みデバイスの総数が格納されています。
  • DiscoveredDevice: 検出したデバイスのリストから特定のデバイスを返します。

これらのプロパティの詳細については、「検出メカニズム メソッド ScanResponseAllDevices を使用する」を参照してください。

ThingConnect デバイスに接続する

検出メカニズムに応じて、次のいずれかを使って ThingConnect デバイスに接続できます。

  • Connect メソッドの場合は、コンポーネントの DeviceName プロパティを自分自身のコンポーネントの名前に設定します。
  • ScanResponseAllDevices メソッドの場合は、ConnectDevice メソッドを使用して、指定の DiscoveredDevice に接続します。詳細については、「検出メカニズム メソッド ScanResponseAllDevices を使用する」を参照してください。

Bluetooth LE デバイス検出マネージャのエラー イベント

TBluetoothDeviceDiscoveryManager には次のイベントが用意されています。

イベント名 説明
OnGeneralDiscoveryError

接続先となるデバイスをデバイス マネージャが検出できないときに発生します。

手続きには Handled という追加のパラメータが含まれています。例外を自分で処理したい場合には、HandledTrue に設定してください。

TGeneralDiscoveryErrorEvent = procedure(const Sender: TObject; const AException: Exception; var Handled: Boolean) of object;

ThingConnect コンポーネントのエラー イベント

すべての Bluetooth LE コンポーネントには次のイベントが用意されています。

イベント名 説明
OnDeviceConnectionError デバイスのサービスをコンポーネントが取得できないとき(デバイスが接続解除されているとき)に発生します。

イベントが発生した場合に対応するイベント ハンドラを実装する必要があります。

キャラクタリスティックの読み取りまたはサブスクライブ

いったんアプリケーションがデバイスに接続したら、サービスのキャラクタリスティックに格納されている情報を読み取ることができます。あるいは、キャラクタリスティックをサブスクライブして、それが変わるたびにその情報を取得することもできます。

読み取り専用のキャラクタリスティックのみ、それに対応するプロパティが Bluetooth LE コンポーネントにあります。

メモ: サブスクリプション キャラクタリスティックには PropertyName 値もありますが、これはあくまでドキュメントのためのものです。サブスクリプション キャラクタリスティックのプロパティ名値はコンポーネントのプロパティではありません。

どのキャラクタリスティックにもイベントがあります。イベントの名前はすべて On<PropertyName>Update の形式に従います。イベント ハンドラは、プロパティ値の読み取り後にトリガされます。

  • 読み取り専用キャラクタリスティックのデータを読み取るには、Refresh<PropertyName> メソッドを呼び出します。
  • キャラクタリスティックをサブスクライブし、データ更新の受信を開始するには、Subscribe<PropertyName> メソッドを呼び出します。
  • キャラクタリスティックのサブスクライブを解除し、データ更新の受信を停止するには、Unsubscribe<PropertyName> メソッドを呼び出します。

ここで、Zephyr 心拍数モニタを例に、BatteryLevel プロパティの読み取りと Heart Rate Measurement キャラクタリスティック(HeartRateMeasurement プロパティ)のサブスクライブおよびサブスクライブ解除に使用されるメソッド名を次の表に示します。

サービス キャラクタリスティック プロパティ イベント名 読み取りメソッド サブスクライブ メソッド サブスクライブ解除メソッド
Battery Service Battery Level BatteryLevel OnBatteryLevelUpdate RefreshBatteryLevel
Heart Rate Heart Rate Measurement HeartRateMeasurement OnHeartRateMeasurementUpdate SubscribeHeartRateMeasurement UnsubscribeHeartRateMeasurement

これらを操作するには、アプリケーションの uses 句に次のユニットを追加する必要があります。

  • Iot.Family.BluetoothLE.GattTypes
  • カスタムの Types ユニット(コンポーネントでカスタム データ型を定義する場合)

キャラクタリスティックの書き込み

サービスの対応キャラクタリスティックを書き込むことにより、デバイスにデータを送信することができます。

  • イベントの名前は On<PropertyName>WriteStatus の形式に従います。デバイスに命令を送信してキャラクタリスティックに書き込んだ後で、イベント ハンドラがトリガされます。
  • キャラクタリスティックに書き込むには、プロパティに正しい値を割り当てます。キャラクタリスティックへの書き込み方法の詳細については、「キャラクタリスティックへの書き込み」を参照してください。

サービスのキャラクタリスティックが更新されたかどうかを確認するには、別のデータ型の通知をサブスクライブするか、プロパティの現在値を読み取る必要があります(どちらにするかは、使用しているデバイスによります)。

Bluetooth LE アプリケーションのトラブルシューティング

標準の Bluetooth LE サービスが Mac OS X および iOS アプリケーションで表示されない

Bluetooth LE の標準サービスである Generic Attribute Profile サービスGeneric Access Profile サービスは、Mac OS X アプリケーションと iOS アプリケーションには表示されません。

Mac OS X および iOS オペレーティング システムでは、これらのサービスに関する情報は内部的に使用され、Generic Attribute サービスGeneric Access サービスは、検出されたサービスのリストから除外されます。

Windows 版の Bluetooth LE アプリケーションで接続できない

32 ビット Windows および 64 ビット Windows 版の Bluetooth LE アプリケーションでは、デバイスへの接続を試みる前にそれらのデバイスとペアにする必要があります。

Windows では、周辺デバイスを見つけるための検出メカニズムとして ScanResponseScanResponseAllDevices をサポートしていません。代わりに、TBluetoothDeviceDiscoveryManager コンポーネントで検出メカニズムとして Connect を使用し、DeviceName プロパティに自分自身のデバイスの名前を設定する必要があります。

Android 版の Bluetooth LE アプリケーションでは[使用する権限]の構成が必要

Android 版 Bluetooth LE アプリケーションの場合は、[使用する権限]プロジェクト オプション([プロジェクト|オプション...|使用する権限])で次の必須権限を有効にする必要があります。

  • [Bluetooth]
  • [Bluetooth 管理]

関連トピック

関連項目