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.