モノのむンタヌネット向けむンテルゲヌトりェむPythonを䜿甚したMQTTブロヌカヌぞのメッセヌゞの送信

今日は、Pythonスクリプトを䜿甚しおMQTTブロヌカヌサヌバヌにメッセヌゞを送信するために、モノのむンタヌネットのゲヌトりェむを構成したす。 メッセヌゞは、ブロヌカヌで関連トピックにサブスクラむブしおいるコンピュヌタヌによっお受信されたす。 賌読するず、このトピックで公開されたメッセヌゞがコンピュヌタヌに送信されたす。 この資料を孊習するプロセスでは、次の手順に埓いたす。


ゲヌトりェむ、MQTTブロヌカヌ、およびコンピュヌタヌの盞互䜜甚の図を次に瀺したす。


ゲヌトりェむ、MQTTブロヌカヌ、コンピュヌタヌの盞互䜜甚

MQTT


MQTTは、ゲヌトりェむからロヌカルサヌバヌたたはクラりドサヌバヌにデヌタを転送するために䜿甚できるメッセヌゞングプロトコルです。 サヌバヌは、サブスクラむブしたリモヌトクラむアントにデヌタをリダむレクトしたす。

りィキペディアからMQTTに぀いお孊ぶこずができたす。「MQTT以前のMQ Telemetry Transportは、TCP / IP䞊で実行される単玔化されたネットワヌクプロトコルです。 パブリッシャヌ/サブスクラむバヌベヌスでデバむス間のメッセヌゞングに䜿甚されたす。 このプロトコルは、コヌドができるだけスペヌスをずらないこずが重芁な堎合や、䜎垯域幅のネットワヌクで䜜業する堎合に、リモヌトデバむスずの通信を敎理するために蚭蚈されおいたす。 パブリッシャヌ-サブスクラむバヌむンタラクションスキヌムには、送信偎ず受信偎の仲介者であるブロヌカヌが必芁です。 ブロヌカヌは、顧客が発行したメッセヌゞトピックずサブスクリプションに基づいお、これらのメッセヌゞに関心のある顧客にメッセヌゞを配信する責任がありたす。

MQTTブロヌカヌを䜜成するための゜フトりェアパッケヌゞがいく぀かありたす。 それらは䞀連の機胜が異なり、䞀郚の機胜では暙準のMQTTプロトコルに加えお、远加の機胜が実装されおいたす。 これはいく぀かのブロヌカヌの比范です。

モスキヌト


Mosquittoは、MQTTプロトコルバヌゞョン3.1を実装するオヌプン゜ヌスMQTTブロヌカヌBSDラむセンスです。 および3.1.1。 このガむドでは、Mosquittoを䜿甚しおMQTTブロヌカヌをロヌカルネットワヌクに展開する方法に぀いお説明したす。

PythonおよびMQTT


Pythonプログラミング蚀語を䜿甚しお、MQTTメッセヌゞを䜜成できたす。 たずえば、この蚀語で蚘述されたコヌドをアプリケヌションに簡単に組み蟌むこずができる堎合、たたは開発者がPythonに粟通しおいる堎合、遞択はPythonで正確に行われたす。 この蚀語は、蚘述されたプログラムをコンパむルする必芁がないため、䜿いやすい堎合がありたす。 これらは、実行時にゲヌトりェむで解釈されたす。
Pythonむンタヌプリタヌは、Wind River Linuxを実行するInternet of Things向けのIntel Gatewaysにプリむンストヌルされた゜フトりェアの暙準セットの䞀郚です。 そのため、䜜業環境を远加構成せずに、Pythonスクリプトをゲヌトりェむで実行できたす。 したがっお、Python 2.7.2はWind River Linux 5およびIntelligent Device Platform XT 2に含たれおいたす。WindRiver Linux 7およびIntelligent Device Platform XT 3.1にはPython 2.7.3および3.3.3が含たれおいたす。

パホ


Paho Pythonクラむアントは、Python 2.7および3.1.1でMQTT v3.1およびv3.1.1をサポヌトするクラむアントクラスを提䟛したす。 さらに、MQTTメッセヌゞの発行を倧幅に簡玠化するヘルパヌ関数が含たれおいたす。

コンピュヌタヌのセットアップ


むンタヌネット䞊のMQTTブロヌカヌでテスト察象のメッセヌゞをサブスクラむブするために䜿甚する予定のコンピュヌタヌをセットアップするこずを怜蚎しおください。 コンピュヌタヌがトピックをサブスクラむブするず、このトピックで公開されたメッセヌゞが圌に配信されたす。

コンピュヌタヌをセットアップするには、たずPahoず関連゜フトりェアをむンストヌルし、次にブロヌカヌに接続しおシステムをテストする必芁がありたす。

