Luaスクリプトを実行

最終更新: 2016/12

概要

このチュートリアルではFlashAir IoT Hubのスクリプト実行機能について紹介します。

スクリプト実行機能を使うと、FlashAir上の任意のLuaスクリプトを実行する事が出来ます。


スクリプト実行の仕組み

まずはスクリプト実行がどの様な仕組みで実現されているかをご説明します。

スクリプト実行は次の様にFlashAir上でポーリングし、FlashAir IoT Hubのジョブを取得する事で実現しています。

スクリプト実行の仕組み
  1. ジョブの登録

    FlashAir IoT HubでFlashAir上のLuaスクリプトのパスと引数を入力すると、その内容がジョブとして登録されます。
    ジョブは複数登録可能で、FlashAirに取得されるまで実行待ちの状態になります。

  2. ジョブのポーリング

    FlashAir上のLuaスクリプトが一定間隔ごとにFlashAir IoT Hubにジョブがないかチェックします。

  3. ジョブの実行

    ジョブが見つかった場合、そのジョブを取得し、FlashAir上で実行します。

FlashAir IoT Hubを使わなくてもインターネット経由でLuaスクリプトを実行させることは可能でしたが、次の準備や知識が必要でした。

  • 認証

    誰でも任意のLuaスクリプトを実行出来ないように、FlashAirの 認証方法を設定し、 アクセスを制限する必要があります。

  • アクセス仲介役の機器やサーバー

    インターネット接続側からFlashAirに接続するためには、ルーターなどのネットワーク機器経由でアクセスするか、FlashAirが通信可能なサーバー経由でアクセスする方法などがあります。
    ですが、前者はネットワークやセキュリティの高度な知識と経験が必要で、後者は自身でサーバーとその通信プログラムを用意する必要があります。

FlashAir IoT HubではFlashAirとの通信にトークンを用いる事で安全・簡単にアクセス制限を行い、FlashAir IoT Hubがアクセス仲介役のサーバーとなることで、これらの問題を解決しています。

また、スクリプト実行ではジョブの仕組みを使うことでFlashAirをインターネット上に公開すること無く、安心してお使い頂けます。


画面の操作方法

次にスクリプト実行を使うための方法を覚えましょう。

スクリプト実行

実行したいLuaスクリプトのパス及び、引数(省略可能)を指定して、実行ボタンをクリックしてください。
実行するLuaスクリプトは予め、FlashAir上に配置する必要がありますので、ご注意ください。

スクリプト実行

パス

FlashAir上のLuaスクリプトのファイルパスを指定します。

引数

実行するLuaスクリプトに任意の引数を指定する事が出来ます。引数はJSON形式で指定してください。 指定出来る引数は1つだけですが、JSONの配列形式などを使うことで複数の値を指定可能です。


処理待ちのジョブ

入力したLuaスクリプトのパスと引数はジョブとして登録され、一覧で表示されます。
ここではジョブの実行状態や実行結果を確認することが出来ます。

ジョブ
  • ID
    ジョブを一意に表わす英数字の文字列です。
  • type
    ジョブの種別を表します。 GPIO出力スクリプト実行の2種類があります。
  • status
    ジョブの状態を表します。状態は 未実行実行中実行済みの順に遷移します。
  • response
    ジョブの実行結果を 成功または、 失敗で表します。
  • 削除
    ゴミ箱のアイコンをクリックするとジョブを削除します。未実行のジョブを削除した場合、そのジョブは実行されません。

スクリプト実行を使ってみよう

最後に実際にスクリプト実行を使ってみましょう。

スクリプト実行の準備

例としてFlashAir IoT Hubで入力した引数の値を計測値として登録するLuaスクリプトを作ります。
以下のLuaスクリプトをFlashAirのルートディレクトリに保存して下さい。

echo.lua

local iothub = require("iothub")
if type(arguments) == "table" then
  iothub.addMeasurement(arguments)
  sleep(30000)
  iothub.addMeasurement(arguments)
end
  • 2行目
    FlashAir IoT Hubで指定した引数は変数 argumentsにJSON形式の値をLuaの変数に変換した値が自動的に設定されます。
    argumentsiothub.addMesurement()の引数と同じテーブル型の場合、処理を行います。
  • 3-5行目
    argumentsの値を iothub.addMesurement()にて計測値としてFlashAir IoT Hubに送信します。
    グラフの表示が分かりやすい様にsleepを入れ、2回送信します。

また、FlashAir IoT Hubからダウンロード出来るサンプルスクリプト bootscript.luaを以下の様に編集し、ルートディレクトリに保存して下さい。

bootscript.lua

local iothub = require("iothub")

-- iothub.startPioUpload(0x03)
-- iothub.stopPioUpload()

local cnt = 0
while(1) do
  iothub.runJob()
  --iothub.addMeasurement({10, 20, cnt})
  --cnt = cnt + 1
  sleep(10000)
  collectgarbage("collect")
end
  • 8行目
    iothub.runJob()を実行することで、FlashAir IoT Hubからジョブを取得出来た場合、そのジョブを実行します。
  • 9,10行目
    echo.luaで送信する計測値が分かりやすい様に、計測値の送信処理をコメントアウトします。

以上でスクリプト実行の準備が整いました。


スクリプトの実行

FlashAir IoT Hubからスクリプト実行をしてみましょう。

パスと引数の入力

パスに /echo.lua、引数に [40, 50]と入力し、実行ボタンをクリックしてください。


ジョブ登録
スクリプト実行成功

スクリプトが実行され、成功しました。計測値のグラフを見てみましょう。


計測値送信結果

echo.luaで送信した計測値がグラフに反映されているのが分かると思います。


予めLuaスクリプトを用意すれば、GPIOやセンサーデータの取得・設定など細かな制御も可能ですので、FlashAir IoT Hubのスクリプト実行機能をぜひご活用ください。