BACnetデータをMQTTにブリッジング：インテリジェントビルの実装を向上させるソリューション

# 

![BACnetデータをMQTTにブリッジング：インテリジェントビルの実装を向上させるソリューション](https://assets.emqx.com/images/2b1b1904277a67203d37fbdcf0c471c3.png?imageMogr2/thumbnail/1520x684)

**目次**

- [なぜBACnetをMQTTにブリッジするのか？](#why-bridge-bacnet-to-mqtt)
- [BACnetからMQTTへのブリッジングのアーキテクチャ](#the-architecture-of-bacnet-to-mqtt-bridging)
- [Neuronを介したBACnetからMQTTへのブリッジング](#bridging-bacnet-to-mqtt-via-neuron)
- [まとめ](#conclusion)

前回のブログ投稿では、[BACnetプロトコル](https://www.emqx.com/en/blog/bacnet-protocol-basic-concepts-structure-obejct-model-explained)の初心者ガイドを提供しました。この記事では、BACnetをMQTTにブリッジする理由と方法について説明します。

## なぜBACnetをMQTTにブリッジするのか？

スマートビルが人気を博するにつれて、それに含まれる機器はネットワーク化されました。クラウド技術への傾向は、単一ビルの監視とリモート統一監視の統合を促し、クラウド側のコラボレーションアーキテクチャが好まれています。現在の主な課題は、ビジネスと技術の両面から、BACnetネットワークデータをクラウドに送信する方法を見つけ出すことです。

IoT分野では、[MQTTプロトコル](https://www.emqx.com/en/blog/the-easiest-guide-to-getting-started-with-mqtt)は事実上のデータ伝送標準です。これは、IoT（モノのインターネット）アプリケーションのリモート監視と通信に一般的に使用される軽量メッセージングプロトコルです。これにより、デバイス間でメッセージを簡単かつ柔軟に転送すると同時に、多数の同時接続を効果的に処理することができます。

MQTTには、IoTアプリケーションで人気があるいくつかの利点があります：

- **軽量**：MQTTは軽量に設計されており、最小限の処理能力とメモリを必要とし、リソースが限られているデバイスに適しています。
- **低帯域幅**：MQTTは低帯域幅ネットワーク用に最適化されており、限られた帯域幅接続でも効率的なメッセージ転送を可能にします。
- **非同期通信**：MQTTはパブリッシュ-サブスクライブモデルを使用し、クライアント間の非同期通信を可能にします。これにより、デカップルなメッセージ交換とより良いスケーラビリティが実現されます。
- **QoSレベル**：MQTTはメッセージ配信のためのさまざまなサービス品質（QoS）レベルをサポートしており、異なる信頼性とメッセージ保証のレベルを可能にします。
- **簡単な統合**：MQTTプロトコルは、シンプルで明確に定義されたメッセージ形式に従うため、さまざまなIoTプラットフォームやアプリケーションと簡単に統合できます。
- **強力なコミュニティ**：MQTTには活発で強力なコミュニティがあり、実装と管理のためのオープンソースツールやライブラリを含む、広範なサポートとドキュメントを提供しています。
- **大規模な接続の効率的な処理**：MQTTは大規模なIoT展開に適した大量の同時接続を効率的に処理する能力を持っています。

これらの問題を解決するために、BCAnetをMQTTにブリッジすることで、互いを補完し合うことができます。

## BACnetからMQTTへのブリッジングのアーキテクチャ

このブログでは、EMQから[Neuron](https://neugates.io/)と[EMQX](https://www.emqx.com/en/products/emqx)を使用してBACnetからMQTTへのブリッジングを実現します。NeuronはBACnetプロトコルをMQTTに変換し、EMQXは[MQTTブローカー](https://www.emqx.com/en/blog/the-ultimate-guide-to-mqtt-broker-comparison)として大量の接続とデータを処理します。



Neuronは、標準プロトコルやデバイス固有のプロトコルを使用するさまざまな工業デバイスを接続する現代の[産業用IoT](https://www.emqx.com/en/blog/iiot-explained-examples-technologies-benefits-and-challenges)接続サーバーです。リソースが限られたさまざまなIoTエッジハードウェアデバイスで実行できる軽量な工業用ソカップルされたメッセージ交換とより良いスケーラビリティが実現されます。



- **QoSレベル**：MQTTはメッセージ配信のさまざまな品質保証（QoS）レベルをサポートし、異なるレベルの信頼性とメッセージ保証を提供します。
- **簡単な統合**：MQTTプロトコルは、シンプルでよく定義されたメッセージフォーマットに従っているため、さまざまなIoTプラットフォームやアプリケーションと簡単に統合できます。
- **堅牢なコミュニティ**：MQTTには堅牢で活動的なコミュニティがあり、実装と管理のための広範なサポートとドキュメント、オープンソースのツールとライブラリを提供しています。
- **大規模接続の効率的な処理**：MQTTは大規模なIoT展開に適した多数の同時接続を効率的に処理することができます。

これらの問題を補完し解決するために、BACnetをMQTTにブリッジすることができます。

## BACnetからMQTTへのブリッジングのアーキテクチャ

このブログでは、EMQからの[Neuron](https://neugates.io/)と[EMQX](https://www.emqx.com/en/products/emqx)を使用して、BACnetからMQTTへのブリッジングを実現します。NeuronはBACnetプロトコルをMQTTに変換でき、EMQXは[MQTTブローカー](https://www.emqx.com/en/blog/the-ultimate-guide-to-mqtt-broker-comparison)として機能し、大量の接続とデータを処理します。

Neuronは、標準プロトコルまたはデバイス固有のプロトコルを使用するさまざまな工業デバイスを接続できる、最新の[工業用IoT](https://www.emqx.com/en/blog/iiot-explained-examples-technologies-benefits-and-challenges)接続サーバーです。Neuronは、リソースが限られたさまざまなIoTエッジハードウェアデバイスで実行できる軽量の工業ソフトウェアとして、データ中心の自動化デバイスへの統一アクセスを実現し、インテリジェント製造の基本サポートを提供することを目指しています。

EMQXは、大規模でスケールのあるクラウドネイティブ分散IoT MQTTメッセージサーバーです。世界で最もスケーラブルなMQTTメッセージサーバーとして、EMQXはIoTデバイスの効率的で信頼性の高い大量接続を提供し、メッセージおよびイベントフローデータの高性能リアルタイム処理を可能にし、ユーザーが迅速に重要なIoTプラットフォームとアプリケーションを構築するのを支援します。Neuronがエッジからデータを収集し、MQTTに変換してEMQXにアップロードする方法を以下の図に示します。

![diagram](https://assets.emqx.com/images/db2d9e8b9a3eeb37c0d3ac25c2a9cd55.png?imageMogr2/thumbnail/1520x)

:

### Neuronを介してBACnetからMQTTへのブリッジング

このセクションでは、Neuronを使用してBACnet/IPデバイスからデータを収集し、収集したデータをEMQXにアップロードし、MQTTXを使用してそれを表示する方法について説明します。

### EMQXのクイックスタート

EMQXは複数のインストール方法を提供しています。詳細なインストール方法は[ドキュメント](https://www.emqx.io/docs/en/v5.0/deploy/install.html)で確認できます。この例では、コンテナデプロイメントを使用してEMQXを迅速に体験します。

以下のコマンドを実行してDockerイメージを取得します：

```
docker pull emqx/emqx-enterprise:5.1.0
```

以下のコマンドを実行してDockerコンテナを起動します：

```
docker run -d --name emqx-enterprise -p 1883:1883 -p 8083:8083 -p 8084:8084 -p 8883:8883 -p 18083:18083 emqx/emqx-enterprise:5.1.0
```

ウェブブラウザを通じて`http://localhost:18083`（"localhost"を実際のIPアドレスに置き換えてください）にアクセスして、EMQXダッシュボードにアクセスします。これにより、デバイス接続の管理と関連指標の監視が可能になります。このチュートリアルのためにDockerコンテナを実行し続けてください。ダッシュボードでより多くの機能を体験するには、[ドキュメント](https://www.emqx.io/docs/en/v5.0)を参照してください。

初期ユーザー名: `admin`、初期パスワード: `public`

### Neuronのクイックスタート

Neuronはさまざまなインストール方法を提供しています。詳細なインストール方法は[ドキュメント](https://neugates.io/docs/en/latest/installation/installation.html)で確認できます。この例では、コンテナ化されたデプロイメントを使用します。

Dockerイメージを取得します：

```
$ docker pull emqx/neuron:latest
```

Dockerコンテナを起動します：

```
$ docker run -d --name neuron -p 7000:7000 --privileged=true --restart=always emqx/neuron:latest
```

ウェブブラウザを開き、ゲートウェイのアドレスとポート番号を入力してNeuronを実行します。デフォルトのポート番号は7000です。ブラウザを通じて`http://localhost:7000/`（"localhost"を実際のIPアドレスに置き換えてください）にアクセスできます。

#### ステップ1：ログイン

初期ユーザー名とパスワードでログインします：

- ユーザー名: `admin`
- パスワード: `0000`

#### ステップ2：サウスバウンドデバイスの追加

**設定**メニューから**サウスデバイス**を選択し、サウスデバイスインターフェースに入ります。**デバイス追加**をクリックして新しいデバイスを追加します。

- 名前: デバイスの名前を入力します。例えばbacnet-1；
- モード: プラグイン
- プラグイン: ドロップダウンボックスから**BACnet/IP**プラグインを選択します。

#### ステップ3：サウスバウンドデバイスのパラメータ設定

サウスバウンドデバイスを追加した後、自動的にデバイス設定インターフェースに入り、パラメータを入力して提出します。

- デバイスIPアドレス：デバイスIPを入力；
- デバイスポート：デフォルトは47808です。

#### ステップ4：デバイスカードにグループを作成

デバイスノードカードの空白スペースをクリックすると、グループリスト管理インターフェースに入ります。**作成**をクリックして、グループを作成するダイアログボックスが表示されます。パラメータを入力して提出します。

- グループ名：グループ名を入力します。例えばgroup-1；
- インターバル：1000。

#### ステップ5：グループにタグを追加

グループカードの空白スペースをクリックし、ポイントリスト管理インターフェースに入り、**作成**をクリックしてデータポイントを追加するページに入ります。

データポイントのパラメータを入力して提出します。

- 名前：位置名を入力します。例えばtag-1；
- 属性：ドロップダウンメニューから位置属性を選択します。例えばRead、Subscribe；
- タイプ：ドロップダウンメニューからデータタイプを選択します。例えばFLOAT；
- アドレス：ドライバアドレスを入力します。例えば、AI3333。AIはデバイスのアナログ入力オブジェクトタイプを表し、3333はアナログ入力オブジェクトのオブジェクト識別子を表します；
- 説明、小数、精度：未記入。

#### ステップ6：データ監視で収集データを表示

左ナビゲーションメニューから**監視 → データ監視**を選択します。作成したデータポイントによって読み取られた値を表示します。

データ監視では、グループごとに値が表示されます。

- サウスデバイス：ドロップダウンメニューから表示したいサウスバウンドデバイスを選択します。例えば、作成したbacnet-1；
- グループ名：ドロップダウンメニューから選択したサウスバウンドデバイスの下で表示したいグループを選択します。例えば、作成したgroup-1；
- 選択後、ページには選択したグループ内のすべてのポイントが読み取った値が表示されます。

#### ステップ7：アプリケーションにノースバウンドプラグインモジュールを追加

ノースバウンドアプリケーションを作成することにより、Neuronはノースバウンドアプリケーションと接続を確立し、収集されたデバイスデータをEMQXにアップロードします。

**設定**メニューの**ノースバウンドアプリ**を選択し、**アプリケーション追加**をクリックします。

MQTTクラウド接続モジュールを追加します：

- 名前：アプリケーション名を入力します。例えば、MQTT；
- プラグイン：ドロップダウンからMQTTプラグインを選択します。

#### ステップ8：ノースバウンドアプリケーションパラメータの設定

ノースバウンドアプリケーションを追加した後、自動的にアプリケーション設定インターフェースに入り、パラメータを入力して提出します。

MQTT接続の設定：

- **クライアントID**：これらのIDは互いに独立しているべきです（IDの重複はクライアントがキックされる原因になります）。例えば、MQTT-12123と設定します；
- **QoSレベル**：デフォルトは0に設定；
- **アップロードフォーマット**：デフォルトはValues-formatに設定；
- **書き込みリクエストトピック**：デフォルトは/neuron/MQTT/write/reqに設定；
- **書き込みレスポンストピック**：デフォルトは/neuron/MQTT/write/respに設定；
- **オフラインデータキャッシング**：デフォルトはオフに設定；
- **ブローカーホスト**：作成したemqxブローカーのアドレスを入力します。通常はlocalhost、つまり実際のIPアドレスを入力します；
- **ブローカーポート**：デフォルトは1883に設定；
- **ユーザー名、パスワード**：必要ありません；
- **SSL**：デフォルトはオフに設定。

#### ステップ9：サウスバウンドポイントグループにサブスクライブ

新しく作成したMQTTアプリケーションノードカードの空白スペースをクリックして、サブスクリプショングループインターフェースに入り、"サブスクリプション追加"をクリックします。

サウスバウンドデバイスのデータグループにサブスクライブします：

- サウスデバイス：ドロップダウンリストから作成したサウスバウンドデバイスを選択します。例えば、bacnet-1；
- グループ：ドロップダウンリストからサブスクライブするグループを選択します。例えば、group-1；
- トピック：MQTTトピックは、この例ではデフォルトで`/neuron/mqtt/bacnet-1/group-1`に設定されています。次に、このトピックをサブスクライブし、MQTTXでメッセージを受信します。

#### ステップ10：MQTTクライアントでデータを表示

サブスクライブした後、[MQTTクライアント](https://www.emqx.com/en/blog/mqtt-client-tools)を使用してEMQXに接続し、報告されたデータを表示できます。ここでは、公式ウェブサイトからダTT；

- プラグイン：ドロップダウンからMQTTプラグインを選択します。

#### ステップ8：ノースバウンドアプリケーションパラメータの設定

ノースバウンドアプリケーションを追加した後、自動的にアプリケーション設定インターフェースに入り、パラメータを入力して提出します。

MQTT接続の設定：

- **クライアントID**：これらのIDは互いに独立している必要があります（IDの重複はクライアントの切断を引き起こす可能性があります）。例えば、MQTT-12123と設定します；
- **QoSレベル**：デフォルトは0；
- **アップロードフォーマット**：デフォルトはValues-format；
- **書き込みリクエストトピック**：デフォルトは/neuron/MQTT/write/req；
- **書き込みレスポンストピック**：デフォルトは/neuron/MQTT/write/resp；
- **オフラインデータキャッシング**：デフォルトはオフ；
- **ブローカーホスト**：作成したemqxブローカーのアドレスを入力します。通常はlocalhost、つまり実際のIPアドレスです；
- **ブローカーポート**：デフォルトは1883；
- **ユーザー名、パスワード**：必要ありません；
- **SSL**：デフォルトはオフ。

#### ステップ9：サウスバウンドポイントグループのサブスクライブ

新しく作成したMQTTアプリケーションノードカードの空白スペースをクリックして、サブスクリプショングループインターフェースに入り、「サブスクリプション追加」をクリックします。

サウスバウンドデバイスのデータグループにサブスクライブします：

- サウスデバイス：ドロップダウンリストから作成したサウスバウンドデバイスを選択します。例えば、bacnet-1；
- グループ：ドロップダウンリストからサブスクライブするグループを選択します。例えば、group-1；
- トピック：MQTTトピックは、この例ではデフォルトで`/neuron/mqtt/bacnet-1/group-1`に設定されます。次に、このトピックをサブスクライブして、MQTTXでメッセージを受信します。

#### ステップ10：MQTTクライアントでデータを表示

サブスクライブした後、[MQTTクライアント](https://www.emqx.com/en/blog/mqtt-client-tools)を使用してEMQXに接続し、報告されたデータを表示できます。ここでは、強力なクロスプラットフォームMQTTクライアントツールであるMQTTXを使用します。これは、[公式ウェブサイト](https://www.emqx.com/en/products/mqttx)からダウンロードできます。

MQTTXを起動したら、メインページの**+ 新しい接続**をクリックし、設定パラメータを入力し、右上隅の**接続**をクリックします。

- 名前：メッセージの表示を容易にするために命名します。例えば、bacnetと命名することができます；
- クライアントID：デフォルト値を使用しても問題ありません。IDが独立していることを確認してください；
- ホスト：**mqtt://** を選択し、`localhost`（"localhost"を実際のIPアドレスに置き換えてください）を入力します；
- ポート：1883。

オプションのパラメータを入力した後、完了したら右上隅の**接続**ボタンをクリックします。接続に成功すると、トピックをサブスクライブできます。

**サブスクリプション追加**をクリックし、トピックはステップ9と同じである必要があります。例えば、`/neuron/mqtt/bacnet-1/group-1`を入力します。

サブスクリプションに成功すると、MQTTXはNeuronによって収集および報告されたデータを継続的に受信することができます。以下の図のように表示されます。

![MQTTX](https://assets.emqx.com/images/e32314ceadfafa39f4582483c497bdfc.png?imageMogr2/thumbnail/1520x)

## まとめ

ビルの機能をよりスマートで安全で快適にするニーズが高まるにつれて、ビル設備からのデータ需要も高まるでしょう。クラウドコンピューティングとAI技術の統合は、技術アーキテクチャの変化に適応するためにBACnetを必要とします。ますます人気が高まっているオプションは、MQTTに切り替えることです。このブログは、スマートビルのためのIoTプラットフォームを要求に応じて安全かつ便利に実装するためのソリューションをユーザーに提供し、接続性を向上させ、人々がよりスマートで安全で快適に生活し、働くことを可能にします。