Lua機能

最終更新: 2017/6

Lua言語で書かれたスクリプトファイルをFlashAirに保存することで、 下記のような簡易なバッチ処理が行えます。

  • FlashAirに保存されたファイルを、任意のサーバー等にアップロード。(ダイレクトアップロード)

  • FlashAirにファイルを生成する。

  • 動的にHTMLファイルを生成する。

本機能は、FlashAir W-03以上で利用できます。

Lua言語について

Luaは、パワフルで、高速で、軽量で、埋め込み可能な、スクリプト言語です。

Luaは、シンプルな手続き型構文をと強力なデータ記述構造を、連想配列と拡張可能なセマンティクスを用いて組み合わせています。 Luaは動的型付けであり、レジスタベースの仮想マシン向けのバイトコードを解釈することによって実行されます。 また、インクリメンタルガベッジコレクションによる自動メモリ管理を備えており、 設定、スクリプティング、ラピッドプロトタイピングに最適です。

Lua言語の詳細は、関連情報をご覧ください。

利用できる機能

FlashAirのLua機能では、下記のライブラリ関数が利用できます。

制約事項

メモリ制約のため、標準ライブラリの以下の機能は使用できません。

Update 数学関数は、FlashAir W-04から使用可能になりました。
  • コルーチン操作

  • OS機能

  • デバッグライブラリ

Lua関数リファレンス

内容は予告なく変更される可能性があります。
関数名 機能 ファームウェアバージョン

Updated request

HTTPリクエストの発行

3.00.00+

Updated HTTPGetFile

HTTPを使用したファイルのダウンロード

3.00.00+

pio

SDインターフェースのGPIO制御

3.00.00+

ftp

FTPを使用したファイルのアップロード、ダウンロード

3.00.00+

deleted md5

MD5ハッシュの計算

3.00.00

hash

ハッシュの計算

3.00.00+

Scan

SSIDスキャンの実行

3.00.00+

GetScanInfo

SSIDスキャン結果の取得

3.00.00+

Connect

STAモードで無線LANの有効化

3.00.00+

Establish

APモードで無線LANの有効化

3.00.00+

Bridge

インターネット同時接続モードで無線LANの有効化

3.00.00+

Disconnect

無線LANの停止

3.00.00+

sleep

指定時間だけスクリプトの実行を停止

3.00.00+

Updated sharedmemory

共有メモリのデータを読み込み或いは書き込み

3.00.00+

SetCert

ルート証明登録

3.00.00+

strconvert

文字列変換

3.00.00+

SetChannel

無線チャネルを設定する

3.00.01+

MailSend

メールの送信

3.00.01+

spi

SPI操作を行う

3.00.01+

ReadStatusReg

FlashAir自身のステータスレジスタを取得

3.00.00+

ip

IPアドレスを取得または設定

3.00.00+

WlanLink

接続確認

3.00.00+

remove

ファイルの削除

3.00.00+

rename

ファイル名の変更

3.00.00+

New i2c

I2C操作

4.00.00+

New search

ファイルサーチ機能

4.00.00+

New control("time")

日時メモ保存

4.00.00+

New control("fioget")

無線LAN On/Off状態の取得

4.00.00+

New control("fioset")

無線LAN On/Off

4.00.00+

New ConnectedSTA

AP接続時の接続ステーション数

4.00.00+

New websocket

WebSocket機能

4.00.00+

request

HTTP (Hyper Text Transfer Protocol) リクエストを発行します。

書式

b, c, h = fa.request(url [, method [, headers [, file [, body [, bufsize [, redirect]]]]]])

引数

url

string。 URLの文字列。(4.00.00 ポート指定可能:8080)

method

string。 HTTPリクエストメソッド。省略すると "GET" とみなします。

headers

table。 HTTPリクエストのヘッダーフィールド情報を追加できます。

file

string。 HTTPリクエストのボディに指定されたファイルを追加して送信します。

body

string。 HTTPリクエストのボディに指定された文字列を追加して送信します。 fileオプションと併用するとbody内部の文字列 <!--WLANSDFILE--> をファイルに置換して送信します。bodyが指定されていない場合は、単にfileが送信されます。

bufsize

