OS7以降
端末側にソフトウェアを組み込みオフライン時の挙動や通信の圧縮を行う方法がLua Pluginです。
端末側のソフトウェア
obnizの端末にはOSしか入っておらずサーバーなどからSDKとAPI経由で遠隔操作されます。
obnizの端末だけでネットワークが切れた場合の動作を決めたり通信内容を圧縮したい場合にLuaを利用したプログラムを端末に書き込み実行することでそれを実現できます。
Lua Pluginでできること
- 起動した瞬間からデータの記録を開始する
- オンライン・オフライン関係なく決まった動作を行う
- 特定のデータだけサーバーに送ったり圧縮を行う
- 特定のデータを受け取ったり、定期的なタイミングで接点操作を行う
- オフラインで状態を監視して、スリープし送るべきタイミングのみインターネット接続を行う。

Luaの動作
Luaのスクリプトは端末に保存したものを実行したり、クラウド経由で随時実行することが可能です。
保存された起動時から読み出され実行が開始されます
(ただし、Luaはセーフモードで端末が起動した場合には実行されません)
Luaスクリプトの本体への保存
Luaスクリプトを端末に保存するには
- シリアルコンソール経由
- obniz.js経由
のいずれかの方法で可能です。以下はobniz.jsを利用した保存方法です。
実行することで起動したタイミングでシリアルコンソールにHello Worldが表示されるようになります。
obniz.storage!.savePluginLua(`os.log("Hello World");`);
obniz.plugin!.reloadLua();
Luaスクリプトの随時実行
Luaスクリプトは本体に保存せずともSDK経由で随時実行することが可能です。
obniz.plugin!.execLua(`
x=1;
x=x+2;
os.log(x.."\\n")
`); // will print "3" on obnizOS console(need console enabled)
obniz.plugin!.execLua(`os.log(os.getTick().."\\n")`);
obniz.plugin!.execLua(`os.log(os.getTick().."\\n")`);
この機能を利用することで、端末を再起動することなく必要な関数・変数を随時更新することができます。
これによりダウンタイムを発生させることなく高速に端末の挙動を最適化し、通信量を最大限圧縮することが可能となります。
通信頻度を値によってクラウドから変更する例
if (temperature > 26) {
obniz.plugin!.execLua(`
interval = 1;
`);
} else {
obniz.plugin!.execLua(`
interval = 60;
`);
}
送信されるデータの種類をモードによって切り替える例
if (mode == 'temperature') {
obniz.plugin!.execLua(`
function filter(data)
if data.temperature == nil then
return nil
end
return data
end
`);
} else {
obniz.plugin!.execLua(`
function filter(data)
return data
end
`);
}
Luaの実行環境
LuaはobnizOSを実行しているのと同じCPU上で実行されます。以下のような仕様・制約が存在します。
| 項目 | 概要 |
|---|---|
| 言語 | Lua 5.4.7 ( obnizOSのバージョンによってサポートが異なります ) |
| 数値精度(int/double) | 32bit |
| Flashへ保存可能な容量 | 500kByte ( 最大. デバイスと他のデータの保存状況で減少します ) |
| メモリ(RAM) | 200kByte ( 最大. デバイスとOSの利用状況で減少します ) |
OSによりLuaの実行は常に監視されます。
OSにより異常があると判断された場合は自動的に停止またはセーフモードでの再起動が行われ、誤ったLuaスクリプトの書き込みによるオフラインを防ぎ可能な限りのクラウド接続を保つように動作します。
Luaで利用できる関数など
より詳しいLuaを利用したプログラム方法についてはobniz.jsのガイドを参照してください。