timestamp

経過時間を取得したり、obniz.jsに対して時間情報を付与してデータ送信することができます。

cloud.enqueueTimestampByTick(tick)

os.getTick()を呼び出すことでobnizOSが起動から何ミリ秒経過したかを知ることができます。

通常cloud.pluginSend("data");のように送信してもこの"data"がいつのデータなのかはデータの中に時間を含めない限りわかりません。

しかしcloud.enqueueTimestampByTick(tick)関数をデータを送る前に付与することでtickの時刻をunix millisecondsにて付与することができます。

以下の例では3秒ごとにクラウドにデータを2つ送り、1つは1秒前のデータとしてのタイムスタンプ、もう1つは現在時刻のタイムスタンプを付与しています。

tick = 0

function on_online_loop() 
  local current = os.getTick()
  if tick == 0 then
    tick = current
  end
  if current - tick >= 3 * 1000 then
    tick = current
    os.log(" - 3 seconds passed");

    -- add old data with data retrieval timestamp
    cloud.enqueueTimestampByTick(current-1000);
    cloud.pluginSend("this is 1 sec old data");

    -- just add simple timestamp
    cloud.enqueueTimestampByTick(current);
    cloud.pluginSend("now");
  end
end

javascript側ではonreceiveにてデータを受信したときにobniz.deviceTimestampからデータを受け取ることができます。

この時間は1970年1月1日からの経過ミリ秒となっています。

Note: 端末の時計を合わせない限り時間がずれるため、開始時と定期的なタイミングでobniz.setClock()を呼び出す必要があります。

  obniz.setClock();
  obniz.plugin.onreceive = (data) => {
    console.log(`data "${Buffer.from(data).toString()}" is ${(Date.now() - (obniz.deviceTimestamp)) / 1000} seconds old`);
  };