number。 HTTPリクエストの送信バッファ・サイズ。flickrサーバーへ送信する場合はこの値を1460*10とします。

redirect

boolean。 HTTPのリダイレクト動作の有効無効を制御する。省略すると true を指定したものとみなします。

戻り値

b

string。 HTTP response bodyの文字列。

c

number。 HTTPステータスコード。

h

string。 HTTP response headerの文字列。

boundary = "--61141483716826"
contenttype = "multipart/form-data; boundary=" .. boundary
filepath = "sample.txt"
mes = "--".. boundary .. "¥r¥n"
 .."Content-Disposition: form-data; name=¥"file¥"; filename=¥""..file .."¥"¥r¥n"
 .."Content-Type: text/plain¥r¥n"
 .."¥r¥n"
 .."<!--WLANSDFILE-->¥r¥n"
 .."--" .. boundary .. "--¥r¥n"

blen = lfs.attributes(file,"size") + string.len(mes) - 17
b,c,h = fa.request{url = "http://192.168.0.1/upload.cgi:8080",
 method = "POST",
 headers = {["Content-Length"] = tostring(blen),
 ["Content-Type"] = contenttype},
 file = filepath,
 body = mes
 }

備考

  • HTTP Responseの転送サイズは、3KBまで対応。

  • Flickrへの送信においてTCPリセットが行われることがあります。bufsizeオプションで送信バッファサイズを1460*10程度に小さくすると回避できる場合があります。

4.00.00 注意事項

  • この関数でHTTPS通信を実行する場合、実行前に fa.SetCert関数でルート証明書を設定することが推奨されています。ルート証明書を設定せずにHTTPS通信を実行した場合、ルート証明書を用いたサーバ証明書の検証が行われないまま、通信が行われます。

  • ルート証明書を用いてサーバ証明書を検証した結果、検証が失敗した場合、この関数の実行は失敗となります。

HTTPGetFile

HTTPを使用してファイルをダウンロードします。

書式

result = fa.HTTPGetFile(uri, filepath [, user, pass])

引数

uri

string。 取得元のURI。

filepath

string。 保存先ファイル名。

user

string。 Basic認証におけるUser文字列。

pass

string。 Basic認証におけるPass文字列。

戻り値

result

number

1

正常動作。

nil

エラー。

4.00.00 注意事項

  • この関数でHTTPS通信を実行する場合、実行前に fa.SetCert関数でルート証明書を設定することが推奨されています。ルート証明書を設定せずにHTTPS通信を実行した場合、ルート証明書を用いたサーバ証明書の検証が行われないまま、通信が行われます。

  • ルート証明書を用いてサーバ証明書を検証した結果、検証が失敗した場合、この関数の実行は失敗となります。

pio

SDインターフェースのPIO (Programmed Input/Output) 制御を行います。

書式

s, indata = fa.pio(ctrl, data)

引数

ctrl

number。 ピンの入出力指定。 読み込みたい端子に対応するビットに 0 を、 書き込みたい端子に対応するビットに 1 を指定します。

data

number。 出力ピン状態の指定。 書き込みたい端子に対応する各ビットに、 0 を設定するとLow、 1 を設定するとHighを出力します。

戻り値

s

number。 インターフェース制御の状態。

1

成功。

0

失敗。

indata

number。 入力ピン情報。

備考

ビット割当

  • CMD : 0x01

  • D0 : 0x02

  • D1 : 0x04

  • D2 : 0x08

  • D3 : 0x10

ftp

FTP (File Transfer Protocol) によるファイルのダウンロードまたはアップロードを実行します。

書式

result = fa.ftp(cmd, uri, filename)

引数

cmd

string。 FTPコマンド。

"get"

ファイルのダウンロード。

"put"

ファイルのアップロード。

url

string。 FTPサーバーのURI。

filename

string。 FlashAirカード内のファイルパス。

戻り値

result

number

1

正常動作。

nil

エラー。

動作例

fa.ftp("get", "ftp://user:pass@ftp.test.com:21/test", "test");

md5

hash(ハッシュの計算)へ統合されました。

hash

ハッシュ値を計算します。

書式

hash=fa.hash(name, data, key)

引数

name

string。 hashの種類選択(md5,sha1,sha256,hmac-sha256)。

