rdm.sh
Attachments
History
Blame
View Source
Changelog
Documentation
About An Otter Wiki
Toggle dark mode
Login
Home
A - Z
Menu
MeshCore
Howto
Grafana
0103fd
Commit
0103fd
2026-04-28 00:50:54
David Marsh
: -/-
howto/grafana.md
..
@@ 1,48 1,75 @@
# Grafana
-
## snr
+
## Battery
```
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
-
|> filter(fn: (r) => r._measurement == "meshcore_trace")
-
|> filter(fn: (r) => r._field == "snr")
+
|> filter(fn: (r) => r._measurement == "meshcore_status")
+
|> filter(fn: (r) => r._field == "bat")
|> map(fn: (r) => ({
-
_time: r._time,
-
_value: r._value,
-
route: r.from + " → " + r.to
+
_time: r._time,
+
_value: r._value,
+
series: r.node
}))
-
|> group(columns: ["route"])
+
|> group(columns: ["series"])
+
|> aggregateWindow(every:15m, fn:last, createEmpty:true)
```
-
with avg
+
## Noise Floor
```
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
-
|> filter(fn: (r) => r._measurement == "meshcore_trace")
-
|> filter(fn: (r) => r._field == "snr")
+
|> 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,
-
route: r.from + " → " + r.to
+
_time: r._time,
+
_value: r._value,
+
node: r.node
}))
-
|> group(columns: ["route"])
-
|> aggregateWindow(every: 15m, fn: mean, createEmpty: false)
-
|> movingAverage(n: 2)
+
|> group(columns: ["node"])
+
|> aggregateWindow(every: 15m, fn: mean, createEmpty: true)
```
-
## status
+
### Trace SNR
```
from(bucket: "meshcore")
|> range(start: v.timeRangeStart, stop: v.timeRangeStop)
|> filter(fn: (r) => r._measurement == "meshcore_trace")
-
|> filter(fn: (r) => r._field == "success")
+
|> filter(fn: (r) => r._field == "snr")
|> map(fn: (r) => ({
-
_time: r._time,
-
_value: r._value,
-
_field: r.path
+
_time: r._time,
+
_value: r._value,
+
route: r.from + " → " + r.to + " : " + r.site
}))
-
|> group(columns: ["_field"])
+
|> group(columns: ["route"])
+
|> aggregateWindow(every: 15m, fn: mean, createEmpty: true)
```
0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9 0 1 2 3 4 5 6 7 8 9