MQTT対応のエージェントを利用しメジャーメントを送信する方法
投稿日 / 投稿者名
2021.3.24 / 坂井 佑
はじめに
本レポートは、Things Cloud の利用例をより知っていただくための実利用レポートとして作成したものです。 Things Cloud は極力後方互換性を持つよう開発されていますが、今後のリリースにより、一部画面やコマンド、手順などが変更となったり、利用できない可能性があることをあらかじめご了承ください。
なお、作成にあたり、以下バージョンを用いています。
- ver 10.6.6.32 (backend)
難易度 ★★
概要
本レポートでは、Raspberry Pi に c8yMQTT(https://github.com/SoftwareAG/c8yMQTT)をインストールし、MQTT静的テンプレートを利用してメジャーメントを送信する方法を説明します。
c8yMQTTはNTTコミュニケーションズがサポートしているものではないため、仕様等について答えかねる場合があります。
前提条件
-
用意するもの
-
作業用PC
-
Raspberry Pi 3B
$ cat /etc/os-release PRETTY_NAME="Raspbian GNU/Linux 10 (buster)" NAME="Raspbian GNU/Linux" VERSION_ID="10" VERSION="10 (buster)" VERSION_CODENAME=buster ID=raspbian ID_LIKE=debian HOME_URL="http://www.raspbian.org/" SUPPORT_URL="http://www.raspbian.org/RaspbianForums" BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"
- インターネットに接続済み
- Python 3.7.3
-
マウス、キーボード、モニター(作業用PCからRaspberry Piにsshでログインできる場合不要)
-
所要時間(目安)
- 15分
1. c8yMQTTのインストール
Raspberry Pi にc8yMQTTをインストールします。以下の作業はRaspberry Pi上で行います。
GitHubからc8yMQTTをクローンし、ディレクトリ内のinstall.sh
を実行します。
$ git clone https://github.com/SoftwareAG/c8yMQTT.git
$ cd c8yMQTT
$ sudo ./install.sh
その後、pi.properties
のhost
を利用するテナントのFQDNに変更します。
$ vi pi.properties
host = <<テナントのFQDN>>
host = mqtt.eu-latest.cumulocity.com # 変更前
変更が完了したら、サービスを再起動します。
$ sudo systemctl restart c8y.service
2. Things Cloudでの作業
デバイス→管理デバイス→登録
からデバイス登録を行います。
デバイスを登録→一般デバイス登録
の順にクリックします。
デバイスIDの欄にデバイスのシリアルIDを入力し、次へをクリックします。
シリアルIDの確認方法
pi@raspberrypi:~ $ cat /proc/cpuinfo | grep Serial Serial : <シリアルID>
以下の画面が表示されたら「承認」をクリックします。
デバイス→すべてのデバイス
をクリックすると「s7yPi-<シリアルID>」のデバイスが登録されていることが確認できます。※表示されない場合、リロードや右上の再読み込みをクリックしてください。
払い出されたデバイスの認証情報はクローンしたc8yMQTTディレクトリ内の
c8y.properties
に保存されます。
3. メジャーメントを送信する
本作業のc8yMQTTは「https://github.com/SoftwareAG/c8yMQTT/tree/4553e1d1bcf24e6f5ab9bc1bc47a5ad48a2eb315」のcommit時点のものを利用しており、今後のリリースにより記載されている行番号と異なることがあります。
MQTT静的テンプレートの温度メジャーメント(211)を利用し、メジャーメントを送信します。
- 温度メジャーメントのパラメータ
位置 パラメーター 必須 デフォルト値 1 temperature value はい 2 time いいえ 現在のサーバー時刻
MQTT静的テンプレートを使用するにはトピックs/us
にメッセージをパブリッシュします。
piAgent.py
の102行目に以下を追記します。
def sendTemperature():
tempString = "211,25," # テンプレートの番号,temperature value,time(任意)
c8y.publish("s/us", tempString) # データ送信
piAgent.py
の119行目にsendTemperature()
を追記します。
デフォルトでは5秒間隔でメジャーメントを送信します。pi.properties
のsendinterval
の値を変更することで送信間隔を変えることができます。
def sendMeasurements(stopEvent, interval):
c8y.logger.info('Starting sendMeasurement with interval: '+ str(interval))
try:
while True:
c8y.logger.info('sendMeasurements called')
try:
sense.send()
except Exception:
c8y.logger.info("No sense hat found omitting.")
sendCPULoad()
sendMemory()
sendTemperature() # 追記
if stopEvent.wait(timeout=interval):
c8y.logger.info('sendMeasurement was stopped..')
break
except (KeyboardInterrupt, SystemExit):
c8y.logger.info('Exiting sendMeasurement...')
sys.exit()
サービスを再起動します。
$ sudo systemctl restart c8y.service
Things Cloudのデバイス管理→デバイス→全てのデバイス
から今回登録したデバイスの計測値タブで温度メジャーメントが送信されていることを確認できます。
MQTT対応のエージェントを利用してメジャーメントを送信する手順は以上です。