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());