[BT] MQTT corruption fix (#2183)
Storing a copy of the ID instead of a pointer to a local variable to avoid MQTT publishing id topic and id property corruption.
This commit is contained in:
1 parent
585df9a420
commit
f0491e188c
4 files changed
+16
-12
No files matched your search
+1
-1
@@ -188,7 +188,7 @@ custom_hardware = Theengs Plug
|
|||||||
platform = ${com.esp32_platform}
|
platform = ${com.esp32_platform}
|
||||||
board = esp32dev
|
board = esp32dev
|
||||||
extra_scripts = ${com-esp32.extra_scripts}
|
extra_scripts = ${com-esp32.extra_scripts}
|
||||||
board_build.partitions = partitions/no_coredump.csv
|
board_build.partitions = partitions/alltest_large.csv
|
||||||
lib_deps =
|
lib_deps =
|
||||||
${com-esp32.lib_deps}
|
${com-esp32.lib_deps}
|
||||||
${libraries.ble}
|
${libraries.ble}
|
||||||
|
|||||||
+10
-10
@@ -82,7 +82,7 @@ bool zBLEConnect::processActions(std::vector<BLEAction>& actions) {
|
|||||||
if (NimBLEAddress(it.addr) == m_pClient->getPeerAddress()) {
|
if (NimBLEAddress(it.addr) == m_pClient->getPeerAddress()) {
|
||||||
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["id"] = m_pClient->getPeerAddress().toString().c_str();
|
BLEdata["id"] = m_pClient->getPeerAddress().toString();
|
||||||
BLEdata["service"] = it.service.toString();
|
BLEdata["service"] = it.service.toString();
|
||||||
BLEdata["characteristic"] = it.characteristic.toString();
|
BLEdata["characteristic"] = it.characteristic.toString();
|
||||||
|
|
||||||
@@ -141,10 +141,10 @@ void LYWSD03MMC_connect::notifyCB(NimBLERemoteCharacteristic* pChar, uint8_t* pD
|
|||||||
Log.trace(F("Device identified creating BLE buffer" CR));
|
Log.trace(F("Device identified creating BLE buffer" CR));
|
||||||
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
auto mac_addr = m_pClient->getPeerAddress().toString().c_str();
|
auto mac_addr = m_pClient->getPeerAddress().toString();
|
||||||
for (std::vector<BLEdevice*>::iterator it = devices.begin(); it != devices.end(); ++it) {
|
for (std::vector<BLEdevice*>::iterator it = devices.begin(); it != devices.end(); ++it) {
|
||||||
BLEdevice* p = *it;
|
BLEdevice* p = *it;
|
||||||
if ((strcmp(p->macAdr, mac_addr) == 0)) {
|
if (p->macAdr == mac_addr) {
|
||||||
if (p->sensorModel_id == BLEconectable::id::LYWSD03MMC)
|
if (p->sensorModel_id == BLEconectable::id::LYWSD03MMC)
|
||||||
BLEdata["model"] = "LYWSD03MMC";
|
BLEdata["model"] = "LYWSD03MMC";
|
||||||
else if (p->sensorModel_id == BLEconectable::id::MHO_C401)
|
else if (p->sensorModel_id == BLEconectable::id::MHO_C401)
|
||||||
@@ -211,7 +211,7 @@ void DT24_connect::notifyCB(NimBLERemoteCharacteristic* pChar, uint8_t* pData, s
|
|||||||
Log.trace(F("Device identified creating BLE buffer" CR));
|
Log.trace(F("Device identified creating BLE buffer" CR));
|
||||||
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
auto mac_address = m_pClient->getPeerAddress().toString().c_str();
|
auto mac_address = m_pClient->getPeerAddress().toString();
|
||||||
BLEdata["model"] = "DT24";
|
BLEdata["model"] = "DT24";
|
||||||
BLEdata["id"] = mac_address;
|
BLEdata["id"] = mac_address;
|
||||||
Log.trace(F("Device identified in CB: %s" CR), mac_address);
|
Log.trace(F("Device identified in CB: %s" CR), mac_address);
|
||||||
@@ -268,7 +268,7 @@ void BM2_connect::notifyCB(NimBLERemoteCharacteristic* pChar, uint8_t* pData, si
|
|||||||
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["model"] = "BM2 Battery Monitor";
|
BLEdata["model"] = "BM2 Battery Monitor";
|
||||||
BLEdata["id"] = m_pClient->getPeerAddress().toString().c_str();
|
BLEdata["id"] = m_pClient->getPeerAddress().toString();
|
||||||
mbedtls_aes_context aes;
|
mbedtls_aes_context aes;
|
||||||
mbedtls_aes_init(&aes);
|
mbedtls_aes_init(&aes);
|
||||||
unsigned char output[16];
|
unsigned char output[16];
|
||||||
@@ -353,7 +353,7 @@ void HHCCJCY01HHCC_connect::publishData() {
|
|||||||
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["model"] = "HHCCJCY01HHCC";
|
BLEdata["model"] = "HHCCJCY01HHCC";
|
||||||
BLEdata["id"] = m_pClient->getPeerAddress().toString().c_str();
|
BLEdata["id"] = m_pClient->getPeerAddress().toString();
|
||||||
BLEdata["batt"] = (int)batteryValue;
|
BLEdata["batt"] = (int)batteryValue;
|
||||||
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
||||||
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
||||||
@@ -377,7 +377,7 @@ void XMWSDJ04MMC_connect::notifyCB(NimBLERemoteCharacteristic* pChar, uint8_t* p
|
|||||||
Log.trace(F("Device identified creating BLE buffer" CR));
|
Log.trace(F("Device identified creating BLE buffer" CR));
|
||||||
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
DynamicJsonDocument BLEdataBuffer(JSON_MSG_BUFFER);
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
auto mac_address = m_pClient->getPeerAddress().toString().c_str();
|
auto mac_address = m_pClient->getPeerAddress().toString();
|
||||||
BLEdata["model"] = "XMWSDJ04MMC";
|
BLEdata["model"] = "XMWSDJ04MMC";
|
||||||
BLEdata["id"] = mac_address;
|
BLEdata["id"] = mac_address;
|
||||||
Log.trace(F("Device identified in CB: %s" CR), mac_address);
|
Log.trace(F("Device identified in CB: %s" CR), mac_address);
|
||||||
@@ -490,7 +490,7 @@ bool SBS1_connect::processActions(std::vector<BLEAction>& actions) {
|
|||||||
if (result || it.ttl <= 1) {
|
if (result || it.ttl <= 1) {
|
||||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["id"] = m_pClient->getPeerAddress().toString().c_str();
|
BLEdata["id"] = m_pClient->getPeerAddress().toString();
|
||||||
BLEdata["state"] = std::string(it.value);
|
BLEdata["state"] = std::string(it.value);
|
||||||
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
||||||
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
||||||
@@ -585,7 +585,7 @@ bool SBBT_connect::processActions(std::vector<BLEAction>& actions) {
|
|||||||
if (result || it.ttl <= 1) {
|
if (result || it.ttl <= 1) {
|
||||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["id"] = it.addr.toString().c_str();
|
BLEdata["id"] = it.addr.toString();
|
||||||
if (value != -99 || value != -1)
|
if (value != -99 || value != -1)
|
||||||
BLEdata["tilt"] = value;
|
BLEdata["tilt"] = value;
|
||||||
if (value == 50) {
|
if (value == 50) {
|
||||||
@@ -687,7 +687,7 @@ bool SBCU_connect::processActions(std::vector<BLEAction>& actions) {
|
|||||||
if (result || it.ttl <= 1) {
|
if (result || it.ttl <= 1) {
|
||||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["id"] = it.addr.toString().c_str();
|
BLEdata["id"] = it.addr.toString();
|
||||||
if (value != -99 || value != -1)
|
if (value != -99 || value != -1)
|
||||||
BLEdata["position"] = value;
|
BLEdata["position"] = value;
|
||||||
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
||||||
|
|||||||
+1
-1
@@ -1400,7 +1400,7 @@ void immediateBTAction(void* pvParameters) {
|
|||||||
gatewayState = GatewayState::ERROR;
|
gatewayState = GatewayState::ERROR;
|
||||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
||||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||||
BLEdata["id"] = BLEactions.back().addr.toString().c_str();
|
BLEdata["id"] = BLEactions.back().addr.toString();
|
||||||
BLEdata["success"] = false;
|
BLEdata["success"] = false;
|
||||||
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
||||||
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
||||||
|
|||||||
@@ -0,0 +1,4 @@
|
|||||||
|
# Name, Type, SubType, Offset, Size, Flags
|
||||||
|
nvs, data, nvs, 0x9000, 0x5000,
|
||||||
|
app0, app, ota_0, 0x10000, 0x200000,
|
||||||
|
spiffs, data, spiffs, 0x310000,0x4F000,
|
||||||
|
Reference in new issue
Block a user