今回は久しぶりにRaspberry Pi絡みの記事となります。
Raspberry PiにMosquittoをインストールし、MQTTのブローカーとして動作させるまでの流れになります。
MQTTとは
MQTTはMessage Queueing Telemetry Transportの略となります。
MQTTは多くのデバイス(主にIoTデバイス)からの比較的軽い情報を送受信するためのプロトコルでPublish/Subscriveの形を取ります。
データを送信する方をPublisher、受信する方をSubscriverとなります。
一対多、多対多のデータのやり取りを行うためにPublisher(送信側)とSubscriver(受信側)の間に中継役となるBrokerを配置してデーターのやり取りが行われます。
上の図ではPublisherとBroker、そしてSubscriberの関係をまとめましたが、実際のやりとりはtopicを使って行われます。
上記絵ではMeraki MVからそのMVで検知されている人数をカウントしてMQTTで送信する仕組みをまとめています。
Meraki MVからは自分のシリアル番号と共にカウントしている人数を送信する必要がありますので、それをtopicを通して通信が行われることになります。
この例では、
topic: /merakimv/xxxx-xxxx-xxxx/0
のようなフォーマットとなり、メッセージの中にタイムスタンプと人数のカウントが含まれていることになります。
Meraki MVのMQTTの詳細に関してはCiscoのサイトを参照してください。
Raspberry PiにMosquittoをインストール
ここから本題です。
MQTTブローカーであるMosquittoをRaspberry Piにインストールしていきます。
まずはRaspberry Piのアップデートを行います。
sudo apt update && sudo apt upgrade
アップデートが完了した後、Mosquittoのインストールを行います。
まずはブローカーとしてのMosquitto本体をインストールします。
sudo apt-get install mosquitto
インストールが完了すると、Mosquittoの設定ファイルを編集します。
sudo vi /etc/mosquitto/mosquitto.conf
設定ファイル内に
listener 1883
allow_anonymous true
を追記します。
Port1883で待機し、どのデバイスからのPublishでも受け付けると言う設定になります。
MQTTではユーザ認証等も可能となっています。
次にOptionとなりますが、Mosquittoクライアントをインストールします。
既に他のデバイスでSubscriberが存在する場合はこの作業は必要ありません。
今回はRaspberry PiをSubscriberとしても動作させるイメージです。
sudo apt-get install mosquitto-clients
そしてMosquittoブローカーを起動させます。
sudo systemctl start mosquitto
Meraki MVにMQTTの設定を行う
次にMeraki MVを使ってMosquittoが正しく動作しているか確認してみます。
「カメラ > 監視 > カメラ」へ移動し、MQTT設定を行いたいMVを選択します。
「設定」タブから「センス」をクリックします。
「MQTTブローカー」の「MQTTブローカの追加または編集」をクリックします。
「新規MQTTブローカー」から設定を行います。
ブローカー名、IPアドレス、Port番号をRaspberry Piに設定した内容に合わせて設定します。
設定完了後、MVに対してMQTTサーバを割り当てて作業は完了です。
Subscriberで確認を行う
上記のMeraki MVの設定で既にMVからMQTTブローカーであるRaspberry Piに対して定期的に情報が送られている状態になっています。
Subscriberを使って実際にブローカーを開始情報を受信できるか確認を行います
今回は上記でオプションとしてインストールしたMosauitto Clientを使って確認を行います。
mosquitto_sub -h localhost -p 1883 -t /merakimv/xxxx-xxxx-xxxx/0
"xxxx-xxxx-xxxx"はMVのシリアル番号を入れてください。
Mosquitto ClientにてMVで検知された人数のカウント(上記例では1)がSubscribeを停止しない限り定期的にブローカーから送られ続けることが確認できたと思います。
まとめ
今回はMeraki MVを使ってMQTTのやり取りを確認しましたが、Merakiでは他にMTやMRでもMQTTに対応しています。
これらに関しても時間があればサンプルデータを収集してまとめてみたいと思っています。