データ送受信

OS上で動作するLuaプラグインとjavascriptSDKの間でデータのやり取りを行うことができます。

obniz.plugin.send()

obniz.js側からプラグインへバイナリ列を送信します。

// Javascript Example
obniz.plugin.send("obniz.js send data get device?")
obniz.plugin.send([0x00, 0x01, 0x02])

Luaプラグインではon_command()で受信します

function on_command(command)
  os.log(command)
end

obniz.plugin.onreceive

プラグイン側から送信されたバイナリ列を受け取ります。

// Javascript Example
obniz.plugin.onreceive = (data) => {
  console.log(data);
};

Luaプラグインではcloud.pluginSend()で送信します。

cloud.pluginSend("123");

obniz.plugin.onFrameStart / onFrameEnd

プラグイン側からフレーム情報が送られたときに呼び出されます。

大きなデータを送信する際にデータの区切りを示すのに便利です。
onFrameStartではプラグイン側から送信されたframe_idとデータの長さを受け取ることができ、その後大きなデータであれば何度かonreceiveでデータを受信することになります。そしてすべてのデータの受信が完了するとonFrameEndが呼び出されます。

// Javascript Example
  obniz.plugin!.onFrameStart = (frame_id, length) => {
    console.log(`frame start id=${frame_id} length=${length}`);
  }
  obniz.plugin!.onFrameEnd = () => {
    console.log(`frame ended`);
  }
  obniz.plugin!.onreceive = (data) => {
    console.log(`received=${Buffer.from(data).toString()}`);
  };

Luaプラグインでは以下のコマンドでの送信となります。

cloud.pluginSendFrameStart(frame_id, length); -- framing 
cloud.pluginSend("123");
cloud.pluginSend("456");
cloud.pluginSend("789");
cloud.pluginSendFrameEnd(); -- framing