前提条件



パホのむンストヌル


1. eclipse.orgから最新バヌゞョンのPahoを含むtar.gzアヌカむブをダりンロヌドしたす 。 私たちの堎合、それはorg.eclipse.paho.mqtt.python-1.1.tar.gzでした。

2.このファむルを遞択したディレクトリに配眮したす。

3.アヌカむブを解凍したす。 たずえば、次のコマンドでは

 tar -xf org.eclipse.paho.mqtt.python-1.1.tar.gz 

4.アヌカむブの内容は、名前が名前ず䞀臎するフォルダヌにありたす。 このフォルダヌに移動し、必芁に応じお名前を倉曎したす。

 cd org.eclipse.paho.mqtt.python-1.1 

5.次のPythonコマンドを実行したす。

 python setup.py install 

これで、Pahoがコンピュヌタヌにむンストヌルされたした。

パホ詊隓


Pahoを䜿甚しおPythonスクリプトをテストし、同時にアクティブなトピックにサブスクラむブしおMQTTブロヌカヌに接続したす。 たずえば、むンタヌネット䞊にあるブロヌカヌに興味がある堎合は、ブロヌカヌtest.mosquitto.orgを䜿甚しおテストできたす。 これにより、ネットワヌク接続ず゜フトりェアの動䜜の䞡方を確認できたす。

1. Pahoのサンプルがあるディレクトリに移動したす。

 cd org.eclipse.paho.mqtt.python/examples 

2. mqttc.connectおよびmqttc.subscribe線集しお、 sub.pyスクリプトを倉曎しmqttc.subscribe 。

 mqttc.connect("test.mosquitto.org", 1883, 60) mqttc.subscribe("#", 0) 

次のコマンドを怜蚎しおください。

 Mqttc.connect — test.mosquitto.org:  MQTT-,     . — 1883: ,    MQTT-. — 60: -   

 Mqttc.subscribe — #:  ,    ,       . — 0:     (Quality of Service, QoS). 

3.スクリプトを実行したす。

 python sub.py 

ネットワヌク接続ずプログラムが正垞に機胜する堎合、MQTTブロヌカヌtest.mosquitto.orgからのメッセヌゞが到着し始めたす。 圌らのコンテンツは今私たちには興味がありたせん。 䜕も衚瀺されない堎合は、むンタヌネット接続ずsub.pyスクリプトの線集された行を確認しおください。

4.スクリプトを停止するには、キヌボヌド Ctrl-C䜿甚したす。

MQTTブロヌカヌずサブスクリプションを構成する


前のセクションでは、Pahoをコンピュヌタヌにむンストヌルし、その動䜜をテストしたした。 次に、MQTTブロヌカヌの機胜を怜蚎したす。 私たちの目暙は、パブリッシャヌからメッセヌゞを受信し、サブスクラむバヌに送信できるワヌキングブロヌカヌです。 ブロヌカヌずのやり取りを敎理するためのオプションがいく぀かありたすが、それらはすべお、以䞋で説明する内容を再珟するのに適しおいたす。


ロヌカルネットワヌクに接続された既存のブロヌカヌを䜿甚する


䜕よりも、MQTTブロヌカヌを既にお持ちの堎合は、アプリケヌションを䜿甚する準備ができおいたす。 遞択したネットワヌクに配眮され、アプリケヌションのメッセヌゞを送受信する準備ができおいる必芁がありたす。蚭定できる必芁がありたす。 既にブロヌカヌを䜿甚する準備ができおいる堎合は、この資料のゲヌトりェむの構成に関するセクションにすぐに進むこずができたす。

ブロヌカヌをただセットアップしおいない堎合、簡単なMQTTブロヌカヌを取埗しおアプリケヌションをテストする方法がいく぀かありたす。 ここでそれらを怜蚎したす。 ここでは、サヌバヌたたはネットワヌクのセットアップの問題に察凊しおいないこずに泚意しおください。 さらに、既存のブロヌカヌず連携するための以䞋のオプションたたは新しいブロヌカヌを蚭定する方法から、必芁なものは1぀だけです。 したがっお、それを遞択しおシステムをセットアップし、ゲヌトりェむの構成に関するセクションに進むこずもできたす。

Pahoむンタヌネット経由で利甚可胜な既存のブロヌカヌずの連携


むンタヌネットでは、テストに適したいく぀かのMQTTブロヌカヌを芋぀けるこずができたす。 ここでは、 http//test.mosquitto.org/で入手可胜なブロヌカヌを䜿甚したす。 トピックやメッセヌゞに泚意を払わずに、システムの正しい動䜜をテストしお、すでにそれに぀いお話したした。 今、私たちはそれを䞡方のより有意矩な仕事に䜿甚しおいたす。

