# CoAPゲートウェイ

CoAPゲートウェイは、リソース制約のあるデバイス向けに設計された軽量なデバイス接続を実現します。低消費電力・低帯域幅のシナリオに適しており、CoAPベースのパブリッシュ・サブスクライブ機構をサポートしています。

## 動作モード

CoAPゲートウェイは以下の2つの動作モードをサポートしています。

- **コネクションレスモード**
  - [Publish-Subscribe Broker for CoAP](https://datatracker.ietf.org/doc/html/draft-ietf-core-coap-pubsub-09) プロトコルに準拠しています。
  - 接続認証、セッション管理、ハートビートの維持は不要です。
  - サポートされる機能：
    - メッセージのパブリッシュ
    - トピックのサブスクライブ
- **コネクションモード**
  - 接続認証、セッションの永続化、ハートビート機構を導入しています。
  - クライアントは接続を確立し、セッショントークン（Token）を取得する必要があります。以降の通信ではクエリ文字列にトークンを含める必要があります。
  - サポートされる機能：
    - 接続の作成
    - 接続の切断
    - セッションの永続化（オプションでハートビート）
    - 認証

コネクションモードはCoAPゲートウェイの設定ページで構成可能です。

::: tip

コネクションモードは接続管理用のAPIを追加するのみで、パブリッシュ、サブスクライブ、サブスクライブ解除の操作は引き続き利用可能ですが、すべてのリクエストに `ClientId` と `Token` の指定が必要になります。

:::

## 基本設定

CoAPゲートウェイの **操作** 列にある **設定** ボタンをクリックして基本設定を行います。

- **Connection Required**：コネクションモードの有効・無効を切り替えます。デフォルトは有効です。
  - `true`：コネクションモードを有効にします。このモードではクライアントは接続認証、セッションの永続化、通信にセッショントークン（Token）が必要です。より厳密な接続管理が求められるシナリオに適しています。
  - `false`：コネクションモードを無効にし、コネクションレスモードに切り替えます。このモードではクライアントは接続管理なしにメッセージのパブリッシュとサブスクライブのみを行います。
- **Notification Message Type**：CoAPメッセージの通知タイプを指定します。デフォルトは `qos` です。
  - `qos`：QoS（サービス品質）で、メッセージ配信の信頼性を制御します。
  - `con`：確認可能メッセージで、送信後にクライアントのアック（ACK）が必要です。
  - `non`：非確認メッセージで、アック不要。重要度の低いまたは破棄可能なメッセージに適しています。
- **Heartbeat**：CoAPゲートウェイとクライアント間のハートビート間隔を設定します。ハートビートメッセージにより接続状態を検知し、接続の維持を保証します。タイムアウトすると接続が切断される可能性があります。デフォルトは `30秒` です。
- **Subscribe QoS**：サブスクライブするメッセージのQoSレベルを設定します。デフォルトは `coap` です。
- **Publish QoS**：パブリッシュするメッセージのQoSレベルを設定します。デフォルトは `coap` です。
- **MountPoint**：CoAPゲートウェイのマウントポイントを設定します。マウントポイントはCoAPプロトコルにおけるURLパスのプレフィックスであり、異なるアプリケーションやクライアントが特定のURLパス構造でデータ交換やアクセスを行うために利用されます。

設定が完了したら、**更新** をクリックして保存します。

## クライアント

CoAPページのクライアントタブには、デプロイメントに接続されているクライアントの基本情報が表示されます。**操作** 列から特定のクライアントを切断することも可能です。

### クライアント接続ガイド

詳細は [CoAPクライアント接続ガイド](./connection_interface.md) を参照してください。

### 接続アドレスとポート

接続アドレスおよびポート情報はデプロイメントの概要ページで確認できます。

### パブリッシュ・サブスクライブ

CoAPゲートウェイは [Publish-Subscribe Broker for CoAP](https://datatracker.ietf.org/doc/html/draft-ietf-core-coap-pubsub-09) に基づくパブリッシュ・サブスクライブ機能を実装しています。権限管理は [クライアント認可](../deployments/authz_overview.md) により一元管理されます。

### クライアントライブラリ

開発およびテストには以下のクライアントライブラリが推奨されます。

- [libcoap](https://github.com/obgm/libcoap)
- [californium](https://github.com/eclipse/californium)

## 認証管理

この機能はコネクションモードでのみ利用可能です。`ClientId`、`username`、`password` はクライアントの [Create Connection](./connection_interface.md#create-connection) リクエストで提供されます。

ゲートウェイページのCoAPゲートウェイの **操作** 列にある **認証** ボタンをクリックすると認証管理ページが開き、認証情報の追加、編集、削除が行えます。
