撮った写真を FlashAir で Slack に POST する

雑兵MeetUp #4Gunma.Web #23 で「変態IoT」というタイトルでLTをしてきました。

変態と言っても、FlashAirを使って、デジカメで撮った写真を自動で Slack に POST する Lua スクリプトを作ったという内容です。

 

 

実際のプログラムは以下。

これをFlashAir内に保存して、CONFIGで LUA_SD_EVENT=post-image-to-slack.lua と指定すれば、ファイルが書き込まれる度に新しいファイルを探索して、SlackにPOSTするようになります。

 

YuG1224/FlashAir

Contribute to FlashAir development by creating an account on GitHub.

 

cjson = require "cjson"

lastFileName = ""
lastFilePath = ""
maxMod = 0

currentDir = "/DCIM"
for dirName in lfs.dir(currentDir) do
  dirPath = currentDir.."/"..dirName
  subDir = lfs.attributes(dirPath, "mode")
  if subDir == "directory" then
    for fileName in lfs.dir(dirPath) do
      filePath = dirPath.."/"..fileName
      mod = lfs.attributes(filePath, "modification")
      if mod > maxMod and string.match(fileName, "%JPG$") == "JPG" then
        maxMod = mod
        lastFileName = fileName
        lastFilePath = filePath
      end
    end
  end
end

boundary = "--61141483716826"
contenttype = "multipart/form-data; boundary=" .. boundary
token = ""
channels = ""
mes = "--" ..  boundary .. "\r\n"
  .."Content-Disposition: form-data; name=\"file\"; filename=\""..lastFileName.."\"\r\n"
  .."\r\n"
  .."<!--WLANSDFILE-->\r\n"
  .."--" .. boundary .. "--\r\n"

print(mes)
print(lastFileName)
print(lastFilePath)

blen = lfs.attributes(lastFilePath,"size") + string.len(mes) - 17
b, c, h = fa.request{
  url = "https://slack.com/api/files.upload?token="..token.."&channels="..channels,
  method = "POST",
  headers = {
    ["Content-Length"] = tostring(blen),
    ["Content-Type"] = contenttype
  },
  file = lastFilePath,
  body = mes
}

print(b)
print(c)
print(h)

 

一応SDカードの中で Lua が動きますが、実は制限された関数しか使えません。

そのため何が使える関数なのかは、デベロッパー向けのwebページを参考にしながら作っていました。

 

FlashAir Developers - ホーム

FlashAir開発者向けサイトのホームです。FlashAirは、無線LAN機能を内蔵した東芝社製のSDHCカードです。

 

以上

FlashAirLuaMeetup