Fix rss@1m when multiple packets received
This commit is contained in:
parent
d723594e73
commit
2b5bd4b1ca
|
@ -12,10 +12,11 @@ and this project adheres to [Semantic Versioning](https://semver.org/spec/v2.0.0
|
|||
- Breaking Change: iBeacon id's were backwards, they are now correct and match HA Companion
|
||||
- Bump NimBLE to 1.3.1
|
||||
- Add support for blinking m5atom led, red=no wifi, blue=no mqtt, blinking white is packet seen
|
||||
- Fix rssi@1m when multiple packets from same mac
|
||||
|
||||
## [1.5.0]
|
||||
|
||||
- Nothing changed, changes missed this release
|
||||
- Nothing changed, intended changes are in 1.5.1
|
||||
|
||||
## [1.4.4]
|
||||
|
||||
|
|
|
@ -10,15 +10,13 @@ BleFingerprint::BleFingerprint(BLEAdvertisedDevice *advertisedDevice, float fcmi
|
|||
address = advertisedDevice->getAddress();
|
||||
newest = recent = oldest = rssi = advertisedDevice->getRSSI();
|
||||
|
||||
calRssi = advertisedDevice->haveTXPower() ? (-advertisedDevice->getTXPower()) - 41 : 0;
|
||||
|
||||
fingerprint(advertisedDevice);
|
||||
|
||||
if (calRssi > 0) calRssi = defaultTxPower;
|
||||
}
|
||||
|
||||
void BleFingerprint::fingerprint(BLEAdvertisedDevice *advertisedDevice)
|
||||
{
|
||||
calcRssi = advertisedDevice->haveTXPower() ? (-advertisedDevice->getTXPower()) - 41 : NO_RSSI;
|
||||
|
||||
if (advertisedDevice->haveName())
|
||||
name = String(advertisedDevice->getName().c_str());
|
||||
|
||||
|
@ -45,7 +43,7 @@ void BleFingerprint::fingerprint(BLEAdvertisedDevice *advertisedDevice)
|
|||
BLEEddystoneURL oBeacon = BLEEddystoneURL();
|
||||
oBeacon.setData(strServiceData);
|
||||
url = String(oBeacon.getDecodedURL().c_str());
|
||||
calRssi = oBeacon.getPower();
|
||||
calRssi = oBeacon.getPower() - 41;
|
||||
}
|
||||
else if (strServiceData[0] == EDDYSTONE_TLM_FRAME_TYPE)
|
||||
{
|
||||
|
@ -150,9 +148,8 @@ void BleFingerprint::seen(BLEAdvertisedDevice *advertisedDevice)
|
|||
rssi = median_of_3(oldest, recent, newest);
|
||||
|
||||
fingerprint(advertisedDevice);
|
||||
if (!calRssi) calRssi = defaultTxPower;
|
||||
|
||||
float ratio = (calRssi - rssi) / 35.0f;
|
||||
float ratio = (get1mRssi() - rssi) / 35.0f;
|
||||
raw = pow(10, ratio);
|
||||
|
||||
if (filter())
|
||||
|
@ -210,7 +207,7 @@ bool BleFingerprint::report(JsonDocument *doc, int maxDistance)
|
|||
(*doc)[F("id")] = getId();
|
||||
if (!name.isEmpty()) (*doc)[F("name")] = name;
|
||||
|
||||
(*doc)[F("rssi@1m")] = calRssi;
|
||||
(*doc)[F("rssi@1m")] = get1mRssi();
|
||||
(*doc)[F("rssi")] = rssi;
|
||||
|
||||
(*doc)[F("mac")] = mac;
|
||||
|
|
|
@ -9,6 +9,13 @@
|
|||
#include <NimBLEEddystoneURL.h>
|
||||
#include <SoftFilters.h>
|
||||
|
||||
#define NO_RSSI -32768
|
||||
#ifdef TX_DEFAULT
|
||||
static const int defaultTxPower = TX_DEFAULT;
|
||||
#else
|
||||
static const int defaultTxPower = -59;
|
||||
#endif
|
||||
|
||||
#define Sprintf(f, ...) ( \
|
||||
{ \
|
||||
char *s; \
|
||||
|
@ -40,6 +47,12 @@ public:
|
|||
return getMac();
|
||||
}
|
||||
String getMac() { return SMacf(address); }
|
||||
int get1mRssi()
|
||||
{
|
||||
if (calRssi != NO_RSSI) return calRssi;
|
||||
if (calcRssi != NO_RSSI) return calcRssi;
|
||||
return defaultTxPower;
|
||||
}
|
||||
|
||||
float getDistance() { return output.value.position; }
|
||||
int getRSSI() { return rssi; }
|
||||
|
@ -55,7 +68,7 @@ private:
|
|||
bool hasValue = false, close = false, reported = false, macPublic = false;
|
||||
NimBLEAddress address;
|
||||
String pid, sid, name, url;
|
||||
int rssi = -100, calRssi = 0;
|
||||
int rssi = -100, calRssi = NO_RSSI, calcRssi = NO_RSSI;
|
||||
int newest = -100;
|
||||
int recent = -100;
|
||||
int oldest = -100;
|
||||
|
|
|
@ -4,12 +4,6 @@
|
|||
|
||||
#define ENDIAN_CHANGE_U16(x) ((((x)&0xFF00) >> 8) + (((x)&0xFF) << 8))
|
||||
|
||||
#ifdef TX_DEFAULT
|
||||
static const int defaultTxPower = TX_DEFAULT;
|
||||
#else
|
||||
static const int defaultTxPower = -59;
|
||||
#endif
|
||||
|
||||
static BLEUUID eddystoneUUID((uint16_t)0xFEAA);
|
||||
static BLEUUID tileUUID((uint16_t)0xFEED);
|
||||
static BLEUUID exposureUUID((uint16_t)0xFD6F);
|
||||
|
|
Loading…
Reference in New Issue