mosquitto : .confファイルの設定エラーとデバッグ

M5StickC PlusからRaspberry PiへのMQTT接続

MosquittoのBrokerとClientをインストールした後、備忘録にしたがい、コンフィグレーション・ファイルに設定を追加しました。
またM5StickC-Plusににも、MQTTのBrokerへの接続設定とデータのパブリッシュ機能をプログラミングし、テストしてみました。

結果は、うまく接続出来ませんでした。

原因調査と結果

いろいろと調べたり、詳しい方に聴いてみました。
その方の説明では、

一つの仮説としてM5StickC Plusのファームウェアのバージョンが影響している可能性がある。
最新のバージョンにアップデートすれば改善される可能性がある。

と指摘されました。

そこで、ファームウェアのバージョンを最新にアップデートし、MQTTへの試してみたところ、今度はうまく接続が確立されました。
どうやら指摘どおり、ファームウェアの古さが原因だったようです。

.confファイルの修正

コンフィグレーション・ファイルに、いろいろと設定を追加してしまったので、不要となった設定を削除してクリーンな状態に戻しました。
しかし削除の過程でミスしたらしくmosquittoが正常に立ち上がらなくなりました。

以下のコマンドを使い mosquitto インストール・テストを行いました。
(参照 : 【備忘録】Raspberry Pi に Mosquitto MQTT Brokerをインストール)

$ mosquitto -v 

コマンド入力後、mosquitto 起動ログをモニターしていると、エラーの発生が確認されました。
コンフィグレーション・ファイルが正常に起動できなかったことを伝えるメッセージが表示されます。

以下の写真では、赤色で表示されている行がエラー発生を伝えています。

 

しかし、困りました。
エラーコードが表示されていますが、コード表が無いので意味が判りません。

また、日本語のサイトでは同様の問題を解決した記事が見つけられませんでした。
英語圏まで検索範囲を広げると、そんなスレッドがあり、世界のどこかで困っている人たちは点在していることが判りました。

そのスレッド内のコメントで、以下のコマンドを使うことが提案されていました。
それは systemctl コマンドで自動起動させた “mosquitto.service”のログを閲覧できるようです。
実際に使ってみました。

$journalctl -u mosquitto.service

このコマンドを使うと、エラーの原因となるコンフィグレーション・ファイルの行数が表示されます。
ここで発見した行を修正し、 mosquitto.service を再起動すると、今度は正常に起動しました。

原因は、スペルの打ち間違い、あるいは削除しているときに、1文字、余分に削除してしまったようです。

UI-Flowによる開発は中止

M5Stick-C PLUSを使っています。
プログラムは簡単なので、UI-Flowで作成していました。

MQTT通信の部分では、Raspberry Pi にパブリッシュすることはできました。
しかし、一度、パブリッシュが通ると、しばらくの間、二回目以降は飛びません。

M5Stick-C Plus の方で、パブリッシュできなくなるようです。
原因はUI-Flowのブロックを構成するmicroPythonモジュールにあるのかもしれません。
あるいはファームウェアに不具合があるのかもしれません。

原因は、いろいろと考えられます。
しかし、第一の目的はM5Stick-C Plus で、Raspberry Pi にMQTTでデータをパブリッシュすることです。

そこで、UI-Flowでの開発を中止し、Ardiuno のIDE を使って開発することにしました。
Ardiuno の IDE に M5Stick-C Plus 用のプログラム開発環境を構築し、C言語でプログラムを組み異にしました。

もし、ハードの問題なら、C言語で作成したプログラムでも同じような問題が発生するはずです。
同様の問題が発生しなかった場合、UI-Flowやファームウェアの問題と考えてよさそうです。

 

Ardiuno IDE で開発した結果

Ardiuno IDE を使ってC言語で開発した結果、Raspberry Pi にインストールした Mosquitto MQTT にパブリッシュすることができました。
以下の写真は、Wi-Fi に接続しDHCPで割り当てられた IP アドレスを表示させています。

また、データ計測を行った正確な時刻を記録するため、NTP(時刻)サーバーにアクセスし、年月日と時刻(時分秒)をコピーし表示させています。

 

現在の状況

Raspberry Pi にMosquitto (MQTT ブローカー) をインストールしました。

MQTT通信プログラムは、UI-Flowには不具合があるようです。
Ardiuno IDE を使ってC言語で開発したブログラムは、問題なく稼働しています。

Wi-Fiの親機からDHCPでIPアドレスをレンタルし、mosquitto MQTT で Raspberry Pi にデータを送信することができました。

また、NTP(時刻)サーバーにアクセスし、正確な時刻をコピーすることができました。
M5Stick-Cにもクロック発信機がありますが、精度は悪く、1日で数分の誤差が生じます。

IoTでM5Stick/M5Stick-C を使う場合、定期的なNTPサーバーへのアクセスは必要となります。

 

今後について

現在、コンピュータネットワークのセキュリティーに注目が集まっています。

ウィルスを使った身代金請求やデータ漏洩などの事件が発生しています。
そのため業務改善だけでは、コンピュータセキュリティーの観点から対策なしに IoT 機器を会社のネットワークにつなげることができません。

そこで SIMフリーのWi-Fi ルーターで、問題を解決することにしました。
工場内に電話回線でデータ通信機能だけを持つローカル・ネットワークを構築する。

こうすることで、事業所内のネットワークと拙速することなく、工場内のデータ収集のみに特化したネットワークを構築することができます。
費用としてみても、数万円の投資で構築できますので、試しに取組んでみたい企業にはちょうど良いかもしれません。

このような技術サービスが提供できるように、体制を構築しております。
IoTを業務に取り込んでみたい。
説明を聴いてみたい。

ホームページのお問合せからご連絡いただければ、可能な範囲でご説明を差し上げたいと思います。

IoT は、『定期的なデータの自動収集』と、『収集した時系列データの可視化』がポイントになります。
今、当社で取り組んでいる部分が『定期的なデータの自動収集』の部分です。

『収集した時系列データの可視化』の部分は、i-Padのようなタブレットで可視化することを考えています。
こちらについてもご興味があれば、お問合せください。

より市場ニーズに近いサービスを構築の参考になります。

PAGE TOP