Grafana
Battery
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "meshcore_status")
|> filter(fn: (r) => r._field == "bat")
|> map(fn: (r) => ({
_time: r._time,
_value: r._value,
series: r.node
}))
|> group(columns: ["series"])
|> aggregateWindow(every:15m, fn:last, createEmpty:true)
Noise Floor
from(bucket: "meshcore") |> range(start: v.timeRangeStart, stop: v.timeRangeStop) |> filter(fn: (r) => r._measurement == "meshcore_status") |> filter(fn: (r) => r._field == "noise_floor") |> group(columns: ["node"]) |> aggregateWindow(every: 15m, fn: mean, createEmpty: true)
RF Link Health
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "meshcore_status")
|> filter(fn: (r) =>
r._field == "last_snr" or
r._field == "last_rssi" or
r._field == "noise_floor"
)
|> group(columns: ["node", "_field"])
|> aggregateWindow(every:15m, fn:mean, createEmpty:true)
Status SNR
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "meshcore_status")
|> filter(fn: (r) => r._field == "last_snr")
|> map(fn: (r) => ({
_time: r._time,
_value: r._value,
node: r.node
}))
|> group(columns: ["node"])
|> aggregateWindow(every: 15m, fn: mean, createEmpty: true)
Trace SNR
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "meshcore_trace")
|> filter(fn: (r) => r._field == "snr")
|> map(fn: (r) => ({
_time: r._time,
_value: r._value,
route: r.from + " → " + r.to + " : " + r.site
}))
|> group(columns: ["route"])
|> aggregateWindow(every: 15m, fn: mean, createEmpty: true)