1.1.4.3. IoT機器設定・コード例

本項では、以下の実装において必要なIoT機器での設定手順の説明およびPythonコード例を記載しています。

  • 実装1: IoT機器の遠隔コマンド実行

c8yエージェント実行ファイルの編集

Things Cloudからの遠隔コマンド実行のため、必要なコードを記載します。

あらかじめ、前項までに記載の処理が完了していることを確認してください。

Pythonコード「piAgent.py」

c8yエージェントの実行プログラムである「piAgent.py」に必要な処理を追記します。以下に倣って、ファイルを更新してください。

「/usr/local/sdpf-iot/piAgent.py」の135行目に以下の内容を追記

if message.startswith('511'):
        cc_text = message.split(',')[2]
        c8y.logger.info("--> c8y_Command.text:" + cc_text)

        args = cc_text.split()
        c8y.logger.info("--> Command :" + "/".join(args))

        try:
                setCommandExecuting('c8y_Command')

                res = os.popen(cc_text).read()
                c8y.logger.info("-->" + str(res))

                setCommandSuccessfull('c8y_Command,' + str(res))
        except Exception as e:
                c8y.logger.error("--> Processing failed...")
                setCommandFailed('c8y_Command', str(e))

完成形は以下のとおりです。

/usr/local/sdpf-iot/piAgent.py

#(略)
def on_message_default(client, obj, msg):
        message = msg.payload.decode('utf-8')
        c8y.logger.info("Message Received: " + msg.topic + " " + str(msg.qos) + " " + message)

        if message.startswith('71'):
        fields = message.split(",")
        c8y.token = fields[1]
        c8y.logger.info('New JWT Token received')
        if message.startswith('510'):
        Thread(target=restart).start()

        ##### 追記ここから #####
        if message.startswith('511'):
                cc_text = message.split(',')[2]
                c8y.logger.info("--> c8y_Command.text:" + cc_text)

                args = cc_text.split()
                c8y.logger.info("--> Command :" + "/".join(args))

                try:
                        setCommandExecuting('c8y_Command')

                        res = os.popen(cc_text).read()
                        c8y.logger.info("-->" + str(res))

                        setCommandSuccessfull('c8y_Command,' + str(res))
                except Exception as e:
                        c8y.logger.error("--> Processing failed...")
                        setCommandFailed('c8y_Command', str(e))
        ##### 追記ここまで #####

        if message.startswith('513'):
                Thread(target=updateConfig,args=(message,)).start()
#(略)