data

string。 データ。

key

string。 秘密鍵(nameがhmac-sha256時利用)。

戻り値

hash

string。 16進数で表したハッシュ値。

Scan

Scan開始コマンド。結果はGetScanInfo()で取得します。

書式

count = fa.Scan([ssid])

引数

ssid

string。 指定したSSIDについてスキャンを行います。 省略した場合は近傍のSSIDをスキャンします。

戻り値

count

number。 スキャンで見つかったAP数。

備考

Connect, Establish, または Bridge コマンドにより無線LANが有効になっていると利用できません。

GetScanInfo

Scan関数で得られた情報を取得します。

書式

ssid, other = fa.GetScanInfo(num)

引数

num

number。 Scanリストの番号を指定。

戻り値

ssid

string。 SSID。

other

table。 Scan結果情報。

備考

Connect, Establish, または Bridge コマンドにより無線LANが有効になっていると利用できません。

  count = fa.Scan()
  for i=1,count do
     ssid,other = fa.GetScanInfo(i)
   for key, val in pairs(other) do
         print(key, val)
     end
   end

Connect

STAモードで無線LANを有効化します。

書式

fa.Connect(ssid, networkkey)

引数

ssid

string。 接続先無線LAN APのSSID名。

networkkey

string。 接続先無線LAN APのセキュリティキー。

戻り値

なし

Establish

APモードで無線LANを有効化します。

書式

fa.Establish(ssid, networkkey, encmode)

引数

ssid

string。 FlashAirのSSID。

networkkey

string。 FlashAirのセキュリティキー。

encmode

number。 FlashAirのセキュリティモード。

戻り値

なし

備考

FlashAirセキュリティモードには、下記のうち一つを指定します。

意味

0

オープンシステム、暗号化なし

1

オープンシステム、WEP

3

WPA-PSK、TKIP

4

WPA-PSK、AES

5

WPA2-PSK、TKIP

6

WPA2-PSK、AES

Bridge

インターネット同時接続モードで無線LANを有効化します。

書式

fa.Bridge(ssid, networkkey, encmode, brgssid, brgnetworkkey)

引数

ssid

string。 FlashAirのSSID。

networkkey

string。 FlashAirのセキュリティキー。

encmode

string。 FlashAirのセキュリティモード。 指定可能な値についてはEstablishを参照して下さい。

brgssid

string。 接続先無線LAN APのSSID。

brgnetworkkey

string。 接続先無線LAN APのセキュリティキー。

戻り値

なし

Disconnect

無線LANを停止します。

書式

fa.Disconnect()

引数

なし

戻り値

なし

sleep

指定時間だけスクリプトの実行を停止します。

書式

sleep(msec)

引数

msec

number. 停止時間を0~(232 - 1)の範囲のミリ秒単位で指定します。

戻り値

なし

sharedmemory

共有メモリからデータを読み込み或いは書き込みを行います。

書式

fa.sharedmemory(command, addr, len, wdata)

引数

command

string。 動作コマンド(write, read)。

addr

number。 アドレス(0~511)(4.00.00 0~2047)。

len

number。 データ長(0~512)(4.00.00 1~2048)。

wdata

string。 書込み文字列(コマンドでwrite指定時有効)。

レスポンス

write時 ⇒ 成功:1           失敗:nil
read時 ⇒ 成功:読み出し文字列  失敗:nil

動作例

res1 = fa.sharedmemory("write", 0, 8, "12345678")
res2 = fa.sharedmemory("read", 1, 4, 0)
print("res=",res2)
  
 結果:res=2345

SetCert

証明書のクリアor登録(X.509 binary encode with DER)を行います。

書式

fa.SetCert(filename)

引数

filename

string。 DERファイルのパス、ファイル名を指定する。省略時は証明書をクリアする。

戻り値

result

number

1

正常動作。

nil

失敗。

動作例

lres = fa.SetCert("DerSha256.cer")
	if (res == nil) then
		print("cert err")
	end

strconvert

SJIS文字をUTF-8文字へ変換とutf8文字をSJIS文字へ変換する。

書式

fa.strconvert(format, orgstr)

引数

format

