利用可能なすべてのメッセージングプロトコルでは、1つだけを選択するのは難しい場合があります。 そして、そこには非常に多くのオプションがあるので、あなたやあなたのチームにとってうまくいかないものを試してみるという状況に自分自身を見つけるのはとても簡単です。 Mqttは、クライアントとブローカーのみを必要とする軽量プロトコルであるため、面倒なことをしたくない状況に最適です。 この記事では、このプロトコルで何ができるのか、そしてどのようにこれらのことを実現するのかを探ります。
MQTTとは何ですか?
Mqttは、クライアントとブローカーのみを必要とする軽量のメッセージングプロトコルです。 それはあなたからほとんど必要としないので、あなたが面倒や騒ぎを望まない状況に最適です。
メッセージングプロトコルとは何ですか?
メッセージングプロトコルは、さまざまなマシン上のアプリケーションが通信できるようにするために使用される一連のルールです。 Mqttは、モノのインターネット(IoT)用に特別に設計されました。 このように幅広い他のプロトコルが利用可能であるため、この目的のために別のプロトコルを作成するのは奇妙に思えるかもしれません。 しかし、非常に多くのデバイスやサービスがこの分野に依存しているため、時間の経過とともにますます多くのデバイスやサービスが見られるようになるでしょう。
MQTTの何がそんなに素晴らしいのですか?
Mqttは本当にユニークです。なぜなら、Mqttはほとんど何も提供しないからです。 他の多くのプロトコルのように専用サーバーやフォワーダーは必要ありません。つまり、インフラストラクチャの問題も発生しません。 必要なのは、既存のブローカーとインターネット接続のあるハードウェアだけです。 その作業の質と軽さのおかげで、このプロトコルはますます人気が高まっています。 オープンソースで無料で使用できるため、料金やサブスクリプション費用を支払うことなく簡単に開始できます。 また、ArduinoのMQTTライブラリにブローカーのサポートが組み込まれているため、どのような優れた製品が登場するのか楽しみです。
MQTTの機能は何ですか?
Mqttは、シンプルで軽量なメッセージングプロトコルの最良の例の1つです。 その主なセールスポイントは、使いやすさです。インターネットに接続されているデバイスであれば、このプロトコルが提供する機能を利用できます。 しかし、このプロトコルには使いやすさだけではありません。 あなたがそれから他に何を期待できるかを探求しましょう!
MQTTの使用例
a。 ポンプとバルブを制御する工場内のIoTデバイス
b。 クラウド上のデータベースに報告するセンサーを備えた気象観測所
c。 ドアが開閉したときに報告する警報システム
d。 動きが検出されると、オフィスの一部のライトが点灯します
1. MQTTとは何ですか?その機能は何ですか?
MQTTはMessageQueuing Telemetry Transportの略で、複雑に聞こえるかもしれませんが、IoTデバイスがインターネットを使用して相互に通信するための方法であることを意味します。 HTTP、SMTPなどのTCP / IP上で実行されますが、インターネット経由で通信するためのHTTPとは異なり、MQTTは、ネットワーク(通常はIPネットワーク)で相互に接続されているデバイスで使用されます。 これは、RaspberryPiやArduinoボードなどに接続する低電力の組み込みデバイスを使用するIoTで最も一般的に使用されます。
2.どのように機能しますか?
メールのように機能します。 IoTデバイスは、トピックにメッセージを公開します。 これは誰かにメールを送信するようなものですが、人ではなくトピック名です。 メッセージには最大2kbのデータを含めることができ、パケットとして送信されます。
2番目のMQTTサブスクライバーは、独自の一意のIDまたはクライアントIDを持つパケットをリッスンします。 次に、メッセージを処理します。 誰かがメールを受け取ったとき、彼らはそれを使って何かをするようなものです。読んだり、どこかに送ったりなど。
MQTTにはサービス品質(QoS)レベルがあります。これは、メッセージにさまざまな優先度レベルが存在する可能性があることを意味します。 QoSレベルはクライアントによって設定され、送信される各パケットにはそのレベルの優先度があります。
3.MQTTの利点
軽量で、TCP / IPで実行され、HTTPよりもオーバーヘッドが少ない
メッセージは、宛先デバイスに送信できるようになるまでキューに保存されます
再接続サポートが組み込まれています
各クライアントは、認証と暗号化のための独自のセキュリティ構成を持つことができます
QoSにより、さまざまなメッセージタイプにさまざまな優先度レベルを設定できます
4.MQTTのアプリケーション
現実の世界でどのように使用されているかの例として、M2M Allianceがあります。これは、デバイス間でデータを転送するための安全なプラットフォームで「モノ」を接続することを目的としたプロジェクトです。 もう1つのユースケースは、CEPHプロジェクトです。 これは、複数のユーザーに同時にファイルを保存および共有できるクラウドストレージシステムです。 MQTTを使用してデータを暗号化することで分散アクセスを保護します。これにより、データのセキュリティを気にすることなく、さまざまなゲートウェイを使用してIoTデバイス間でデータを転送できます。
5.MQTTの使用を開始する
最初に必要なのはMQTTクライアントです。これは、メッセージを送受信するアプリケーションです。 Raspberry Pi Foundationには、PiデバイスでMQTTの使用を開始するためのガイドがあります。 Pythonプログラミング言語で実行するコードを提供するHacksterのガイドなど、他にも利用できるガイドがあります。
最高のMQTTオンラインコース
- MQTTをマスターする
- マスターMQTTプロトコル
- MQTTクライアントAndroidアプリを開発する
- MQTTマスタークラス
- MQTTプロトコルの習得:初心者から上級者向けのレベルガイド
- IoT:Adafruit、App Inventor、ESP8266を使用したMQTT
- Nodered、Wifi、Bluetoothを搭載したMQTT Nodemcu(ESP8266)
MQTTブローカーを構築するためのTLSとSSL
TLSを使用する長所:
-セキュリティ:TLSは、クライアントとブローカー間の安全な接続を提供します。 これは、man-in-the-middle攻撃や盗聴から保護するのに役立ちます。
-認証:TLSはブローカーとクライアントの認証を提供し、許可されたクライアントのみがブローカーに接続できるようにします。
-暗号化:TLSは、クライアントとブローカー間のデータの暗号化を提供し、許可されていない個人に情報が表示されないように保護します。
TLSを使用することの短所:
-パフォーマンス:TLSは通信にオーバーヘッドを追加する可能性があり、パフォーマンスを低下させる可能性があります。
-証明書:TLSを使用するには、クライアントとブローカーの両方の証明書が必要です。 これらの証明書は、取得が難しく、使用に費用がかかる可能性があり、TLSの使用コストが増加する可能性があります。
SSLを使用する長所:
-セキュリティ:SSLは、TLSと同様に、クライアントとブローカー間の安全な接続を提供します。 また、中間者攻撃や盗聴からの保護にも役立ちます。
-証明書:SSLはTLSの上に構築されているため、トラフィックの暗号化に同じ証明書を使用できます。
SSLを使用することの短所:
-パフォーマンス:クライアントとブローカー間の暗号化により、通信にオーバーヘッドが追加され、パフォーマンスが低下します。
-メモリ使用量:SSLプロトコルは、ブローカーとの暗号化/復号化セッションを維持するため、他のプロトコルよりも多くのメモリを使用します。
-バージョンの問題:SSLは古いプロトコルであり、TLSが提供する機能の一部(新しい暗号など)をサポートしていません。
ご覧のとおり、TLSとSSLはどちらも、クライアントとブローカー間の通信にセキュリティ、認証、および暗号化を提供します。ただし、それらはわずかに異なる方法で行います。 MQTTブローカーにTLSとSSLのどちらを使用するかを決定する際の明確な勝者は誰もいません。決定は、インフラストラクチャから必要なものと、使用できる時間/お金の量によって異なるためです。
結論として、プロジェクトのニーズに応じて正しい答えがあると思います。 この場合、SSLよりも多くの利点があるため、TLSを使用することをお勧めします。
IoTプロジェクトでMQTTプロトコルを使用する5つの理由
MQTTは、リソースに制約のあるデバイス用に設計されたマシンツーマシン(M2M)メッセージングプロトコルであり、デバイスをクラウドに接続します。
1.軽量で使いやすい:MQTTは、軽量で使いやすいように設計されたパブリッシュ/サブスクライブメッセージングプロトコルです。
2.フットプリントが小さい:MQTTはHTTPの約1/10の帯域幅を使用するため、ネットワークリソースが限られているIoTアプリケーションに最適です。
3. QoSをサポートします。MQTTはQualityof Service(QoS)をサポートします。これにより、必要な遅延または品質でのメッセージの配信が保証されます。
4.任意のネットワークで実行できます。MQTTは、WiFi、Bluetooth Low Energy(BLE)、または2G / 3Gセルラーネットワークで実行できるクロスプラットフォームプロトコルです。
5.多くのプログラミング言語で利用可能ないくつかのクライアントライブラリがあります。C、C ++、JavaScript、Arduino IDE、Python、およびJava用のクライアントライブラリがあります。
PCまたはVPSサーバーでDockerコンテナを使用してMQTTBrokerをセットアップするにはどうすればよいですか?
MQTTは、マシンツーマシン(M2M)/「IoT」メッセージングプロトコルであり、非常に軽量なパブリッシュ/サブスクライブメッセージングトランスポートとして設計されています。 これは、小さなコードフットプリントが必要な、および/またはネットワーク帯域幅が貴重である遠隔地との接続に役立ちます。
この記事では、PCまたはVPSサーバーでDockerコンテナーを使用してMQTTブローカーをセットアップする方法を示します。
Dockerは、すべての依存関係を持つアプリケーションを簡単にデプロイするのに役立つコンテナー化エンジンです。 各Dockerホストに一貫した環境を提供し、時間を節約し、さまざまなLinuxディストリビューション間でのコードの移植性を強化できます。 たとえば、多数のシステムライブラリまたはいくつかのまれなライブラリバージョンに依存しているため、簡単に移植できないアプリケーションの場合は、すべてをまとめてDockerコンテナとしてデプロイできます。
1)Windows / Mac用のDockerのインストール
Dockerは、MicrosoftWindowsおよびMacOSXユーザーが利用できます。 適切なバージョンは、https://docs.docker.com/docker-for-windows/install/からダウンロードできます。
2)ホストにDocker-composeをインストールします
自家製のMQTTブローカーを簡単にデプロイするために、docker-composeツールを使用します。 単純なYAMLファイルを使用してマルチコンテナーDockerアプリケーションを定義して実行できます。 docker-composeの詳細については、https://docs.docker.com/compose/をご覧ください。
docker-composeツールはhttps://github.com/docker/compose/releases/からダウンロードできます。これが完了すると、ターミナルで「docker-compose」コマンドを実行して、そのバージョンを確認するか、そのサブコマンドのいずれかを使用できるようになります。
この記事の基本的なDocker用語:
1)「Dockerコンテナ」は、dockerrunコマンドを使用してイメージを実行するときにバックグラウンドで実行されるプロセスです。 イメージの実行中のインスタンスは、docker buildでの作成に関して、「コンテナー」と呼ばれます。
2)「Dockerイメージ」は、Dockerコンテナを作成するための手順が記載された読み取り専用のテンプレートです。 これは、作成する最終イメージのさまざまな状態を表す一連のファイルシステムレイヤーで構成されています。
3)copy at docker buildコマンドは、現在の作業ディレクトリにあるDockerfileから説明を読み取り、現在のイメージの上にある新しいレイヤーで適切なコマンドを実行することにより、イメージをビルドします。
4)「ボリューム」は、ホストマシン上のローカルフォルダーをDockerコンテナー内のディレクトリにマップできるようにするフォルダーです。 これは、たとえば、コンテナまたは構成ファイルに関するデータを保存する場合に役立ちます。 docker runを使用して、ホストシステムからフォルダーのパスを指定することでボリュームを作成できます。
YAMLファイルは、外部データベース、MQTTサーバーなどに接続するための情報と、作成する必要のあるコンテナーに関する情報を含む構成ファイルです。 次のセクションでは、ブローカーを構成するためのYAMLファイルを作成します。
3)MQTTBrokerを構成するためのYAMLファイルを作成する
YAMLファイルは通常、コロン( “:”)で接続されたいくつかのキーと値のペアで構成されます。 YAMLの詳細については、https://en.wikipedia.org/wiki/YAML#Syntaxをご覧ください。
この例では、次のようにMQTTブローカーを構成するためのYAMLファイルを作成します。
バージョン:「3」
YAMLのこのセクションでは、コンテナーの名前を「homer-mqtt」として定義し、コンテナーの作成に使用するイメージを指定します。 この場合、https://hub.docker.com/_/homer-mqtt/からDockerHubからイメージ「davidtgoldblatt / homer-mqtt」を選択します。
YAMLファイルでは、次のようにいくつかのボリュームも宣言しています。
ボリューム:
-/ var / run / docker.sock:/var/run/docker.sock
これらのボリュームにより、Dockerコンテナー用の永続ストレージが可能になり、サーバーの再起動やクラッシュ後も設定を維持できます。 ボリュームの詳細については、https://docs.docker.com/engine/userguide/dockervolumes/をご覧ください。
データベースの詳細を指定するために、次のエントリを含む「db_addresses」セクションを追加します。
db_addresses:
-“host = 172.17.0.2 port = 3306 user = homer dbname = homer”
上記の例では、データベースインスタンスのホストとポートを指定しています。 ユーザーを指定するときは、ユーザー名の前に「@」記号を追加する必要があることに注意してください。 これは、Unixシステムではユーザー名が文字と数字の両方で構成されているためです。 これを省略すると、Dockerは次のようなエラーで文句を言います。
@や*などの特殊文字をエスケープする必要があります
データベースのクレデンシャルを指定するために、次のように「database_password」セクションを追加します。
database_password: “homerun1”
上記の例では、選択したパスワードを使用する必要があります。 初めてデータベースパスワードを設定する場合は、パスワードなしで新しいrootユーザーを作成する方法に関するガイドをここで参照できます:https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user .html
MQTTサーバーの詳細を指定するために、次のエントリを含む「mqtt_server」セクションを追加します。
mqtt_server:
-名前:mqttホスト:172.17.0.1ポート:8883ユーザー名: “homerun”パスワード: “homerun1”
上記の例では、ポート8883でブローカーを実行し、データベースに作成した「homerun」のユーザー名と「homerun1」のパスワードを使用します。
4)Dockerを使用してMQTTブローカーを実行します
このステップでは、YAMLファイルからDockerコンテナーを作成し、実行します。
これを行うには、YAMLファイルがあるディレクトリにcdして、次のように「docker-composeup」を実行します。
$ docker-構成する
このコマンドは、YAMLファイルの説明に基づいて新しいDockerコンテナーを構築し、起動します。
これをバックグラウンドで開始する場合は、代わりに「docker-composeup-d」を使用してください。 Dockerコンテナのログを印刷する場合は、次のように「docker-composelogsmqttclient」を実行します。
$ docker-ログの作成mqttclient
次のように「docker-composeps」を使用して、Dockerコンテナをリアルタイムで確認することもできます。
$ docker-psを作成します
5)Dockerを使用してMQTTクライアントを実行する
このステップでは、YAMLファイルからDockerコンテナーを作成し、実行します。
これを行うには、YAMLファイルがあるディレクトリにcdして、次のように「docker-composeup」を実行します。
$ docker-構成する
このコマンドは、YAMLファイルの説明に基づいて新しいDockerコンテナーを構築し、起動します。
これをバックグラウンドで開始する場合は、代わりに「docker-composeup-d」を使用してください。 次のように「docker-composeps」を使用して、Dockerコンテナをリアルタイムで確認することもできます。
$ docker-psを作成します
6)DockerでMQTTクライアントを使用する
YAMLファイルが設定されたので、DockerでMQTTクライアントの使用を開始できます。
これを行うには、YAMLファイルがあるディレクトリに移動し、次のように「dockerexec」を実行します。
$ docker exec -it mqttclient / bin / bash
これで、「/ home / homerun」(Dockerコンテナのホームディレクトリ)というディレクトリが表示され、そのディレクトリ内にいるはずです。
次のように「mysql-uroot-proot」と入力すると、データベースが表示されます。
$ mysql -uroot -proot
画面にすべてのデータベースが表示されます。 MySQLインスタンスのパスワードなしで新しいrootユーザーを作成する方法については、https://homer-mqtt.readthedocs.io/en/latest/configure_database_and_create_new_root_user.htmlを参照してください。
DockerでMQTTクライアントコマンドを実行するには、次のように「sbin / mqtt」と入力する必要があります。
$ sbin / mqtt -c /home/homerun/config.yaml
上記の例では、-cフラグを使用して構成ファイルを指定します。これにより、このチュートリアルで作成した構成ファイルからMQTT設定が読み取られます。
MQTTクライアントが稼働しているかどうかを確認するには、次のように「docker-composeps」を使用できます。
$ docker-psを作成します
上記の例では、MQTTクライアントが正常に開始されています。 これで、すべてのデータベースが画面に表示されます。
DockerでMQTTクライアントコマンドを実行するには、次のように「sbin / mqtt」と入力する必要があります。
$ sbin / mqtt -c /home/homerun/config.yaml
上記の例では、-cフラグを使用して構成ファイルを指定します。これにより、このチュートリアルで作成した構成ファイルからMQTT設定が読み取られます。
MQTTクライアントが稼働しているかどうかを確認するには、次のように「docker-composeps」を使用できます。
$ docker-psを作成します
上記の例では、MQTTクライアントが正常に開始されています。 これで、すべてのデータベースが画面に表示され、いくつかのメッセージを公開して、すべてが正常に機能しているかどうかをテストできます。
$ docker exec -it mqttclient / bin / bash
$ sbin / mqtt publish -t’test ‘-h 172.17.0.1 -m’hello world!’
$ docker exec -it mqttclient / bin / bash
$ sbin / mqtt subscribe -t’test ‘-h 172.17.0.1 -u mqttuser
7)Dockerを使用したMQTTクライアントのクリーンアップ
Dockerコンテナを停止するには、次のように「docker-composedown」を実行する必要があります。
$ docker-作成する
8)Dockerボリュームを使用したMQTTクライアントのクリーンアップ
mysqlデータベースとmqttユーザーの作成を停止するには、-vフラグを使用できます。
$ docker-compose down -v
YAMLファイルを含むディレクトリを削除して環境をクリーンアップすることもできます。
Mysqlデータベースとmqttユーザーが正常に作成されました! Dockerコンテナを削除すると、自動的に削除されます。 これで、「exit」と入力してこのシェルを終了できます。
このチュートリアルでは、Dockerコンテナーを介してMQTTクライアントを構成する方法を説明しました。
結論
MQTTは、マシンツーマシン(M2M)または「モノのインターネット」接続プロトコルです。 非常に軽量なパブリッシュ/サブスクライブメッセージングトランスポートとして設計されました。MQTTは、低電力センサー、ウェアラブル、およびその他のインターネットに接続された小さなものをクラウドに接続するのに役立ちます。 MQTTはパブリッシュ/サブスクライブモデルを使用するため、データの送信頻度が低いデバイスや、ネットワーク帯域幅が重要なデバイスに最適です。