MQTT対応のエージェントを利用しメジャーメントを送信する方法

投稿日 / 投稿者名

2021.3.24 / 坂井 佑

はじめに

本レポートは、Things Cloud の利用例をより知っていただくための実利用レポートとして作成したものです。 Things Cloud は極力後方互換性を持つよう開発されていますが、今後のリリースにより、一部画面やコマンド、手順などが変更となったり、利用できない可能性があることをあらかじめご了承ください。

なお、作成にあたり、以下バージョンを用いています。

難易度 ★★

概要

本レポートでは、Raspberry Pi に c8yMQTT(https://github.com/SoftwareAG/c8yMQTT)をインストールし、MQTT静的テンプレートを利用してメジャーメントを送信する方法を説明します。

c8yMQTTはNTTコミュニケーションズがサポートしているものではないため、仕様等について答えかねる場合があります。

前提条件

所要時間(目安)

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.propertieshostを利用するテナントのFQDNに変更します。

$ vi pi.properties

host = <<テナントのFQDN>>
host = mqtt.eu-latest.cumulocity.com # 変更前

変更が完了したら、サービスを再起動します。

$ sudo systemctl restart c8y.service

2. Things Cloudでの作業

デバイス→管理デバイス→登録からデバイス登録を行います。

スクリーンショット1

デバイスを登録→一般デバイス登録の順にクリックします。

デバイスIDの欄にデバイスのシリアルIDを入力し、次へをクリックします。

スクリーンショット3

シリアルIDの確認方法

pi@raspberrypi:~ $ cat /proc/cpuinfo | grep Serial
Serial		: <シリアルID>

以下の画面が表示されたら「承認」をクリックします。

スクリーンショット4

デバイス→すべてのデバイスをクリックすると「s7yPi-<シリアルID>」のデバイスが登録されていることが確認できます。※表示されない場合、リロードや右上の再読み込みをクリックしてください。

払い出されたデバイスの認証情報はクローンしたc8yMQTTディレクトリ内のc8y.propertiesに保存されます。

3. メジャーメントを送信する

本作業のc8yMQTTは「https://github.com/SoftwareAG/c8yMQTT/tree/4553e1d1bcf24e6f5ab9bc1bc47a5ad48a2eb315」のcommit時点のものを利用しており、今後のリリースにより記載されている行番号と異なることがあります。

MQTT静的テンプレートの温度メジャーメント(211)を利用し、メジャーメントを送信します。

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.propertiessendintervalの値を変更することで送信間隔を変えることができます。

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のデバイス管理→デバイス→全てのデバイスから今回登録したデバイスの計測値タブで温度メジャーメントが送信されていることを確認できます。

スクリーンショット5

MQTT対応のエージェントを利用してメジャーメントを送信する手順は以上です。