Skip to main content

TimeseriesAggregator

caution

This service is experimental and may change in the future.

Supports aggregating timeseries data (especially sensor readings) and sending them to a cloud/storage service. Used in DeviceScript.

Note that f64 values are not necessarily aligned.

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()

Commands

clear

Remove all pending timeseries.

timeseriesAggregator.clear(): Promise<void>

update

Add a data point to a timeseries.

timeseriesAggregator.update(value: number, label: string): Promise<void>

setWindow

Set aggregation window. Setting to 0 will restore default.

timeseriesAggregator.setWindow(duration: number, label: string): Promise<void>

setUpload

Set whether or not the timeseries will be uploaded to the cloud. The stored reports are generated regardless.

timeseriesAggregator.setUpload(upload: boolean, label: string): Promise<void>

Registers

now

This can queried to establish local time on the device.

  • type: Register<number> (packing format u32)

  • read only

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
const value = await timeseriesAggregator.now.read()
  • track incoming values
import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
timeseriesAggregator.now.subscribe(async (value) => {
...
})
note

write and read will block until a server is bound to the client.

fastStart

When true, the windows will be shorter after service reset and gradually extend to requested length. This is ensure valid data is being streamed in program development.

  • type: Register<boolean> (packing format u8)

  • read and write

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
const value = await timeseriesAggregator.fastStart.read()
await timeseriesAggregator.fastStart.write(value)
  • track incoming values
import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
timeseriesAggregator.fastStart.subscribe(async (value) => {
...
})
note

write and read will block until a server is bound to the client.

defaultWindow

Window for timeseries for which set_window was never called. Note that windows returned initially may be shorter if fast_start is enabled.

  • type: Register<number> (packing format u32)

  • read and write

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
const value = await timeseriesAggregator.defaultWindow.read()
await timeseriesAggregator.defaultWindow.write(value)
  • track incoming values
import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
timeseriesAggregator.defaultWindow.subscribe(async (value) => {
...
})
note

write and read will block until a server is bound to the client.

defaultUpload

Whether labelled timeseries for which set_upload was never called should be automatically uploaded.

  • type: Register<boolean> (packing format u8)

  • read and write

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
const value = await timeseriesAggregator.defaultUpload.read()
await timeseriesAggregator.defaultUpload.write(value)
  • track incoming values
import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
timeseriesAggregator.defaultUpload.subscribe(async (value) => {
...
})
note

write and read will block until a server is bound to the client.

uploadUnlabelled

Whether automatically created timeseries not bound in role manager should be uploaded.

  • type: Register<boolean> (packing format u8)

  • read and write

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
const value = await timeseriesAggregator.uploadUnlabelled.read()
await timeseriesAggregator.uploadUnlabelled.write(value)
  • track incoming values
import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
timeseriesAggregator.uploadUnlabelled.subscribe(async (value) => {
...
})
note

write and read will block until a server is bound to the client.

sensorWatchdogPeriod

If no data is received from any sensor within given period, the device is rebooted. Set to 0 to disable (default). Updating user-provided timeseries does not reset the watchdog.

  • type: Register<number> (packing format u32)

  • read and write

import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
const value = await timeseriesAggregator.sensorWatchdogPeriod.read()
await timeseriesAggregator.sensorWatchdogPeriod.write(value)
  • track incoming values
import { TimeseriesAggregator } from "@devicescript/core"

const timeseriesAggregator = new TimeseriesAggregator()
// ...
timeseriesAggregator.sensorWatchdogPeriod.subscribe(async (value) => {
...
})
note

write and read will block until a server is bound to the client.