string。 「sjis2utf8」を指定するとsjis文字をutf8文字へ変換する、「utf82sjis」を指定するとutf8文字をsjis文字へ変換する。

orgstr

string。 変換元文字列。

レスポンス

成功:変換文字列
失敗:nil

動作例

str = "あかさたなはまやらわ"
print("testStr=", str)
a = fa.strconvert("sjis2utf8", str )
print("toUTF8=", a)
b = fa.strconvert("utf82sjis", a)
print("toSJIS=", b)

SetChannel

無線チャネルを設定する。

書式

fa.SetChannel(channelNo)

引数

channelNo

number。 チャネル(0~11 or 0x0~0xb 0指定はAUTO)。

戻り値

なし

動作例

fa.Disconnect()
fa.SetChannel("0xB")
fa.Establish("flashair3", "12345678", "6")

MailSend

Flashairよりメール送信を行う(ファイルの添付も可能)。

書式

fa.MailSend(from,headers,body,server,user,password, attachment, ContentType)

引数

from

string。 送信元メールアドレス。

headers

string。 メールヘッダ。

body

string。 メール本文。

server

string。 メールサーバ(smtp)。

user

string。 ユーザーID。

password

string。 パスワード。

attachment

string。 添付ファイル指定(任意)。

ContentType

string。 コンテンツタイプ指定(attachment指定時に有効で必須)。

レスポンス

成功: MailSend is success.
失敗: Error: It failed to send.

動作例

from = "fromaddr@yahoo.co.jp"
rcpt = "toaddr@gmail.com"
a = fa.MailSend {
  from = from,
  headers = "To: "..rcpt.."\r\nFrom: "..from.."\r\nSubject: test",
  body = "HELLO HELLO",
  server = "smtp.mail.yahoo.co.jp",
  user = "flashair",
  password ="1234567890",
  attachment = "FBYF.jpg",
  ContentType = "image/jpg"
}

spi

FlashAirよりSPI操作を行う。

書式

fa.spi(command,data)

command

init

クロック周期の変更を行う(デフォルト値:1000)。

mode

SPIモードの指定(引数:0~3。デフォルト値:3)。

bit

転送ビット数(デフォルト値:8)。

write

ライト。

read

リード。

cs

チップセレクト信号の制御(引数1でCS=ON、0でCS=OFF)。

レスポンス

write : ライトコマンド発行時の受信データ。
read : リードコマンド発行時の受信データ。
otherwise: ステータス

動作例

fa.spi("init", 1001)

ReadStatusReg

FlashAir自身のステータスレジスタを取得する。

書式

reg = fa.ReadStatusReg()

引数

なし

戻り値

無線LAN機能ステータスレジスタの内容を、文字列として返します。内容は無線LAN機能ステータスレジスタ(Application Status for Wireless LAN)を参照してください。

動作例

IPアドレスを取得する場合

local ipaddress = string.sub(fa.ReadStatusReg(),160,168)

ip

FlashAir自身のIPアドレスを取得または設定します。

書式

ip, mask, gw = fa.ip(ipaddress, subnetmask, gateway)

引数

ipaddress

string。 FlashAirに設定するIPアドレス。

subnetmask

string。 サブネットマスク値。

gateway

string。 ゲートウェイのIPアドレス。

戻り値

ip

string。 IPアドレス。

mask

string。 サブネットマスク。

gw

string。 ゲートウェイ。

-- 値取得時
ip, mask, gw = fa.ip()
-- 値設定時
fa.ip("192.168.11.2", "255.255.255.0", "192.168.11.1")

ネットワークに無線接続されているかを確認します。

書式

result = fa.WlanLink()

引数

なし

戻り値

result

number

1

接続状態。

0

未接続。

remove

指定されたファイルを削除します。

書式

fa.remove(filepath)

引数

filepath

string。 削除対象のファイル名。

戻り値

なし

動作例

fa.remove("/DCIM/100__TSB/DSC_100.JPG")

rename

指定されたファイルのパスを変更します。

書式

fa.rename(oldfile, newfile)

引数

oldfile

string。 元ファイル名。

newfile

string。 新ファイル名。

戻り値

なし

動作例

fa.rename("/DCIM/100__TSB/DSC_100.JPG","/DCIM/100__TSB/DSC_101.JPG")

