Fix all issues found debugging (#285)

This commit is contained in:
Darrell 2022-02-15 18:39:00 -05:00 committed by GitHub
parent 9015878c0c
commit c3673a4dd3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
5 changed files with 50 additions and 37 deletions

View File

@ -81,7 +81,7 @@ int BleFingerprint::get1mRssi()
return _parent->getRefRssi() + DEFAULT_TX; return _parent->getRefRssi() + DEFAULT_TX;
} }
BleFingerprint::BleFingerprint(BleFingerprintCollection *parent, BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff) : oneEuro{OneEuroFilter<float, long long>(1, fcmin, beta, dcutoff)} BleFingerprint::BleFingerprint(BleFingerprintCollection *parent, BLEAdvertisedDevice *advertisedDevice, float fcmin, float beta, float dcutoff) : oneEuro{OneEuroFilter<double, unsigned long>(1, fcmin, beta, dcutoff)}
{ {
_parent = parent; _parent = parent;

View File

@ -94,10 +94,10 @@ private:
unsigned long firstSeenMillis, lastSeenMillis = 0, lastReportedMillis = 0, lastQryMillis = 0; unsigned long firstSeenMillis, lastSeenMillis = 0, lastReportedMillis = 0, lastQryMillis = 0;
uint16_t mv = 0; uint16_t mv = 0;
Reading<Differential<float>> output; Reading<Differential<double>> output;
OneEuroFilter<float, long long> oneEuro; OneEuroFilter<double, unsigned long> oneEuro;
DifferentialFilter<float, long long> diffFilter; DifferentialFilter<double, unsigned long> diffFilter;
bool filter(); bool filter();
}; };

View File

@ -23,6 +23,7 @@ lib_deps_external =
bbx10/DNSServer@^1.1.0 bbx10/DNSServer@^1.1.0
build_flags = build_flags =
-D CONFIG_BT_NIMBLE_ROLE_BROADCASTER_DISABLED -D CONFIG_BT_NIMBLE_ROLE_BROADCASTER_DISABLED
-D CONFIG_NEWLIB_NANO_FORMAT
[common_sensors] [common_sensors]
lib_deps_external = lib_deps_external =
@ -44,6 +45,21 @@ monitor_filters = esp32_exception_decoder
build_flags = build_flags =
-D FIRMWARE='"esp32"' -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] [env:adafruit-huzzah32]
platform = ${common_env_data.platform} platform = ${common_env_data.platform}
framework = ${common_env_data.framework} framework = ${common_env_data.framework}

View File

@ -38,11 +38,11 @@ bool sendTelemetry(int totalSeen, int totalFpSeen, int totalFpQueried, int total
lastTeleMillis = now; lastTeleMillis = now;
StaticJsonDocument<512> tele; doc.clear();
tele["ip"] = localIp; doc["ip"] = localIp;
tele["uptime"] = getUptimeSeconds(); doc["uptime"] = getUptimeSeconds();
tele["firm"] = String(FIRMWARE); doc["firm"] = String(FIRMWARE);
tele["rssi"] = WiFi.RSSI(); doc["rssi"] = WiFi.RSSI();
#ifdef MACCHINA_A0 #ifdef MACCHINA_A0
tele["batt"] = a0_read_batt_mv() / 1000.0f; tele["batt"] = a0_read_batt_mv() / 1000.0f;
#endif #endif
@ -50,26 +50,26 @@ bool sendTelemetry(int totalSeen, int totalFpSeen, int totalFpQueried, int total
tele["ver"] = String(VERSION); tele["ver"] = String(VERSION);
#endif #endif
if (totalSeen > 0) if (totalSeen > 0)
tele["adverts"] = totalSeen; doc["adverts"] = totalSeen;
if (totalFpSeen > 0) if (totalFpSeen > 0)
tele["seen"] = totalFpSeen; doc["seen"] = totalFpSeen;
if (totalFpQueried > 0) if (totalFpQueried > 0)
tele["queried"] = totalFpQueried; doc["queried"] = totalFpQueried;
if (totalFpReported > 0) if (totalFpReported > 0)
tele["reported"] = totalFpReported; doc["reported"] = totalFpReported;
if (teleFails > 0) if (teleFails > 0)
tele["teleFails"] = teleFails; doc["teleFails"] = teleFails;
if (reconnectTries > 0) if (reconnectTries > 0)
tele["reconnectTries"] = reconnectTries; doc["reconnectTries"] = reconnectTries;
tele["freeHeap"] = ESP.getFreeHeap(); doc["freeHeap"] = ESP.getFreeHeap();
tele["minFreeHeap"] = ESP.getMinFreeHeap(); doc["minFreeHeap"] = ESP.getMinFreeHeap();
tele["maxAllocHeap"] = ESP.getMaxAllocHeap(); doc["maxAllocHeap"] = ESP.getMaxAllocHeap();
tele["resetReason"] = resetReason(rtc_get_reset_reason(0)); doc["resetReason"] = resetReason(rtc_get_reset_reason(0));
char teleMessageBuffer[512]; char teleMessageBuffer[512];
serializeJson(tele, teleMessageBuffer); serializeJson(doc, teleMessageBuffer);
for (int i = 0; i < 10; i++) for (int i = 0; i < 10; i++)
{ {
@ -351,7 +351,7 @@ void connectToMqtt()
bool reportDevice(BleFingerprint *f) bool reportDevice(BleFingerprint *f)
{ {
StaticJsonDocument<512> doc; doc.clear();
if (!f->report(&doc)) if (!f->report(&doc))
return false; return false;
@ -407,6 +407,7 @@ void scanForDevices(void *parameter)
while (updateInProgress || !mqttClient.connected()) while (updateInProgress || !mqttClient.connected())
delay(1000); delay(1000);
yield();
auto seen = fingerprints.getCopy(); auto seen = fingerprints.getCopy();
sendTelemetry(totalSeen, totalFpSeen, totalFpQueried, totalFpReported); 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) for (auto it = seen.begin(); it != seen.end(); ++it)
{ {
auto f = (*it); auto f = (*it);
@ -442,7 +444,10 @@ void scanForDevices(void *parameter)
totalFpSeen++; totalFpSeen++;
} }
if (reportDevice(f)) if (reportDevice(f))
{
totalFpReported++; totalFpReported++;
reported++;
}
} }
} }
} }