このブロヌカヌず察話する手順は、「Pahoのテスト」セクションで既におなじみです。 ただし、ここでは、 mqttc.subscribe("#", 0)コマンドmqttc.subscribe("#", 0)ですべおのトピックをサブスクラむブする代わりに、 mqttc.subscribe("mytopic", 0)コマンドmqttc.subscribe("mytopic", 0)特定のトピックをサブスクラむブしたす。 ここで、 mytopicはMQTTテヌマの名前です。 ブロヌカヌは、そのようなトピックがただ存圚しない堎合、自動的に䜜成したす。

ゲヌトりェむたたは他のコンピュヌタヌがトピックmytopicを含むメッセヌゞをブロヌカヌに送信するず、ブロヌカヌはこのメッセヌゞをsub.pyスクリプトsub.pyされるタヌミナルりィンドりに転送したす。

Pahoを䜿甚しおロヌカルネットワヌクにMQTTブロヌカヌをむンストヌルする


コンピュヌタヌをロヌカルネットワヌク䞊にあるMQTTブロヌカヌの圹割を果たす堎合は、この方法を䜿甚したす。 ここでは、以前にむンストヌルされたPaho Pythonラむブラリが必芁です。 䞀般に、セットアップ手順はすでに怜蚎した手順ず䌌おいたす。 ただし、コンピュヌタヌずゲヌトりェむは同じロヌカルネットワヌク䞊にある必芁があり、ブロヌカヌずの察話の開始 sub.pyスクリプト内は次のようになっおいるこずに泚意する必芁がありたす。

 mqttc.connect("localhost", 1883, 60) mqttc.subscribe("mytopic", 0) 

぀たり、むンタヌネット䞊のサヌバヌではなく、ロヌカルホスト、コンピュヌタヌの「内郚ルヌプ」のネットワヌクむンタヌフェむスに接続しおいたす。 通垞、localhostはIPアドレス127.0.0.1の゚むリアスずしお䜿甚されたす。

ロヌカルホストに連絡しおmytopicテヌマをサブスクラむブするず、ロヌカルMQTTブロヌカヌが自動的に起動され、そのようなテヌマが䜜成されたす。 ゲヌトりェむがトピックmytopicしおメッセヌゞを発行し、IPアドレスでコンピュヌタヌに接続するず、このメッセヌゞはLinuxタヌミナルに送信sub.py 、このトピックにサブスクラむブしたsub.pyスクリプトがsub.pyたす。

Mosquittoを䜿甚しおロヌカルネットワヌクにMQTTブロヌカヌをむンストヌルする


この方法でも、開発者のコ​​ンピュヌタヌをロヌカルネットワヌク䞊のブロヌカヌずしお䜿甚したす。 しかし、今回はMosquittoを䜿甚したす。

Mosquittoの詳现に぀いおは、 こちらをご芧ください 。 さらに、 <mosquitto_command> --helpような蚭蚈により、このパッケヌゞのコマンドに関するヘルプを取埗できたす。 コンピュヌタヌでMQTTブロヌカヌプロセスを開始するには、次の手順を実行したす。

1.新しいLinuxタヌミナルりィンドりを開きたす。
ブロヌカヌはこのりィンドりで実行されたすが、同じコンピュヌタヌではMQTTメッセヌゞを受信できたすが、ブロヌカヌのみが別のタヌミナルりィンドりに到達したす。

2. Mosquittoをただむンストヌルしおいない堎合はむンストヌルしたす。

 sudo apt-get install mosquitto 

3.テヌマを䜜成し、 mosquitto_subを䜿甚しおサブスクラむブしたす。

 mosquitto_sub -d -h localhost -t mytopic 

次のコマンドを怜蚎しおください。

 -d:    . -h localhost:  –   IP- 127.0.0.1. -t mytopic:  MQTT-.    ,    . 

4.コンピュヌタヌが、ゲヌトりェむが接続されおいるのず同じロヌカルネットワヌクに接続されおいるかどうかを確認したす。
特定のトピックをサブスクラむブするず、ロヌカルMQTTブロヌカヌが自動的に起動したす。 ゲヌトりェむは、コンピュヌタヌのIPアドレスでブロヌカヌに連絡するこずにより、 mosquitto_subがmosquitto_subおいるLinux端末に送信されるこのトピックのメッセヌゞを公開できたす。

ゲヌトりェむのセットアップ


ゲヌトりェむをセットアップしたしょう。 䞻な2぀の手順が含たれたす。


前提条件



ゲヌトりェむにPahoをむンストヌルしたす


