From 526bcbf8a7ea4e1b4a19fb39c5989405389ea39d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mads=20stenk=C3=A6r?= Date: Wed, 12 Jun 2024 10:35:41 +0200 Subject: [PATCH 1/4] Updated adr with corrected return value --- .../sensade-adr-mod/sensade-adr.js | 130 +++++++----------- 1 file changed, 48 insertions(+), 82 deletions(-) diff --git a/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js b/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js index e0d2005..c47aeed 100644 --- a/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js +++ b/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js @@ -12,7 +12,7 @@ export function id() { // // Input object example: // { -// regionName: "eu868", +// regionConfigId: "eu868", // regionCommonName: "EU868", // devEui: "0102030405060708", // macVersion: "1.0.3", @@ -43,114 +43,80 @@ export function id() { // txPowerIndex: 1, // nbTrans: 1 // } -// Handle function for ADR request. export function handle(req) { - // This defines the default response, which is equal to the current device state. - let resp = { - dr: req.DR, - txPowerIndex: req.TxPowerIndex, - nbTrans: req.NbTrans, - }; + var resp = req; resp.txPowerIndex = 0; - // If ADR is disabled, return with current values. - if (!req.ADR) { - return [resp, null]; + if (!req.adr) { + return { + dr: resp.dr, + txPowerIndex: resp.txPowerIndex, + nbTrans: resp.nbTrans + }; } - let lostPackageCnt = getLostPackageCount(req); - // If 5 or more packages are lost during the last received packages, decrease the data-rate - if (lostPackageCnt >= 5) { + var lostPackageCntNew = getLostPackageCount(req.uplinkHistory, 20); + + if (lostPackageCntNew >= 5) { resp.dr -= 1; - } else if ( - req.UplinkHistory.length === 20 && - getLostPackageCount(req, 20) <= 2 - ) { - // If 2 or fewer packages are lost during the last 20 received packages, the dr might be able to be increased - - // We only want to increase the dr if none of the previously received packages - // are within the installationMargin of the minimum required snr for the current dr - // The installationMargin should prevent us from increasing the dr too much, such that packages are lost - // when cars park in a spot. - let minSNR = getMinSNR(req); - let installationMargin = 10; - // A margin of around 10 seems okay - // This value has been chosen based on the loRaSNR values from sensors installed in a parking lot, - // where a fluctuation of +- 10 can be seen (should be caused by cars parking and leaving). - let diffSNR = minSNR - req.requiredHistoryCount - installationMargin; - - // Examples: - // minSNR = -5 - // requiredSNRforDR = -10 - // installationMargin = 10 - // diffSNR = -5 - -10 - 10 = -5 - // => Not safe to increase the dr - - // minSNR = 5 - // requiredSNRforDR = -10 - // installationMargin = 10 - // diffSNR = 5 - -10 - 10 = 5 - // => The dr should be safe to increase - - if (diffSNR > 0) { + } else if (req.uplinkHistory.length >= 20 && getLostPackageCount(req.uplinkHistory, 20) <= 2) { + var minSnr = getMinSnr(req.uplinkHistory); + var installationMargin = 10; + + var diffSnr = minSnr - req.requiredSnrForDr - installationMargin; + + if (diffSnr > 0) { resp.dr += 1; } } - // If the data rate is increased or reduced to something outside the Min - Max range, - // set it to the respective limit if (req.maxDr < resp.dr) { resp.dr = req.maxDr; } - if (req.MinDR > resp.dr) { - resp.dr = req.MinDR; + if (req.minDr > resp.dr) { + resp.dr = req.minDr; } - return [resp, null]; + return { + dr: resp.dr, + txPowerIndex: resp.txPowerIndex, + nbTrans: resp.nbTrans + }; } -function getMinSNR(req) { - let snrM = 999; - for (const uh of req.uplinkHistory) { - if (uh.maxSnr < snrM) { - snrM = uh.maxSnr; - } - } - return snrM; -} +function getLostPackageCount(uplinkHistory, lastXElements) { + var len = uplinkHistory.length; -// Function to get the count of lost packages from the request. -function getLostPackageCount(req, ...lastXElement) { - if (req.uplinkHistory.length < 2) { - return 0; + if (len < lastXElements) { + lastXElements = len; } - let elements = req.uplinkHistory; + var elements = uplinkHistory.slice(-lastXElements); - if (lastXElement.length > 0) { - let x = lastXElement[0]; - if (x < elements.length) { - elements = elements.slice(elements.length - x); - } + var prevFcnt = elements[0].fCnt; + var lostPackages = 0; + + for (var element of elements.slice(1)) { + var curFcnt = element.fCnt; + var diff = curFcnt - prevFcnt; + + lostPackages += diff - 1; + prevFcnt = curFcnt; } - let lostPackets = 0; - let previousFCnt = 0; + return lostPackages; +} - for (let i = 0; i < elements.length; i++) { - const m = elements[i]; +function getMinSnr(uplinkHistory) { + var snrM = 999; - if (i === 0) { - previousFCnt = m.FCnt; - continue; + for (var element of uplinkHistory) { + if (element.maxSnr < snrM) { + snrM = element.maxSnr; } - - lostPackets += m.FCnt - previousFCnt - 1; // there is always an expected difference of 1 - previousFCnt = m.FCnt; } - - return lostPackets; -} + return snrM; +} \ No newline at end of file From 4d5ccd29c7965915b84667d91a0b4dd0da3eff41 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mads=20stenk=C3=A6r?= Date: Wed, 12 Jun 2024 10:43:04 +0200 Subject: [PATCH 2/4] RegionConfigId -> RegionName --- .../chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js b/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js index c47aeed..d23e6e6 100644 --- a/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js +++ b/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js @@ -12,7 +12,7 @@ export function id() { // // Input object example: // { -// regionConfigId: "eu868", +// regionName: "eu868", // regionCommonName: "EU868", // devEui: "0102030405060708", // macVersion: "1.0.3", From 70fb89eec5884c72af3410c600af10d08778ed69 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?mads=20stenk=C3=A6r?= Date: Tue, 18 Jun 2024 11:50:43 +0200 Subject: [PATCH 3/4] Updates in relation to pr comments --- .../sensade-adr-mod/sensade-adr.js | 125 +++++++++++------- 1 file changed, 79 insertions(+), 46 deletions(-) diff --git a/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js b/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js index d23e6e6..b59ad88 100644 --- a/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js +++ b/configuration/chirpstack/adr-modules/sensade-adr-mod/sensade-adr.js @@ -43,34 +43,62 @@ export function id() { // txPowerIndex: 1, // nbTrans: 1 // } -export function handle(req) { - var resp = req; - resp.txPowerIndex = 0; +// Handle function for ADR request. +export function handle(req) { + // This defines the default response, which is equal to the current device state. + let resp = { + dr: req.dr, + txPowerIndex: 0, + nbTrans: req.nbTrans, + }; + // If ADR is disabled, return with current values. if (!req.adr) { - return { - dr: resp.dr, - txPowerIndex: resp.txPowerIndex, - nbTrans: resp.nbTrans - }; + return resp; } - var lostPackageCntNew = getLostPackageCount(req.uplinkHistory, 20); - - if (lostPackageCntNew >= 5) { + let lostPackageCnt = getLostPackageCount(req); + // If 5 or more packages are lost during the last received packages, decrease the data-rate + if (lostPackageCnt >= 5) { resp.dr -= 1; - } else if (req.uplinkHistory.length >= 20 && getLostPackageCount(req.uplinkHistory, 20) <= 2) { - var minSnr = getMinSnr(req.uplinkHistory); - var installationMargin = 10; - - var diffSnr = minSnr - req.requiredSnrForDr - installationMargin; - - if (diffSnr > 0) { + } else if ( + req.uplinkHistory.length >= 20 && + getLostPackageCount(req, 20) <= 2 + ) { + // If 2 or fewer packages are lost during the last 20 received packages, the dr might be able to be increased + + // We only want to increase the dr if none of the previously received packages + // are within the installationMargin of the minimum required snr for the current dr + // The installationMargin should prevent us from increasing the dr too much, such that packages are lost + // when cars park in a spot. + let minSNR = getMinSNR(req); + let installationMargin = 10; + // A margin of around 10 seems okay + // This value has been chosen based on the loRaSNR values from sensors installed in a parking lot, + // where a fluctuation of +- 10 can be seen (should be caused by cars parking and leaving). + let diffSNR = minSNR - req.requiredSnrForDr - installationMargin; + + // Examples: + // minSNR = -5 + // requiredSNRforDR = -10 + // installationMargin = 10 + // diffSNR = -5 - -10 - 10 = -5 + // => Not safe to increase the dr + + // minSNR = 5 + // requiredSNRforDR = -10 + // installationMargin = 10 + // diffSNR = 5 - -10 - 10 = 5 + // => The dr should be safe to increase + + if (diffSNR > 0) { resp.dr += 1; } } + // If the data rate is increased or reduced to something outside the Min - Max range, + // set it to the respective limit if (req.maxDr < resp.dr) { resp.dr = req.maxDr; } @@ -79,44 +107,49 @@ export function handle(req) { resp.dr = req.minDr; } - return { - dr: resp.dr, - txPowerIndex: resp.txPowerIndex, - nbTrans: resp.nbTrans - }; + return resp; } +function getMinSNR(req) { + let snrM = 999; -function getLostPackageCount(uplinkHistory, lastXElements) { - var len = uplinkHistory.length; - - if (len < lastXElements) { - lastXElements = len; + for (const uh of req.uplinkHistory) { + if (uh.maxSnr < snrM) { + snrM = uh.maxSnr; + } } + return snrM; +} - var elements = uplinkHistory.slice(-lastXElements); - - var prevFcnt = elements[0].fCnt; - var lostPackages = 0; +// Function to get the count of lost packages from the request. +function getLostPackageCount(req, ...lastXElement) { + if (req.uplinkHistory.length < 2) { + return 0; + } - for (var element of elements.slice(1)) { - var curFcnt = element.fCnt; - var diff = curFcnt - prevFcnt; + let elements = req.uplinkHistory; - lostPackages += diff - 1; - prevFcnt = curFcnt; + if (lastXElement.length > 0) { + let x = lastXElement[0]; + if (x < elements.length) { + elements = elements.slice(elements.length - x); + } } - return lostPackages; -} + let lostPackets = 0; + let previousFCnt = 0; -function getMinSnr(uplinkHistory) { - var snrM = 999; + for (let i = 0; i < elements.length; i++) { + const m = elements[i]; - for (var element of uplinkHistory) { - if (element.maxSnr < snrM) { - snrM = element.maxSnr; + if (i === 0) { + previousFCnt = m.fCnt; + continue; } + + lostPackets += m.fCnt - previousFCnt - 1; // there is always an expected difference of 1 + previousFCnt = m.fCnt; } - return snrM; -} \ No newline at end of file + + return lostPackets; +} From ff4b5965d2f6b19cd1549cd86c2818104ec9a8d7 Mon Sep 17 00:00:00 2001 From: August Andersen Date: Fri, 21 Nov 2025 14:16:02 +0100 Subject: [PATCH 4/4] updated some files to make docker work --- docker-compose.yml | 4 ++-- mosquitto-broker/Dockerfile | 2 ++ simulator/Dockerfile | 3 ++- 3 files changed, 6 insertions(+), 3 deletions(-) diff --git a/docker-compose.yml b/docker-compose.yml index 830fc1b..4f61b0e 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -146,7 +146,7 @@ services: - pg-data:/var/lib/postgresql:Z os2iot-zookeeper: - image: "bitnami/zookeeper:latest" + image: "bitnamilegacy/zookeeper:latest" ports: - "2181:2181" environment: @@ -156,7 +156,7 @@ services: tmpfs: "/datalog" os2iot-kafka: - image: "bitnami/kafka:latest" + image: "bitnamilegacy/kafka:3" ports: - "9092:9092" - "9093:9093" diff --git a/mosquitto-broker/Dockerfile b/mosquitto-broker/Dockerfile index 0b6291a..ecf04be 100644 --- a/mosquitto-broker/Dockerfile +++ b/mosquitto-broker/Dockerfile @@ -58,6 +58,8 @@ RUN git clone https://github.com/iegomez/mosquitto-go-auth.git WORKDIR /home/mosquitto-go-auth +RUN git checkout tags/2.1.0 + RUN make WORKDIR /etc/mosquitto/conf.d diff --git a/simulator/Dockerfile b/simulator/Dockerfile index 2e42dee..aff8b49 100644 --- a/simulator/Dockerfile +++ b/simulator/Dockerfile @@ -7,10 +7,11 @@ RUN apt-get update && apt-get install git -y ARG DEBIAN_FRONTEND=noninteractive RUN apt-get update && apt-get install golang -y +RUN apt-get install golang-statik -y RUN apt-get install ca-certificates -y -RUN git clone --branch v1.0.2 https://github.com/UniCT-ARSLab/LWN-Simulator.git +RUN git clone https://github.com/UniCT-ARSLab/LWN-Simulator.git WORKDIR /LWN-Simulator