Überblick
LoRaWAN-Frames werden mit einem Frame-Counter versendet. Gehen Frames z. B. durch Kollisionen oder durch schlechte Funkkanalqualität verloren, lässt sich dies an fehlenden Frame-Nummern erkennen. Die Paketverlustrate (PER) gibt an, wie viele der erwarteten Pakete in einem Zeitraum nicht angekommen sind. Im LoRaWAN-Netzmonitoring ist die PER eine etablierte Kenngröße zur Bewertung der Uplink-Qualität und wird häufig zusammen mit RSSI und SNR genutzt, um die Funkverbindung zu überwachen, Störungen oder Kollisionen zu erkennen und die Netzplanung zu unterstützen.
In diesem Best Practice wird beschrieben, wie in einem Gerätetemplate die PER aus dem _raw-Datenpunkt berechnet und anschließend über eine Messuhr mit Schwellenwerten (z. B. hellgrün → orange → rot) visualisiert werden kann. Dazu werden zwei Datenpunkte angelegt: einer sammelt die Frame-Counter und berechnet die PER für die letzten 5, 10 und 25 Pakete; ein zweiter übernimmt den PER-Wert (z. B. für die letzten 25 Pakete) und wird als Messuhr dargestellt.
Voraussetzungen
- Ein Virtuelles Gerät bzw. Gerätetemplate mit LoRaWAN-Datenquelle, das den
_raw-Datenpunkt mitframe_counterliefert. - Zugriff auf die Datenpunkt-Konfiguration (z. B. im Gerätetemplate oder im Virtuellen Gerät).
Konfiguration
Datenpunkt zur PER-Berechnung anlegen
Ein neuer Datenpunkt speichert die Frame-Counter der letzten 25 empfangenen Frames und berechnet daraus die PER für die letzten 5, 10 und 25 Pakete.
| Einstellung | Wert |
|---|---|
| Titel | _LoRaPacketLoss |
| Quelle | Virtuelles Gerät Aggregation – _raw |
| Anzeigen als | Versteckt |
JavaScript-Transformer:
module.exports = (data, lastData, meta) => {
let returnValue = {
"savedFrameCounters": [],
"PERLast5": null,
"PERLast10": null,
"PERLast25": null
};
if (lastData) {
returnValue.savedFrameCounters = lastData.value.savedFrameCounters;
}
returnValue.savedFrameCounters.unshift(data._raw.frame_counter);
returnValue.PERLast5 = calculateRecentPacketLoss(returnValue.savedFrameCounters, 5);
returnValue.PERLast10 = calculateRecentPacketLoss(returnValue.savedFrameCounters, 10);
returnValue.PERLast25 = calculateRecentPacketLoss(returnValue.savedFrameCounters, 25);
returnValue.savedFrameCounters = returnValue.savedFrameCounters.slice(0, 25);
return returnValue;
};
function calculateRecentPacketLoss(frameCounters, interval) {
if (!Array.isArray(frameCounters) || frameCounters.length < 2 || interval < 1) {
return null;
}
const expected = [];
const received = new Set(frameCounters);
let count = 0;
let current = frameCounters[0];
expected.push(current);
count++;
for (let i = 1; i < frameCounters.length && count < interval; i++) {
const next = frameCounters[i];
let step;
if (current > next) {
step = current - next;
for (let j = 1; j <= step && count < interval; j++) {
expected.push(current - j);
count++;
}
} else if (current < next) {
for (let j = current - 1; j >= 0 && count < interval; j--) {
expected.push(j);
count++;
}
if (count < interval) {
expected.push(next);
count++;
}
}
current = next;
}
if (expected.length < interval) {
return null;
}
const trimmedExpected = expected.slice(0, interval);
const missingFrames = trimmedExpected.filter(f => !received.has(f));
const per = (missingFrames.length / interval) * 100;
return per;
}
Der Datenpunkt bleibt versteckt und dient nur als Quelle für die PER-Anzeige. Ein Rejoin des Geräts (Rücksetzen des Frame-Counters) wird in der Logik berücksichtigt.
Datenpunkt zur Anzeige der PER anlegen (Messuhr)
Ein zweiter Datenpunkt liest den PER-Wert aus dem ersten Datenpunkt und wird als Messuhr mit Schwellenwerten dargestellt.
| Einstellung | Wert |
|---|---|
| Titel | per |
| Icon | wifi |
| Quelle | Virtuelles Gerät Aggregation – _LoRaPacketLoss |
| Typ | number |
| Anzeigen als | Messuhr |
| Minimalwert | 0 |
| Maximalwert | 100 |
| Schwellenwerte | 33, 66 |
| Nachkommestellen | 0 |
| Farbzuordnung | hellgrün → orange → rot |
JavaScript-Transformer:
module.exports = (data) => {
return data._lorapacketloss.PERLast25;
};
Damit wird die PER der letzten 25 Pakete in Prozent (0–100) auf der Messuhr angezeigt. Die Schwellenwerte 33 und 66 unterteilen den Bereich in grün (0–33), orange (33–66) und rot (66–100) und eignen sich zur schnellen Einschätzung der Funkqualität.
Verwandte Themen
- Framecounter – Frame-Counter auslesen und Paketverluste über die Differenz zum letzten Wert erkennen.