# 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) ```