i2c 4.00.00

FlashAirよりI2C操作を行います。i2cはMasterとして動作します。

書式

res, data1, data2, data3, ... = fa.i2c(table)
res, string = fa.i2c(table)

引数

table
以下のフィールドがあります。
mode
string。I2C操作の属性。
freq
string。I2Cクロック周波数(単位:kHz)。設定可能な値は、"45""100""189""400"の4つ。省略時は"100"が設定されます。
timeout
number。スレーブ応答のタイムアウト時間(単位:msec)。省略時は10が設定されます。
address
number。接続デバイスのスレーブアドレスを指定します。
direction
string。データの方向を指定します。設定可能な値は"read""write"です。"read"を指定した場合、接続デバイスからデータを読み出します。"write"を指定した場合、接続デバイスへデータを送ります。
data
string or number。送信データを設定します。string形式で指定した場合は、設定したデータを全て送ります。number形式で指定した場合は0255までの値を設定できます。
bytes
number。受信データサイズを指定します。省略時には1が設定されます。
type
string。受信データ形式を指定します。設定可能な値は"binary""string"です。省略時には、"binary"が設定されます。
デバイス初期化スタートコンディションの送信リスタートコンディションの送信接続デバイスからデータ読み出し接続デバイスへデータ書き込みストップコンディションを送信し、コネクションを閉じる
mode"init""start""restart""read""write""stop"
freq省略可不要不要不要不要不要
timeout省略可不要不要不要不要不要
address不要必須必須不要不要不要
direction不要必須必須不要不要不要
data不要不要不要不要必須不要
bytes不要不要不要省略可省略可不要
type不要不要不要省略可不要不要

備考

ビット割当
  • CMD: SCL
  • D0: SDA

SCL/SDAはプルアップしてください。
CLKはプルダウンしてください。

複数バイト送信
バイナリデータを複数バイト送信したい場合は、データ書き込みを続けて実行することで、複数バイト送信することができます。

戻り値

res
string。成功時は"OK"を返します。失敗時はそれ以外の文字列を返します。
data1, data2, data3, ...
number0255までの値が格納されます。接続デバイスからデータ読み出し、type = "binary"指定時のみ使用します。
string
string。受信データが格納されます。接続デバイスからデータ読み出し、type = "string"指定時のみ使用します。

res = fa.i2c{mode = "init", freq = "100"}
res = fa.i2c{mode = "start", address = 50, direction = "write"}
res = fa.i2c{mode = "restart", address = 50, direction = "read"}
res, data1, data2, data3, ... = fa.i2c{mode = "read", type = "binary"}
res, string = fa.i2c{mode = "read", type = "string"}
res = fa.i2c{mode = "write", data = 0}
res = fa.i2c{mode = "stop"}
アドレス50のスレーブから5バイト読み出す
res = fa.i2c{mode = "init", freq = "100"}
res = fa.i2c{mode = "start", address = 50, direction = "read"}
res, r0, r1, r2, r3, r4, r5 = fa.i2c{mode = "read", bytes = 5, type = "binary"}
res = fa.i2c{mode = "stop"}
アドレス50のスレーブに0を書き込んでから1バイト読み出す
res = fa.i2c{mode = "init", freq = "100"}
res = fa.i2c{mode = "start", address = 50, direction = "write"}
res = fa.i2c{mode = "write", data = 0}
res = fa.i2c{mode = "restart", address = 50, direction = "read"}
res, data = fa.i2c{mode = "read", bytes = 1, type = "binary"}
fa.i2c{mode = "stop"}

指定したディレクトリ内で、更新日時によるファイル検索を行います。更新日時が最新であるファイルの検索、または引数で指定した更新日時によるファイルの検索が可能です。

書式

result, filelist, time = fa.search(type, path, searchtime)

引数

type
string。検索タイプ。file固定。
  • file:ファイルの検索
path
string。検索対象のディレクトリ。
searchtime
number。検索対象更新日時。-1またはFAT形式の日時を指定する。
  • -1を指定した場合、更新日時が最新のファイルを検索する。
  • -1以外を指定した場合、以下の両方を検索する。
    • 指定された更新日時と一致するファイル
    • 指定された更新日時より新しいファイルのうち最も古いファイル(指定された日時の次に新しいファイル)
  • FAT形式の日時について
    • 32ビットの整数値で、上位16ビットが日付、下位16ビットが時刻。
    • 日付と時刻は、command.cgiのop=100を実行した際に取得できる値と同じフォーマット。

