From c3673a4dd37bfd9dfd897535b60c06da3cbb50ed Mon Sep 17 00:00:00 2001
From: Darrell
Date: Tue, 15 Feb 2022 18:39:00 -0500
Subject: [PATCH] Fix all issues found debugging (#285)
---
lib/BleFingerprint/BleFingerprint.cpp | 2 +-
lib/BleFingerprint/BleFingerprint.h | 6 ++---
platformio.ini | 16 +++++++++++
src/main.cpp | 39 +++++++++++++++------------
src/main.h | 24 ++++++-----------
5 files changed, 50 insertions(+), 37 deletions(-)
diff --git a/lib/BleFingerprint/BleFingerprint.cpp b/lib/BleFingerprint/BleFingerprint.cpp
index 178c244..968497f 100644
--- a/lib/BleFingerprint/BleFingerprint.cpp
+++ b/lib/BleFingerprint/BleFingerprint.cpp
@@ -81,7 +81,7 @@ int BleFingerprint::get1mRssi()
return _parent->getRefRssi() + DEFAULT_TX;
}
-BleFingerprint::BleFingerprint(BleFingerprintCollection *parent, BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff) : oneEuro{OneEuroFilter(1, fcmin, beta, dcutoff)}
+BleFingerprint::BleFingerprint(BleFingerprintCollection *parent, BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff) : oneEuro{OneEuroFilter(1, fcmin, beta, dcutoff)}
{
_parent = parent;
diff --git a/lib/BleFingerprint/BleFingerprint.h b/lib/BleFingerprint/BleFingerprint.h
index 309ed8a..6c23e71 100644
--- a/lib/BleFingerprint/BleFingerprint.h
+++ b/lib/BleFingerprint/BleFingerprint.h
@@ -94,10 +94,10 @@ private:
unsigned long firstSeenMillis, lastSeenMillis = 0, lastReportedMillis = 0, lastQryMillis = 0;
uint16_t mv = 0;
- Reading> output;
+ Reading> output;
- OneEuroFilter oneEuro;
- DifferentialFilter diffFilter;
+ OneEuroFilter oneEuro;
+ DifferentialFilter diffFilter;
bool filter();
};
diff --git a/platformio.ini b/platformio.ini
index d52b0cf..f197fbd 100644
--- a/platformio.ini
+++ b/platformio.ini
@@ -23,6 +23,7 @@ lib_deps_external =
bbx10/DNSServer@^1.1.0
build_flags =
-D CONFIG_BT_NIMBLE_ROLE_BROADCASTER_DISABLED
+ -D CONFIG_NEWLIB_NANO_FORMAT
[common_sensors]
lib_deps_external =
@@ -44,6 +45,21 @@ monitor_filters = esp32_exception_decoder
build_flags =
-D FIRMWARE='"esp32"'
+[env:esp32-debug]
+build_type=debug
+platform = ${common_env_data.platform}
+framework = ${common_env_data.framework}
+board = esp-wrover-kit
+debug_tool = esp-prog
+upload_protocol = esp-prog
+lib_deps = ${common_env_data.lib_deps_external}
+board_build.partitions = partitions_singleapp.csv
+monitor_speed = 115200
+upload_speed = 1500000
+monitor_filters = esp32_exception_decoder
+build_flags =
+ -D FIRMWARE='"esp32-debug"'
+
[env:adafruit-huzzah32]
platform = ${common_env_data.platform}
framework = ${common_env_data.framework}
diff --git a/src/main.cpp b/src/main.cpp
index d5915ec..7ae3772 100644
--- a/src/main.cpp
+++ b/src/main.cpp
@@ -38,11 +38,11 @@ bool sendTelemetry(int totalSeen, int totalFpSeen, int totalFpQueried, int total
lastTeleMillis = now;
- StaticJsonDocument<512> tele;
- tele["ip"] = localIp;
- tele["uptime"] = getUptimeSeconds();
- tele["firm"] = String(FIRMWARE);
- tele["rssi"] = WiFi.RSSI();
+ doc.clear();
+ doc["ip"] = localIp;
+ doc["uptime"] = getUptimeSeconds();
+ doc["firm"] = String(FIRMWARE);
+ doc["rssi"] = WiFi.RSSI();
#ifdef MACCHINA_A0
tele["batt"] = a0_read_batt_mv() / 1000.0f;
#endif
@@ -50,26 +50,26 @@ bool sendTelemetry(int totalSeen, int totalFpSeen, int totalFpQueried, int total
tele["ver"] = String(VERSION);
#endif
if (totalSeen > 0)
- tele["adverts"] = totalSeen;
+ doc["adverts"] = totalSeen;
if (totalFpSeen > 0)
- tele["seen"] = totalFpSeen;
+ doc["seen"] = totalFpSeen;
if (totalFpQueried > 0)
- tele["queried"] = totalFpQueried;
+ doc["queried"] = totalFpQueried;
if (totalFpReported > 0)
- tele["reported"] = totalFpReported;
+ doc["reported"] = totalFpReported;
if (teleFails > 0)
- tele["teleFails"] = teleFails;
+ doc["teleFails"] = teleFails;
if (reconnectTries > 0)
- tele["reconnectTries"] = reconnectTries;
+ doc["reconnectTries"] = reconnectTries;
- tele["freeHeap"] = ESP.getFreeHeap();
- tele["minFreeHeap"] = ESP.getMinFreeHeap();
- tele["maxAllocHeap"] = ESP.getMaxAllocHeap();
- tele["resetReason"] = resetReason(rtc_get_reset_reason(0));
+ doc["freeHeap"] = ESP.getFreeHeap();
+ doc["minFreeHeap"] = ESP.getMinFreeHeap();
+ doc["maxAllocHeap"] = ESP.getMaxAllocHeap();
+ doc["resetReason"] = resetReason(rtc_get_reset_reason(0));
char teleMessageBuffer[512];
- serializeJson(tele, teleMessageBuffer);
+ serializeJson(doc, teleMessageBuffer);
for (int i = 0; i < 10; i++)
{
@@ -351,7 +351,7 @@ void connectToMqtt()
bool reportDevice(BleFingerprint *f)
{
- StaticJsonDocument<512> doc;
+ doc.clear();
if (!f->report(&doc))
return false;
@@ -407,6 +407,7 @@ void scanForDevices(void *parameter)
while (updateInProgress || !mqttClient.connected())
delay(1000);
+ yield();
auto seen = fingerprints.getCopy();
sendTelemetry(totalSeen, totalFpSeen, totalFpQueried, totalFpReported);
@@ -432,6 +433,7 @@ void scanForDevices(void *parameter)
}
}
+ auto reported = 0;
for (auto it = seen.begin(); it != seen.end(); ++it)
{
auto f = (*it);
@@ -442,7 +444,10 @@ void scanForDevices(void *parameter)
totalFpSeen++;
}
if (reportDevice(f))
+ {
totalFpReported++;
+ reported++;
+ }
}
}
}
diff --git a/src/main.h b/src/main.h
index 9e7fe4d..ac999e9 100644
--- a/src/main.h
+++ b/src/main.h
@@ -67,6 +67,9 @@ AsyncMqttClient mqttClient;
TimerHandle_t reconnectTimer;
TaskHandle_t scannerTask;
+DynamicJsonDocument doc(2048);
+char buffer[2048];
+
bool updateInProgress = false;
String localIp;
unsigned long lastTeleMillis, lastQueryMillis;
@@ -237,6 +240,7 @@ void configureOTA()
void firmwareUpdate()
{
+#ifdef FIRMWARE
if (!autoUpdate) return;
static long lastFirmwareCheck = 0;
long uptime = getUptimeSeconds();
@@ -291,6 +295,7 @@ void firmwareUpdate()
updateInProgress = false;
fingerprints.setDisable(updateInProgress);
+#endif
}
void spiffsInit()
@@ -345,6 +350,7 @@ bool sendOnline()
void commonDiscovery(JsonDocument *doc)
{
+ doc->clear();
auto identifiers = (*doc)["dev"].createNestedArray("ids");
identifiers.add(Sprintf("espresense_%06" PRIx64, ESP.getEfuseMac() >> 24));
auto connections = (*doc)["dev"].createNestedArray("cns");
@@ -356,14 +362,15 @@ void commonDiscovery(JsonDocument *doc)
#ifdef VERSION
(*doc)["dev"]["sw"] = VERSION;
#endif
+#ifdef FIRMWARE
(*doc)["dev"]["mf"] = "ESPresense (" FIRMWARE ")";
+#endif
(*doc)["dev"]["cu"] = "http://" + localIp;
(*doc)["dev"]["mdl"] = ESP.getChipModel();
}
bool sendDiscoveryConnectivity()
{
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room;
@@ -383,7 +390,6 @@ bool sendDiscoveryConnectivity()
bool sendDiscoveryUptime()
{
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Uptime";
@@ -403,7 +409,6 @@ bool sendDiscoveryUptime()
bool sendDiscoveryFreeMem()
{
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Free Memory";
@@ -425,7 +430,6 @@ bool sendDiscoveryMotion()
{
if (!pirPin && !radarPin) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Motion";
@@ -446,7 +450,6 @@ bool sendDiscoveryTemperature()
{
if (!dht11Pin && !dht22Pin) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Temperature";
@@ -457,7 +460,6 @@ bool sendDiscoveryTemperature()
doc["unit_of_meas"] = "°C";
doc["frc_upd"] = true;
- char buffer[1200];
serializeJson(doc, buffer);
String discoveryTopic = "homeassistant/sensor/espresense_" + ESPMAC + "/temperature/config";
return pub(discoveryTopic.c_str(), 0, true, buffer);
@@ -467,7 +469,6 @@ bool sendDiscoveryHumidity()
{
if (!dht11Pin && !dht22Pin) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Humidity";
@@ -477,7 +478,6 @@ bool sendDiscoveryHumidity()
doc["dev_cla"] = "humidity";
doc["frc_upd"] = true;
- char buffer[1200];
serializeJson(doc, buffer);
String discoveryTopic = "homeassistant/sensor/espresense_" + ESPMAC + "/humidity/config";
return pub(discoveryTopic.c_str(), 0, true, buffer);
@@ -487,7 +487,6 @@ bool sendDiscoveryLux()
{
if (BH1750_I2c.isEmpty()) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Lux";
@@ -508,7 +507,6 @@ bool sendDiscoveryBME280Temperature()
{
if (BME280_I2c.isEmpty()) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " BME280 Temperature";
@@ -536,7 +534,6 @@ bool sendDiscoveryBME280Humidity()
{
if (BME280_I2c.isEmpty()) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " BME280 Humidity";
@@ -564,7 +561,6 @@ bool sendDiscoveryBME280Pressure()
{
if (BME280_I2c.isEmpty()) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " BME280 Pressure";
@@ -592,7 +588,6 @@ bool sendDiscoveryTSL2561Lux()
{
if (TSL2561_I2c.isEmpty()) return true;
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " TSL2561 Lux";
@@ -622,7 +617,6 @@ bool sendButtonDiscovery(String name, String entityCategory)
{
auto slug = slugify(name);
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str());
@@ -642,7 +636,6 @@ bool sendSwitchDiscovery(String name, String entityCategory)
{
auto slug = slugify(name);
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str());
@@ -669,7 +662,6 @@ bool sendNumberDiscovery(String name, String entityCategory)
{
auto slug = slugify(name);
- DynamicJsonDocument doc(1200);
commonDiscovery(&doc);
doc["~"] = roomsTopic;
doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str());