通信プロトコルは、ポート50023のUDP/IPに基づいています。これは、DTRをサーバーとするクライアント/サーバープロトコルであるため、DTRはクライアント(コンピューター)が要求した場合にのみ情報を送信します。サーバーは、5秒(5,000ミリ秒)以内にリクエストに応答します。通常、応答時間は100ミリ秒未満です。
リクエストの形式
クライアントからサーバーへの通信(コンピューターからDTRに送信されるリクエスト)は、バイナリ形式です。リクエストパケットには、次のバイナリデータが含まれています(整数は、すべてネットワークオーダーになっており、MSBが最初に来ます)。
- 32ビット整数:パケット番号
- 32ビット整数:リクエストID
- (任意):リクエストデータ(リクエストによって異なる)
- (任意):充填データ
メッセージの最大サイズは1,472オクテット(バイト)です。 |
パケット番号は、DTRによってエコーバックされますが、加工されることはありません。パケット番号は連続番号である必要はなく、任意の32ビット値が有効です。
リクエストIDは、リクエストされた機能(センサ情報など)を識別するための32ビット値です。リクエストIDについては、「リクエスト-応答ペアの仕様」を参照してください。
リクエストデータは、リクエストに関連付けられた0~1,464オクテットの追加データから構成されます。
充填データは、メッセージのオクテット数を増やすために使用することができます。メッセージの合計サイズが最大値(1,472オクテット)を超えない限り、任意の数のNULL文字(0x00)をリクエストの末尾に追加することができます。これは、クライアントが固定長のパケットを使用するように実装されている場合などに役立ちます。
応答の形式
DTRによって送信される応答データは、ASCII形式です。パケット番号を除き、データは人間が判読できる形式です。データ構造は次のとおりです。
- パケット番号(32ビット整数)
- 0行以上のASCII(テキスト)キーとそれらのキーに関連付けられた値(温度キーと摂氏でのプロセス温度など)
パケット番号は、変更されずにエコーバックされます。クライアント(コンピューター上のソフトウェア)は、パケット番号を使用して、リクエストのパケット番号に対する応答を確認することができます。
メッセージテキストは、テキストの行で構成され、各行は(1つの単語で表される)1つのキーとその値(1つまたは複数)で構成されます。値とキーは等号(=)で区切られ、複数の値がある場合はコンマで値が区切られます。空白(スペースまたはタブ)は、1つの値またはキー名を除きどこでも使用できます。
応答が文字列から構成される場合は、二重引用符(")で囲まれます。たとえば、以下はすべて有効なメッセージテキスト行です。
ok temp=23.45
headhum = 13.32
LEDcnt = 8341
ChemCurve = 1.234, 3.21, 0.00, 4.37, 1.11, 0.00002, 2.1345
StatusMessage = "Normal Operation"
すべてのキー識別子で大文字と小文字は区別されません。「リクエスト-応答ペアの仕様」を参照してください。ただし、この仕様のように記述することを推奨します。 |
サーバー(DTR)は、応答キーを任意の順序で送信することができます。サーバーは、特定のリクエストの必須キーを送信しますが、その他のキーは省略することができます。また、本書で指定されていないキーを送信することもできますが、クライアント(コンピューター)はそれらを無視することができます。
「リクエスト-応答ペアの仕様」では、必須キーにアスタリスクが付けられています。 |
リクエストと応答エラー
サーバー(DTR)がエラーを検出すると、エラーメッセージが返されます。詳細については、「エラーメッセージの仕様」を参照してください。エラーメッセージは、不明なリクエストである場合、または応答の必須キーのデータを収集できない場合に返されることがあります。