戻り値

result
number。ステータス。
1 正常終了
-1 ファイルリストの作成時にオーバーフロー
  • searchtimeに-1を指定した場合、「更新日時が最新のファイル」のリスト作成で文字列バッファのオーバーフロー
  • searchtimeに-1以外を指定した場合、「指定された更新日時より新しいファイルのうち最も古いファイル」のリスト作成で文字列バッファのオーバーフロー
-2 ファイルリストの作成時にオーバーフロー(searchtimeに-1以外を指定した場合のみ返す可能性がある)
  • 「指定された更新日時と一致するファイル」のリスト作成で文字列バッファのオーバーフロー
-3 ディレクトリオープンエラー
-4 ディレクトリリードエラー
filelist
string。カンマ区切りのファイルリスト。
  • 条件に一致するファイルのリストをカンマ区切りの文字列で返す。
  • searchtimeに-1以外を指定した場合、 「指定された更新日時と一致するファイル」のリストと「指定された更新日時より新しいファイルのうち最も古いファイル」のリストを連結した文字列を返す。
  • 該当ファイルがない場合は、""(空文字列)を返す。
  • オーバーフロー以外のエラーの場合はnilを返す。
time
number。検索結果日時。
  • searchtimeに-1を指定した場合、「更新日時が最新のファイル」の更新日時を返す。
  • searchtimeに-1以外を指定した場合、 「指定された更新日時より新しいファイルのうち最も古いファイル」の更新日時を返す。
  • 条件に一致するファイルがない場合は0を返す。
  • オーバーフロー以外のエラーの場合はnilを返す。
備考
  • ファイルリストの作成時に512文字を超えた場合はバッファオーバーフローとなり、リストは途中で打ち切られる。
  • 検索するディレクトリの深さは3階層まで。

"/DCIM" から最新のファイルを検索する。
local result, filelist, time = fa.search("file", "/DCIM", -1)
if result ~= 1 then
    print("error: ", result)
end
if filelist ~= nil then
    for f in string.gmatch(filelist, '(.-),') do
        print(f)
    end
end
if time ~= nil then
    print(string.format("time: 0x%08x", time))
end
“DCIM”から更新日時が 2017/06/01 12:34:56 であるファイルと、その日時より新しいファイルのうち最も古いファイルを検索する。
local result, filelist, time = fa.search("file", "/DCIM", 0x4ac1645c)
if result ~= 1 then
    print("error: ", result)
end
if filelist ~= nil then
    for f in string.gmatch(filelist, '(.-),') do
        print(f)
    end
end
if time ~= nil then
    print(string.format("time: 0x%08x", time))
end

参考

FAT形式の日時変換例
文字列の日時をFAT形式に変換する
local function StringToFatDateTime(datetime_str)
    local pattern = '(%d+)/(%d+)/(%d+)%s+(%d+):(%d+):(%d+)'
    local year,month,day,hour,min,sec = string.match(datetime_str, pattern)
    year = year - 1980
    sec = bit32.rshift(sec, 1)
    local date_fat = bit32.bor(bit32.lshift(year, 9),
                               bit32.lshift(month, 5),
                               day)
    local time_fat = bit32.bor(bit32.lshift(hour, 11),
                               bit32.lshift(min, 5),
                               sec)
    local datetime_fat = bit32.bor(bit32.lshift(date_fat, 16),
                                   time_fat)
    return datetime_fat
end
FAT形式の日時を文字列に変換する
local function FatDateTimeToString(datetime_fat)
    local function getbits(x, from, to)
        local mask = bit32.lshift(1, to - from + 1) - 1
        local shifted = bit32.rshift(x, from)
        return bit32.band(shifted, mask)
    end
    local fatdate = bit32.rshift(datetime_fat, 16)
    local day = getbits(fatdate, 0, 4)
    local month = getbits(fatdate, 5, 8)
    local year = getbits(fatdate, 9, 15) + 1980

    local fattime = getbits(datetime_fat, 0, 15)
    local sec = getbits(fattime, 0, 4) * 2
    local min = getbits(fattime, 5, 10)
    local hour = getbits(fattime, 11, 15)

    return string.format('%02d/%02d/%02d %02d:%02d:%02d', year, month, day, hour, min, sec)
