From c5333849cd6ae442b44c9f66d75f988252170332 Mon Sep 17 00:00:00 2001
From: DTTerastar
Date: Mon, 11 Oct 2021 19:57:30 -0400
Subject: [PATCH] Don't Query until device is <= maxDistance
---
CHANGELOG.md | 4 +++
lib/BleFingerprint/BleFingerprint.cpp | 14 +++++++--
lib/BleFingerprint/BleFingerprint.h | 2 +-
lib/BleFingerprint/BleFingerprintCollection.h | 1 +
platformio.ini | 30 ++++++++++---------
src/main.cpp | 2 +-
6 files changed, 35 insertions(+), 18 deletions(-)
diff --git a/CHANGELOG.md b/CHANGELOG.md
index ba4e2e6..5cad8e6 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -5,6 +5,10 @@ All notable changes to this project will be documented in this file.
The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/),
and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0.html).
+## [2.0.2]
+
+- Don't Query until device is <= maxDistance
+
## [2.0.1]
- Query bugs squashed! Needs a bit more testing, but it's MUCH better than 2.0
diff --git a/lib/BleFingerprint/BleFingerprint.cpp b/lib/BleFingerprint/BleFingerprint.cpp
index bdd11db..0505728 100644
--- a/lib/BleFingerprint/BleFingerprint.cpp
+++ b/lib/BleFingerprint/BleFingerprint.cpp
@@ -256,7 +256,7 @@ void BleFingerprint::setInitial(int initalRssi, float initalDistance)
hasValue = filter() || filter();
}
-bool BleFingerprint::report(JsonDocument *doc, float maxDistance)
+bool BleFingerprint::report(JsonDocument *doc)
{
if (ignore || (idType == 0 && !macPublic))
return false;
@@ -264,6 +264,7 @@ bool BleFingerprint::report(JsonDocument *doc, float maxDistance)
if (reported || !hasValue)
return false;
+ auto maxDistance = _parent->getMaxDistance();
if (maxDistance > 0 && output.value.position > maxDistance)
return false;
@@ -298,11 +299,20 @@ bool BleFingerprint::report(JsonDocument *doc, float maxDistance)
bool BleFingerprint::query()
{
if (!shouldQuery || didQuery) return false;
+
+ auto maxDistance = _parent->getMaxDistance();
+ if (!maxDistance) maxDistance = 16;
+
+ if (!hasValue || output.value.position > maxDistance)
+ return false;
+
auto now = millis();
if (now - lastQryMillis < 500) return false;
didQuery = true;
lastQryMillis = now;
- auto pClient = NimBLEDevice::getDisconnectedClient();
+
+ NimBLEClient *pClient = NimBLEDevice::getClientListSize() ? NimBLEDevice::getClientByPeerAddress(address) : nullptr;
+ if (!pClient) pClient = NimBLEDevice::getDisconnectedClient();
if (!pClient) pClient = NimBLEDevice::createClient();
pClient->setConnectTimeout(5);
if (pClient->connect(address))
diff --git a/lib/BleFingerprint/BleFingerprint.h b/lib/BleFingerprint/BleFingerprint.h
index df79105..5aa1d5b 100644
--- a/lib/BleFingerprint/BleFingerprint.h
+++ b/lib/BleFingerprint/BleFingerprint.h
@@ -38,7 +38,7 @@ public:
BleFingerprint(BleFingerprintCollection *parent, BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff);
bool seen(BLEAdvertisedDevice *advertisedDevice);
- bool report(JsonDocument *doc, float maxDistance);
+ bool report(JsonDocument *doc);
bool query();
String getId()
diff --git a/lib/BleFingerprint/BleFingerprintCollection.h b/lib/BleFingerprint/BleFingerprintCollection.h
index 54d9b64..6f75471 100644
--- a/lib/BleFingerprint/BleFingerprintCollection.h
+++ b/lib/BleFingerprint/BleFingerprintCollection.h
@@ -31,6 +31,7 @@ public:
int getSkipMs() { return _skipMs; }
float getSkipDistance() { return _skipDistance; }
int getRefRssi() { return _refRssi; }
+ float getMaxDistance() { return _maxDistance; }
private:
bool _disable = false;
diff --git a/platformio.ini b/platformio.ini
index 9f9f3f6..934cd8f 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -12,6 +12,8 @@
default_envs = esp32
[common_env_data]
+platform = espressif32
+framework = arduino
lib_deps_external =
haimoz/SoftFilters@^0.1.0
marvinroger/AsyncMqttClient@^0.9.0
@@ -27,8 +29,8 @@ build_flags =
-D CONFIG_BT_NIMBLE_PINNED_TO_CORE=1
[env:esp32]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = esp32dev
lib_deps = ${common_env_data.lib_deps_external}
board_build.partitions = partitions_singleapp.csv
@@ -39,8 +41,8 @@ build_flags =
-D FIRMWARE='"esp32"'
[env:adafruit-huzzah32]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = esp32dev
lib_deps = ${common_env_data.lib_deps_external}
board_build.partitions = partitions_singleapp.csv
@@ -51,8 +53,8 @@ build_flags =
-D HUZZAH32
[env:esp32-verbose]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = esp32dev
lib_deps = ${common_env_data.lib_deps_external}
board_build.partitions = partitions_singleapp.csv
@@ -65,8 +67,8 @@ build_flags =
-D VERBOSE
[env:m5stickc]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = m5stick-c
lib_deps =
m5stack/M5StickC@^0.2.0
@@ -79,8 +81,8 @@ build_flags =
-D FIRMWARE='"m5stickc"'
[env:m5stickc-plus]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = m5stick-c
lib_deps =
m5stack/M5StickCPlus@^0.0.2
@@ -94,8 +96,8 @@ build_flags =
-D FIRMWARE='"m5stickc-plus"'
[env:m5atom-matrix]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = m5stack-atom
lib_deps =
fastled/FastLED@^3.4.0
@@ -110,8 +112,8 @@ build_flags =
-D FIRMWARE='"m5atom-matrix"'
[env:macchina-a0]
-platform = espressif32
-framework = arduino
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
board = esp32dev
lib_deps = ${common_env_data.lib_deps_external}
board_build.partitions = partitions_singleapp.csv
diff --git a/src/main.cpp b/src/main.cpp
index aeabdc1..c3963ad 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -273,7 +273,7 @@ void connectToMqtt()
bool reportDevice(BleFingerprint *f)
{
StaticJsonDocument<512> doc;
- if (!f->report(&doc, maxDistance))
+ if (!f->report(&doc))
return false;
char JSONmessageBuffer[512];