FlashAirからLuaでJSONをPOSTしてNode-REDに連携するメモ
FlashAirからLuaでJSONをPOSTしてNode-REDに連携するメモです。
やりたいこと

FlashAirの起動時にLuaプログラムを動かして、シンプルな形でJSONデータをPOSTしてNode-REDとやりとりします。
FlashAirの設定

FlashAirの4世代を使用して設定を行います。
CONFIGの設定
こちらを参考に SD_WLAN/CONFIG のCONFIGファイルを以下のように設定しました。
[Vendor]
CIPATH=/DCIM/100__TSB/FA000001.JPG
APPMODE=5
APPNAME=myflashair
APPSSID=APPSSID
APPNETWORKKEY=************
VERSION=VERSION
CID=CID
PRODUCT=FlashAir
VENDOR=TOSHIBA
MASTERCODE=MASTERCODE
LUA_RUN_SCRIPT=/Hello_Node-RED.lua
キモはLUA_RUN_SCRIPTです。このHello_Node-RED.luaがFlashAirが起動したときに実行されます。
APPSSID・APPNETWORKKEY・VERSION・CID・MASTERCODEあたりは適宜自分の環境に合わせて設定しておきましょう。APPMODEを5にしているのでSTAモードです。これでAPPSSID・APPNETWORKKEYの設定を行ってWi-Fiへ通信可能にしておきます。
Hello_Node-RED.lua
続いて、実行先のLuaプログラムです。

最上位の階層にHello_Node-RED.luaを置きます。先ほどのCONFIGで示したLUA_RUN_SCRIPTの /Hello_Node-RED.lua ですね。
プログラムは以下を参考にしました。
FlashAir非公式Luaチュートリアル - 3.Twitterでつぶやく - おまけ程度のツール置き場
こちらでPOSTの送り方を、
IFTTT Maker ChannelをFlashAirで使ってみた
こちらで、JSONデータの送り方を参考にしました。
/Hello_Node-RED.lua
sleep(15000);
local cjson = require "cjson"
mes = {
messageEN = "Hello Node-RED!!!",
messageJP = "やあ!のーどれっど!",
flag= "true"
}
mes = cjson.encode(mes)
len_s = tostring(string.len(mes))
b,c,h = fa.request{
url = "http://163.43.30.76:1880/flashair_post",
method = "POST",
headers = {["Content-Length"] = len_s,["Content-Type"] = "application/json;charset=utf-8"},
body = mes
}
print("HTTP/1.1 200 OK\r")
print("Content-Type:application/json;charset=utf-8;\r")
print("\r")
print(b)
print(c)
**** NODE-RED ADDRESS **** の部分は、Node-REDを起動しているサーバーアドレスにしましょう。私の場合は、さくらインターネットで起動しているNode-REDに向けて無事動きました。
その他に大事な点としては、起動時にWi-Fiつながるまでに少し時間がかかるのでsleepを15秒かけています。
Node-REDの設定
つづいて、Node-REDの設定です。

このようにシンプルにPOSTでJSONを受けて返答するだけの仕組みです。

http in ノードは以下のとおりです。

/flashair_post というURLで受けています。

このフローをデプロイした後にFlashAirで試しにURLと叩いてみると動作確認できました!
JSONフロー
JSONフローも置いておきます。
[
{
"id": "f27b4253.48fbf",
"type": "http in",
"z": "8554fe50.57faf",
"name": "",
"url": "/flashair_post",
"method": "post",
"upload": false,
"swaggerDoc": "",
"x": 310,
"y": 420,
"wires": [
[
"284c2301.87529c",
"f500ec5e.7abf4"
]
]
},
{
"id": "284c2301.87529c",
"type": "debug",
"z": "8554fe50.57faf",
"name": "",
"active": true,
"tosidebar": true,
"console": false,
"tostatus": false,
"complete": "false",
"x": 500,
"y": 420,
"wires": []
},
{
"id": "f500ec5e.7abf4",
"type": "http response",
"z": "8554fe50.57faf",
"name": "",
"statusCode": "",
"headers": {},
"x": 490,
"y": 480,
"wires": []
}
]
動かしてみる
それではいざ動かしてみましょう。

FlashAirを差し込みます。
しばらく待っていると起動の5秒とスリープの15秒でだいたい20秒くらいでしょうか。

Node-REDのdebugノードが反応し、英語も日本語もしっかりデータがJSONで送られていることが確認できました。日本語が文字化けしないのも素敵ですね。
FlashAirでファイルをPOSTで送るサンプルは多かったのですが、このようにシンプルな形でJSONデータをPOSTで送るものが試せてよかったです。Node-REDとFlashAirを引き合わせることができました。
ひきつづき、いろいろと試してみます。