MQTT をプログラミングで実装することを試みる場合、真っ先に思いつくのは Paho のライブラリを使うことです。Paho はオープンソースの MQTT ライブラリであり、多くの言語向けにクライアントライブラリが提供されています。この Paho を使うことができれば、比較的簡単に MQTT パブリッシャー/サブスクライバー機能を実装することが可能です:
http://www.eclipse.org/paho/
ところが、Paho では PHP のライブラリは提供されていません。比較的利用者が多いと思われる PHP で MQTT を実装する場合、Paho 以外のライブラリを探す必要があるのですが、その候補の1つになりそうなのがオープンソースの phpMQTT です:
https://github.com/bluerhinos/phpMQTT
利用のための準備は非常に簡単で、上記サイトから phpMQTT.php ファイルをダウンロードするだけです。後はこのライブラリを読み込んで実装するだけ、です。
例えば MQTT パブリッシャーを実装する場合は、以下の様なコードを記述します(ファイル名は publish.php として、phpMQTT.php と同じディレクトリに作成します)。ダウンロードした phpMQTT.php を require で呼び出した上で、ホスト名、ポート番号、クライアント ID、トピック、そしてメッセージ本文といったパーツを単純に指定して、connect() して publish() メソッドを実行しているだけです:
↑上記のコードは IBM の IoT Foundation Quickstart 環境を想定してブローカーやクライアントID、トピックを指定しています。デバイス ID として "me.juge.mqtt.test" を指定してメッセージをパブリッシュしています。なので、IBM Bluemix の Node-RED 環境で IBM IoT インプットノードのデバイス ID に同じ文字列 "me.juge.mqtt.test" を設定すれば Node-RED にメッセージを送付することができます:
(注 皆さんが試す場合は別のユニークな文字列を指定してください。要は PHP 内で指定するデバイス ID と、Node-RED で指定するデバイス ID が同じものを指定する必要がある、という意味です)
この状態で IBMIoT インプットノードに debug アウトプットノードを繋げて Node-RED アプリケーションをデプロイし、上記の PHP ファイルを実行します:
するとコード内で記述された処理が実行され、IBM IoT Foundation Quickstart の MQTT ブローカー(quickstart.messaging.internetofthings.ibmcloud.com:1883)にメッセージが送信され、Node-RED 内の IBMIoT ノードが受け取り、このように画面内の debug タブに表示されれば成功です:
PHP でも MQTT プログラミングができること、そして IBM の無料 MQTT ブローカーである QuickStart 環境にメッセージがパブリッシュできることが確認できました。
http://www.eclipse.org/paho/
ところが、Paho では PHP のライブラリは提供されていません。比較的利用者が多いと思われる PHP で MQTT を実装する場合、Paho 以外のライブラリを探す必要があるのですが、その候補の1つになりそうなのがオープンソースの phpMQTT です:
https://github.com/bluerhinos/phpMQTT
利用のための準備は非常に簡単で、上記サイトから phpMQTT.php ファイルをダウンロードするだけです。後はこのライブラリを読み込んで実装するだけ、です。
例えば MQTT パブリッシャーを実装する場合は、以下の様なコードを記述します(ファイル名は publish.php として、phpMQTT.php と同じディレクトリに作成します)。ダウンロードした phpMQTT.php を require で呼び出した上で、ホスト名、ポート番号、クライアント ID、トピック、そしてメッセージ本文といったパーツを単純に指定して、connect() して publish() メソッドを実行しているだけです:
<?php require( "./phpMQTT.php" ); $mqtt_host = "quickstart.messaging.internetofthings.ibmcloud.com"; # MQTT ブローカー $mqtt_port = 1883; # MQTT ポート番号 $mqtt_clientid = "d:quickstart:MyDevice:me.juge.mqtt.test"; # クライアントID $mqtt_topic = "iot-2/evt/status/fmt/json"; # トピック文字列 $mqtt_message = '{"val1":123,"val2":"ABC"}'; # パブリッシュするメッセージ $mqtt = new phpMQTT( $mqtt_host, $mqtt_port, $mqtt_clientid ); if( $mqtt->connect() ){ $mqtt->publish( $mqtt_topic, $mqtt_message, 0 ); $mqtt->close(); } ?>
↑上記のコードは IBM の IoT Foundation Quickstart 環境を想定してブローカーやクライアントID、トピックを指定しています。デバイス ID として "me.juge.mqtt.test" を指定してメッセージをパブリッシュしています。なので、IBM Bluemix の Node-RED 環境で IBM IoT インプットノードのデバイス ID に同じ文字列 "me.juge.mqtt.test" を設定すれば Node-RED にメッセージを送付することができます:
(注 皆さんが試す場合は別のユニークな文字列を指定してください。要は PHP 内で指定するデバイス ID と、Node-RED で指定するデバイス ID が同じものを指定する必要がある、という意味です)
この状態で IBMIoT インプットノードに debug アウトプットノードを繋げて Node-RED アプリケーションをデプロイし、上記の PHP ファイルを実行します:
# php -f publish.php
するとコード内で記述された処理が実行され、IBM IoT Foundation Quickstart の MQTT ブローカー(quickstart.messaging.internetofthings.ibmcloud.com:1883)にメッセージが送信され、Node-RED 内の IBMIoT ノードが受け取り、このように画面内の debug タブに表示されれば成功です:
PHP でも MQTT プログラミングができること、そして IBM の無料 MQTT ブローカーである QuickStart 環境にメッセージがパブリッシュできることが確認できました。
コメント
コメント一覧 (2)
試しで、あるExcelファイルをUIを作って、画面に表示させたいと思っています。
Excelは、キーになる情報があって、付属情報があるという単純な構成ですが・・
画面に表示させる時は、キー情報を入れて検索ボタンを押したら、キーの付属情報が表示されるということをBluemixでやりたいです。
Excelはなんとなく、SQL DatabaseにExcelごとインポートすることができたのですが・・・
ITの初心者すぎて、次の方法が考えられずに戸惑っているので、アドバイスいただけないかなと思ってコメントしました。
具体的には、SQL DatabaseとNode-Red?▶︎簡単にサービスと繋げられると聞いたので・・
Node-RedとUIを作れる何かをつなぐ方法を
もしご存知であれば教えていただけないでしょうか。
説明が足りていなかったかも知らないですが、どうぞ宜しくお願い致します。。