end

control("time") 4.00.00

日時メモの保存または取得を行います。

書式

result = fa.control("time"[, savetime])

引数

第1引数は"time"固定。
savetime
number。保存する日時。FAT形式で指定する。
  • savetime引数ありの場合、指定された日時を保存する。
  • savetime引数なしの場合、保存された日時を取得する。
  • FAT形式の日時について
    • 32ビットの整数値で、上位16ビットが日付、下位16ビットが時刻。
    • 日付と時刻は、command.cgiのop=100を実行した際に取得できる値と同じフォーマット。

戻り値

result
number。取得した日時。
  • savetime引数ありの場合、指定された日時そのものを返す。
  • savetime引数なしの場合、保存された日時を返す。
    • 日時が保存されていない場合は、-1を返す。
  • エラーの場合は nil を返す。

"2017/06/01 12:34:56" を保存する。
result = fa.control("time", 0x4ac1645c)
保存された日時を取得する。
result = fa.control("time")
if result ~= nil then
    print(string.format("time: 0x%08x", result))
end

control("fioget") 4.00.00

無線LANのOn/Off状態を取得します。

書式

result = fa.control("fioget")

引数

第1引数は"fioget"固定。

戻り値

result
number。現在の無線LANの状態。
  • 1:無線LANはOn。
  • 0:無線LANはOff。

control("fioset") 4.00.00

無線LANのOn/Offを行います。

書式

result = fa.control("fioset", enable)

引数

第1引数は"fioset"固定。
enable
number。1 または 0を指定。
  • 1:無線LANをOnにする。モードやSSIDなどの設定はCONFIGファイルの内容が適用される。
  • 0:無線LANをOffにする。

戻り値

result
number。現在の無線LANの状態。
  • 1:無線LANはOn。
  • 0:無線LANはOff。

ConnectedSTA 4.00.00

AP接続時の接続されているステーション数、ip、macを返します。

書式

cnt,tbl = fa.ConnectedSTA()

戻り値

cnt
接続しているステーションの個数を返却する。
Tbl
取得したクライアントのテーブルを返却する。cntが0に場合nilを返却する。

AP起動時に何台接続しているか確認する。
local cnt, tbl = fa.ConnectedSTA()
  print(cnt,tbl)
  for i,t in ipairs(tbl) do 
    for k,v in pairs(t) do
	  print(k,v)
    end
  end
結果
   1       table: 856B1C
   mac     40:48:0f:7b:37:92
   ip      192.168.0.11

websocket 4.00.00

WebSocket通信をします。

書式

res, type, payload = fa.websocket(table)

引数

table
以下のフィールドがあります。
mode
string。WebSocket接続の属性。
address
string。接続先のサーバアドレス。
payload
string or table。メッセージ内容(文字列、配列)。
type
number。メッセージタイプ(テキスト=1、バイナリ=2、PING=9、 省略時=自動判別)。
length
number。メッセージの長さ(省略時=payloadのオブジェクト長)。
tout
number。タイムアウト時間(単位:msec)。
オープンメッセージ送信メッセージ受信クローズ
mode"open""send""recv""close"
address必須不要不要不要
payload不要必須不要不要
type不要省略可不要不要
length不要省略可不要不要
tout不要不要省略可不要

戻り値

res
number。受信成功時は0もしくは正数を返します。受信失敗時は負数を返します。
type
number。メッセージタイプ(テキスト=1、バイナリ=2)。受信失敗時はnilを返します。メッセージ受信のときのみ使用します。
payload
string or table。受信メッセージ。受信失敗時はnilを返します。メッセージ受信のときのみ使用します。

res = fa.websocket{mode = "open", address = "ws://localhost/socket"}
res = fa.websocket{mode = "send", payload = "hello!", type = 1}
res, type, payload = fa.websocket{mode = "recv", tout = 5000}
fa.websocket{mode = "close"}