konchangakita

KPSを一番楽しんでいたブログ 会社の看板を背負いません 転載はご自由にどうぞ

【Xi IoTで映えるデモがしたい 第19回】functionsで使う関数とお作法

LEGOをスマートファクトリー化する道のり

  1. 画像取得
  2. MQTT送信(Publish)
  3. Xi IoT Data Pipelineで MQTT受信(Subscribe)
    • その2 ←今回はココ
  4. Xi IoT Data Pipelineで画像処理して送信(Publish)
  5. 管理画面を作って確認(Subscribe/Publish)
  6. RasPi+BrickPiで結果受信(Subscribe)してモーター制御
  7. 結果に応じてモーター制御

今回はfunctions でコードを書く場合のお作法についてです
(今回はpythonに限る)

f:id:konchangakita:20191219173957p:plain
functionsのコードサンプル


お作法

  1. 日本語使っちゃダメです、エスケープの中でもダメです
  2. Nutanix Xi IoT独自の関数として、こんなのが用意されています
    • def main(ctx, msg): おまじないとして必要です
    • ctx.get_timestamp: タイムスタンプ
    • ctx.get_topic():トピック名取得
    • msg:MQTTで飛んできたメッセージ内容


サンプルコード

サンプルとしてして、至ってシンプルに受けたモノを受け流してみました


デバッグ用に

Data Pipelineで定義したOutput(MQTTトピック名:mqtt_test)から、RasPi+BrickPiでSubして受け取るとrmsgの中身はこんな感じで受け取れました

mqtt-test - b'{"SherlockTimestamp":1576687996517,"bytes":200160,"get_config":{},"get_timestamp":1576687996517965810,"get_topic":"image"}'
mqtt-test - b'{"SherlockTimestamp":1576687998064,"bytes":201588,"get_config":{},"get_timestamp":1576687998064006161,"get_topic":"image"}'
mqtt-test - b'{"SherlockTimestamp":1576687999607,"bytes":202044,"get_config":{},"get_timestamp":1576687999607361208,"get_topic":"image"}'
mqtt-test - b'{"SherlockTimestamp":1576688001150,"bytes":201444,"get_config":{},"get_timestamp":1576688001150778035,"get_topic":"image"}'

loggingは、XI IoT独特のちょっと特殊な扱いになりまして

import logging

# Data PipelineのReal-Time logに出力
logging.info("Process %d bytes from %s at %s", len(msg), ctx.get_topic(), ctx.get_timestamp())

これを書いておけばReal-Time logに出力できるようになります
デバッグ用という感じですね
出力はこんな感じになります

f:id:konchangakita:20191220020942p:plain
Real-Time Logでの出力


この次で、RasPi+BrickPiからPubされた画像(base64エンコード)の実際に画像解析を行ってみましょうか