FlashAir(無線LAN機能付きSDカード)で家庭用FAXの受信データをNASに自動転送する (2)転送編


準備編の続きです。

今回はFAXを受信し、画像ファイルが書き込まれた時点で、FlashAirから、NASへFTP転送する仕組みです。

fax-flashair-nas_mail_1

以下はQNAP TS-131(4.2.2)とFlashAir W-03、FAXはKX-PD601Wでの作業を前提にしています。NASのIPアドレスは固定(192.168.0.xxx)です。

まず、ファイルを受け取るNASの設定をします。

  1. 転送先ディレクトリの作成
    管理しやすいようにFTP用のディレクトリを作ります。今回はDataVol1下にftpを作成さらに、そのしたにfaxディレクトリを作り、パーミッションを777としました。
  2. FTP用アカウントの作成
    FTPログイン用のアカウントを作ります。他のアカウントと共通でも可能ですが、ftpのログイン情報をスクリプトに記載するため、別管理としました。アカウント名は仮にfax、パスワードは任意のものとします。
    Webで管理画面にログインして、「コントロールパネル」-「権限設定」-「ユーザー」にあります。安全のため、「共有フォルダー権限の編集」で先ほど作成したftpのみ読み書きできるようにします。
  3. FTPサーバーの有効化
    Webで管理画面にログインして、「コントロールパネル」-「ネットワークサービス」-「FTP」にあります。
    FTPサービスを有効にし、詳細設定の「set root directory」を先ほど作成した/ftpにします。

これで、faxアカウントでFTPでNASに接続し、/ftp/にアップロードできる環境がになりました。あとはFlashAirのFTPコマンドで/fax/画像ファイル名.jpgにputします。ちなみに、FlashAirのスクリプトではputとgetしかできませんので、ディレクトリの追加や削除はできません。

次にFlashAirの設定をします。PCにFlashAirを差し込みSDカードとして認識させて作業します。
  1. FTP転送するためのスクリプトの作成
    FlashAirにluaフォルダを作り、以下のスクリプトを newfileftpupload.lua として保存します。
    今回使ったFAXは
    /IMEXPORTにjpegファイルがされるのでこのフォルダを監視します。

    -- 監視ディレクトリに新しいファイルが加わったら、ftpでアップロードする。
    -- アップロードしたなかで一番新しいファイルのタイムスタンプを記録する。
    -- 記録したタイムスタンプより古いファイルはアップロードしない。
    -- 定数
    local fpath    = "/IMEXPORT"         -- 監視ディレクトリ
    local server    = "192.168.0.xxx"     -- FTPサーバーのIPアドレス
    local serverDir = "/fax/"               -- FTPサーバーのアップロード先フォルダ
    local user      = "ftp"             -- FTPユーザー名
    local passwd    = "(任意)"          -- FTPパスワード
    local lastupload = "lastupload.txt" -- 最終アップロードファイルの日付を記録
    print(lastupload)
    -- 最後にアップロードしたファイルの時刻の記録したファイルを検索
    local lastfile = io.open(lastupload,"r")
    if lastfile then
    print("lastfile true")
    print(lastfile)
    -- 1行目に記録してあるアップロードしたファイルで最後にアップロードしたファイルの時刻を取得
    lastuploadtime = lastfile:read()
    lastfile:close()
    else
    print("lastfile false")
    -- なければ、全てのファイルが対象になるので、timeは0
    lastuploadtime = 0
    end
    print(lastuploadtime)
    -- Assemble our FTP command string
    local ftpstring = "ftp://"..user..":"..passwd.."@"..server..serverDir
    -- 転送が終わったファイルの日付(最も新しいもの)を記録
    local newmod = 0
    -- 全ての転送ができると仮定
    local success = true
    -- For each file in fpath...
    for file in lfs.dir(fpath) do
    -- Get that file's attributes
    attr = lfs.attributes(fpath .. "/" .. file)
    print( "Found "..attr.mode..": " .. file )
    if attr.mode == "file" then
    --日付のチェック
    mod = lfs.attributes(fpath .. "/" .. file, "modification" )
    print(mod..":"..lastuploadtime)
    if tonumber(mod) > tonumber(lastuploadtime) then
    print("upload...")
    --Attempt to upload the file!
    print(ftpstring..file)
    print(fpath .. "/" .. file)
    response = fa.ftp("put", ftpstring..file, fpath .. "/" .. file)
    --Check to see if it worked, and log the result!
    if response ~= nil then
    print("Success!")
    -- 日付を記録
    if tonumber(newmod) < tonumber(mod) then
    newmod = mod
    end
    else
    print("Fail :(" .. response)
    success = false
    end
    end
    end
    end
    --転送が成功したら、lastupload.txtを更新
    if success then
    print("complite")
    local lastfile = io.open("lastupload.txt", "w")
    lastfile:write(newmod .. "\n")
    lastfile:close()
    end
    
  2. ステーションモード(無線LAN子機)に設定
    FlashAirの標準的な使用方法は独立した無線LANの親機となり、そこにスマホなどを接続し転送する形です。しかし、今回は子機としてLANに参加しますので、設定ファイルを書き換えます。
    設定ファイルは/SD_WLAN/CONFIGです。
    以下のように変更または追加します。DHCPサーバを利用することとし、常に無線に接続するようにします。これらは設定ツールのFlashAir Toolでも行うことができます。

    APPMODE=5
    APPSSID=無線LANのSSID
    APPNETWORKKEY=無線LANのパスワード
    APPAUTOTIME=0
    DHCP_Enabled=YES
    
  3. 書き込みがあったらスクリプトを実行する設定
    同じく/SD_WLAN/CONFIGに次の一行を追加し、書き込みがあった場合に/lua/newfileftpupload.luaを起動するように設定します。

    LUA_SD_EVENT=/lua/newfileftpupload.lua
    

これでFAXに差し込めば、電源が供給され、画像が追加されるたびにNASに転送されます。今回使用したFAXでは、本体画面で内容を確認すると、ステータスの変更により再度画像ファイルが更新されます。それによっても再度ファイルが送信されてしまいますので、次回のメールでのお知らせの設定に工夫が必要ですが、今後の課題とします。

Tips(いくつかの追加情報です)

  • FlashAirの設定ファイルやスクリプトをいろいろ変更した後、元に戻したい場合は、FlashAir Toolを使います。普通にフォーマットするとただのSDカードになってしまいます。
  • ステーションモードでLANに接続できたかどうかを確認するには、コマンドラインから「ping flashair」が便利です。通常、SDカードに電源が入ってから、数秒から数十秒後に接続が完了します。IPアドレスも同時に確認できます。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

SPAM防止のため数字と漢数字の算数の計算をお願いします。 * Time limit is exhausted. Please reload CAPTCHA.