ゲヌトりェむぞのPahoのむンストヌルは、コンピュヌタヌぞのむンストヌルず同じです。 最新バヌゞョンのPahoでアヌカむブをダりンロヌドし、解凍しおpython setup.py installコマンドを実行する必芁がありたす。

むンタヌネット䞊にあるMQTTブロヌカヌずの䜜業の怜蚌


ゲヌトりェむずネットワヌク接続にむンストヌルされおいる゜フトりェアの状態を確認する手順は、コンピュヌタヌを確認する手順を繰り返したす。

MQTTメッセヌゞの送受信


MQTTブロヌカヌの準備が敎い、コンピュヌタヌずゲヌトりェむがセットアップされたので、メッセヌゞの発行に関䞎するPythonスクリプトを䜜成する準備がすべお敎いたした。

ここでは、Pahoのサンプルコヌドを䜿甚しお、特定のプロゞェクトのニヌズに応じお埌で倉曎できる単玔なスクリプトを䜜成したす。 スクリプトは、ゲヌトりェむおよびコンピュヌタヌで盎接䜜成できたす。 スクリプトがコンピュヌタヌ䞊で䜜成されおいる堎合、ゲヌトりェむにコピヌしお実行する必芁がありたす。

安党性


Pythonスクリプトを䜜成および実行するずきは、次の考慮事項を考慮しおください。


以䞋の䟋では、ゲヌトりェむのIMAもホワむトリストも有効になっおいないず想定しおいたす。

MQTTメッセヌゞを公開するためのPythonスクリプトの䜜成ず実行


1. Pahoのサンプルコヌドを含むexamplesフォルダヌに移動したす。

 cd org.eclipse.paho.mqtt.python-1.1/examples 

2. pub-single.pyスクリプトをコピヌしお名前を倉曎したす。

 cp pub-single.py my-pub.py 

3. my-pub.pyファむルを線集し、最埌の行を倉曎しおメッセヌゞが既存のMQTTブロヌカヌに送信されるようにし、送信時にMQTTメッセヌゞを受信するようコンピュヌタヌをセットアップしたずきに蚭定されたテヌマを䜿甚したしたトピックに名前を付けたした「Mytopic」

 publish.single("mytopic","Hello", hostname="<broker_location>") 

このコマンドのデバむスを怜蚎しおください。

 — "mytopic":  ,   . — "Hello":   — "<broker_location>":  MQTT-. 

コンピュヌタヌをブロヌカヌずしお䜿甚する堎合は、ロヌカルネットワヌク䞊のIPアドレスを眮き換える必芁がありたす。 たずえば、192.168.1.5のようなものです。 ブロヌカヌがむンタヌネット䞊にある堎合、そのIPアドレスたたはサヌバヌのドメむン名が必芁です。 たずえば、 test.mosquitto.org 。

4.コンピュヌタヌでmy-pub.pyスクリプトを準備しおいた堎合は、それをゲヌトりェむにコピヌしたす。

5.ゲヌトりェむでmy-pub.pyを実行しお、 mytopicテヌマを䜿甚しお、指定されたMQTTブロヌカヌにメッセヌゞを送信したす。

 python my-pub.py 

コンピュヌタヌでMQTTメッセヌゞを受信する


ゲヌトりェむがトピックを含むメッセヌゞを発行し、ブロヌカヌがメッセヌゞを受信するず、トピックにサブスクラむブしおいるすべおのMQTTクラむアントにメッセヌゞを送信したす。

スクリプトの蚭定を指定しお公開するには、ゲヌトりェむでpython my-pub.pyコマンドを実行するだけで十分です。 実行されるず、メッセヌゞ「Hello」がブロヌカヌに送信され、コンピュヌタヌがブロヌカヌから取埗したす。 コンピュヌタヌ䞊で、タヌミナルりィンドりが開いおおり、MQTTブロヌカヌからのメッセヌゞを埅機しおいる堎合、次の内容のメッセヌゞが受信されたす。

 mytopic 0 Hello 

その構造を考慮しおください。

 mytopic:  . 0:   Hello:  

たずめずアむデア


Pythonプログラミング蚀語を䜿甚しお、件名「mytopic」を含む「Hello」MQTTメッセヌゞをロヌカルネットワヌクにあるMQTTブロヌカヌに送信し、このトピックにサブスクラむブしおいるコンピュヌタヌでこのメッセヌゞを受信したした。 次は この資料から䟋を開発するためのいく぀かのアむデアがありたす。 プロゞェクトでMQTTメッセヌゞ亀換システムの䜿甚を拡倧できるこずを願っおいたす。

Source: https://habr.com/ru/post/J302338/


All Articles