View File

@ -67,6 +67,9 @@ AsyncMqttClient mqttClient;
TimerHandle_t reconnectTimer; TimerHandle_t reconnectTimer;
TaskHandle_t scannerTask; TaskHandle_t scannerTask;
DynamicJsonDocument doc(2048);
char buffer[2048];
bool updateInProgress = false; bool updateInProgress = false;
String localIp; String localIp;
unsigned long lastTeleMillis, lastQueryMillis; unsigned long lastTeleMillis, lastQueryMillis;
@ -237,6 +240,7 @@ void configureOTA()
void firmwareUpdate() void firmwareUpdate()
{ {
#ifdef FIRMWARE
if (!autoUpdate) return; if (!autoUpdate) return;
static long lastFirmwareCheck = 0; static long lastFirmwareCheck = 0;
long uptime = getUptimeSeconds(); long uptime = getUptimeSeconds();
@ -291,6 +295,7 @@ void firmwareUpdate()
updateInProgress = false; updateInProgress = false;
fingerprints.setDisable(updateInProgress); fingerprints.setDisable(updateInProgress);
#endif
} }
void spiffsInit() void spiffsInit()
@ -345,6 +350,7 @@ bool sendOnline()
void commonDiscovery(JsonDocument *doc) void commonDiscovery(JsonDocument *doc)
{ {
doc->clear();
auto identifiers = (*doc)["dev"].createNestedArray("ids"); auto identifiers = (*doc)["dev"].createNestedArray("ids");
identifiers.add(Sprintf("espresense_%06" PRIx64, ESP.getEfuseMac() >> 24)); identifiers.add(Sprintf("espresense_%06" PRIx64, ESP.getEfuseMac() >> 24));
auto connections = (*doc)["dev"].createNestedArray("cns"); auto connections = (*doc)["dev"].createNestedArray("cns");
@ -356,14 +362,15 @@ void commonDiscovery(JsonDocument *doc)
#ifdef VERSION #ifdef VERSION
(*doc)["dev"]["sw"] = VERSION; (*doc)["dev"]["sw"] = VERSION;
#endif #endif
#ifdef FIRMWARE
(*doc)["dev"]["mf"] = "ESPresense (" FIRMWARE ")"; (*doc)["dev"]["mf"] = "ESPresense (" FIRMWARE ")";
#endif
(*doc)["dev"]["cu"] = "http://" + localIp; (*doc)["dev"]["cu"] = "http://" + localIp;
(*doc)["dev"]["mdl"] = ESP.getChipModel(); (*doc)["dev"]["mdl"] = ESP.getChipModel();
} }
bool sendDiscoveryConnectivity() bool sendDiscoveryConnectivity()
{ {
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room; doc["name"] = "ESPresense " + room;
@ -383,7 +390,6 @@ bool sendDiscoveryConnectivity()
bool sendDiscoveryUptime() bool sendDiscoveryUptime()
{ {
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Uptime"; doc["name"] = "ESPresense " + room + " Uptime";
@ -403,7 +409,6 @@ bool sendDiscoveryUptime()
bool sendDiscoveryFreeMem() bool sendDiscoveryFreeMem()
{ {
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Free Memory"; doc["name"] = "ESPresense " + room + " Free Memory";
@ -425,7 +430,6 @@ bool sendDiscoveryMotion()
{ {
if (!pirPin && !radarPin) return true; if (!pirPin && !radarPin) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Motion"; doc["name"] = "ESPresense " + room + " Motion";
@ -446,7 +450,6 @@ bool sendDiscoveryTemperature()
{ {
if (!dht11Pin && !dht22Pin) return true; if (!dht11Pin && !dht22Pin) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Temperature"; doc["name"] = "ESPresense " + room + " Temperature";
@ -457,7 +460,6 @@ bool sendDiscoveryTemperature()
doc["unit_of_meas"] = "°C"; doc["unit_of_meas"] = "°C";
doc["frc_upd"] = true; doc["frc_upd"] = true;
char buffer[1200];
serializeJson(doc, buffer); serializeJson(doc, buffer);
String discoveryTopic = "homeassistant/sensor/espresense_" + ESPMAC + "/temperature/config"; String discoveryTopic = "homeassistant/sensor/espresense_" + ESPMAC + "/temperature/config";
return pub(discoveryTopic.c_str(), 0, true, buffer); return pub(discoveryTopic.c_str(), 0, true, buffer);
@ -467,7 +469,6 @@ bool sendDiscoveryHumidity()
{ {
if (!dht11Pin && !dht22Pin) return true; if (!dht11Pin && !dht22Pin) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Humidity"; doc["name"] = "ESPresense " + room + " Humidity";
@ -477,7 +478,6 @@ bool sendDiscoveryHumidity()
doc["dev_cla"] = "humidity"; doc["dev_cla"] = "humidity";
doc["frc_upd"] = true; doc["frc_upd"] = true;
char buffer[1200];
serializeJson(doc, buffer); serializeJson(doc, buffer);
String discoveryTopic = "homeassistant/sensor/espresense_" + ESPMAC + "/humidity/config"; String discoveryTopic = "homeassistant/sensor/espresense_" + ESPMAC + "/humidity/config";
return pub(discoveryTopic.c_str(), 0, true, buffer); return pub(discoveryTopic.c_str(), 0, true, buffer);
@ -487,7 +487,6 @@ bool sendDiscoveryLux()
{ {
if (BH1750_I2c.isEmpty()) return true; if (BH1750_I2c.isEmpty()) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " Lux"; doc["name"] = "ESPresense " + room + " Lux";
@ -508,7 +507,6 @@ bool sendDiscoveryBME280Temperature()
{ {
if (BME280_I2c.isEmpty()) return true; if (BME280_I2c.isEmpty()) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " BME280 Temperature"; doc["name"] = "ESPresense " + room + " BME280 Temperature";
@ -536,7 +534,6 @@ bool sendDiscoveryBME280Humidity()
{ {
if (BME280_I2c.isEmpty()) return true; if (BME280_I2c.isEmpty()) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " BME280 Humidity"; doc["name"] = "ESPresense " + room + " BME280 Humidity";
@ -564,7 +561,6 @@ bool sendDiscoveryBME280Pressure()
{ {
if (BME280_I2c.isEmpty()) return true; if (BME280_I2c.isEmpty()) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " BME280 Pressure"; doc["name"] = "ESPresense " + room + " BME280 Pressure";
@ -592,7 +588,6 @@ bool sendDiscoveryTSL2561Lux()
{ {
if (TSL2561_I2c.isEmpty()) return true; if (TSL2561_I2c.isEmpty()) return true;
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = "ESPresense " + room + " TSL2561 Lux"; doc["name"] = "ESPresense " + room + " TSL2561 Lux";
@ -622,7 +617,6 @@ bool sendButtonDiscovery(String name, String entityCategory)
{ {
auto slug = slugify(name); auto slug = slugify(name);
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str()); 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); auto slug = slugify(name);
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str()); 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); auto slug = slugify(name);
DynamicJsonDocument doc(1200);
commonDiscovery(&doc); commonDiscovery(&doc);
doc["~"] = roomsTopic; doc["~"] = roomsTopic;
doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str()); doc["name"] = Sprintf("ESPresense %s %s", room.c_str(), name.c_str());