[SYS] Reduce Logs flash footprint (#2232)
By building only the log level required into LOG_LEVEL Co-authored-by: Florian <1technophile@users.noreply.github.com>
This commit is contained in:
1 parent
6e6b54b05e
commit
32174e37a5
52 files changed
+1187
-1136
No files matched your search
+130
-130
@@ -158,7 +158,7 @@ String stateBTMeasures(bool start) {
|
||||
# endif
|
||||
|
||||
if (start) {
|
||||
Log.notice(F("BT sys: "));
|
||||
THEENGS_LOG_NOTICE(F("BT sys: "));
|
||||
serializeJsonPretty(jsonBuffer, Serial);
|
||||
Serial.println();
|
||||
return ""; // Do not try to erase/write/send config at startup
|
||||
@@ -262,12 +262,12 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) {
|
||||
preferences.begin(Gateway_Short_Name, false);
|
||||
if (preferences.isKey("BTConfig")) {
|
||||
int result = preferences.remove("BTConfig");
|
||||
Log.notice(F("BT config erase result: %d" CR), result);
|
||||
THEENGS_LOG_NOTICE(F("BT config erase result: %d" CR), result);
|
||||
preferences.end();
|
||||
return; // Erase prevails on save, so skipping save
|
||||
} else {
|
||||
preferences.end();
|
||||
Log.notice(F("BT config not found" CR));
|
||||
THEENGS_LOG_NOTICE(F("BT config not found" CR));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -302,7 +302,7 @@ void BTConfig_fromJson(JsonObject& BTdata, bool startup = false) {
|
||||
preferences.begin(Gateway_Short_Name, false);
|
||||
int result = preferences.putString("BTConfig", conf);
|
||||
preferences.end();
|
||||
Log.notice(F("BT config save: %s, result: %d" CR), conf.c_str(), result);
|
||||
THEENGS_LOG_NOTICE(F("BT config save: %s, result: %d" CR), conf.c_str(), result);
|
||||
}
|
||||
}
|
||||
|
||||
@@ -312,21 +312,21 @@ void BTConfig_load() {
|
||||
if (preferences.isKey("BTConfig")) {
|
||||
auto error = deserializeJson(jsonBuffer, preferences.getString("BTConfig", "{}"));
|
||||
preferences.end();
|
||||
Log.notice(F("BT config loaded" CR));
|
||||
THEENGS_LOG_NOTICE(F("BT config loaded" CR));
|
||||
if (error) {
|
||||
Log.error(F("BT config deserialization failed: %s, buffer capacity: %u" CR), error.c_str(), jsonBuffer.capacity());
|
||||
THEENGS_LOG_ERROR(F("BT config deserialization failed: %s, buffer capacity: %u" CR), error.c_str(), jsonBuffer.capacity());
|
||||
return;
|
||||
}
|
||||
if (jsonBuffer.isNull()) {
|
||||
Log.warning(F("BT config is null" CR));
|
||||
THEENGS_LOG_WARNING(F("BT config is null" CR));
|
||||
return;
|
||||
}
|
||||
JsonObject jo = jsonBuffer.as<JsonObject>();
|
||||
BTConfig_fromJson(jo, true); // Never send MQTT message with config
|
||||
Log.notice(F("BT config loaded" CR));
|
||||
THEENGS_LOG_NOTICE(F("BT config loaded" CR));
|
||||
} else {
|
||||
preferences.end();
|
||||
Log.notice(F("BT config not found" CR));
|
||||
THEENGS_LOG_NOTICE(F("BT config not found" CR));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -338,7 +338,7 @@ void createOrUpdateDevice(const char* mac, uint8_t flags, int model, int mac_typ
|
||||
|
||||
BLEdevice* getDeviceByMac(const char* mac); // Declared here to avoid pre-compilation issue (misplaced auto declaration by pio)
|
||||
BLEdevice* getDeviceByMac(const char* mac) {
|
||||
Log.trace(F("getDeviceByMac %s" CR), mac);
|
||||
THEENGS_LOG_TRACE(F("getDeviceByMac %s" CR), mac);
|
||||
|
||||
for (vector<BLEdevice*>::iterator it = devices.begin(); it != devices.end(); ++it) {
|
||||
if ((strcmp((*it)->macAdr, mac) == 0)) {
|
||||
@@ -349,7 +349,7 @@ BLEdevice* getDeviceByMac(const char* mac) {
|
||||
}
|
||||
|
||||
bool updateWorB(JsonObject& BTdata, bool isWhite) {
|
||||
Log.trace(F("update WorB" CR));
|
||||
THEENGS_LOG_TRACE(F("update WorB" CR));
|
||||
const char* jsonKey = isWhite ? "white-list" : "black-list";
|
||||
|
||||
int size = BTdata[jsonKey].size();
|
||||
@@ -367,12 +367,12 @@ bool updateWorB(JsonObject& BTdata, bool isWhite) {
|
||||
|
||||
void createOrUpdateDevice(const char* mac, uint8_t flags, int model, int mac_type, const char* name) {
|
||||
if (xSemaphoreTake(semaphoreCreateOrUpdateDevice, pdMS_TO_TICKS(30000)) == pdFALSE) {
|
||||
Log.error(F("Semaphore NOT taken" CR));
|
||||
THEENGS_LOG_ERROR(F("Semaphore NOT taken" CR));
|
||||
return;
|
||||
}
|
||||
BLEdevice* device = getDeviceByMac(mac);
|
||||
if (device == &NO_BT_DEVICE_FOUND) {
|
||||
Log.trace(F("add %s" CR), mac);
|
||||
THEENGS_LOG_TRACE(F("add %s" CR), mac);
|
||||
//new device
|
||||
device = new BLEdevice();
|
||||
strcpy(device->macAdr, mac);
|
||||
@@ -383,7 +383,7 @@ void createOrUpdateDevice(const char* mac, uint8_t flags, int model, int mac_typ
|
||||
device->macType = mac_type;
|
||||
// Check name length
|
||||
if (strlen(name) > 20) {
|
||||
Log.warning(F("Name too long, truncating" CR));
|
||||
THEENGS_LOG_WARNING(F("Name too long, truncating" CR));
|
||||
strncpy(device->name, name, 20);
|
||||
device->name[19] = '\0';
|
||||
} else {
|
||||
@@ -394,7 +394,7 @@ void createOrUpdateDevice(const char* mac, uint8_t flags, int model, int mac_typ
|
||||
devices.push_back(device);
|
||||
newDevices++;
|
||||
} else {
|
||||
Log.trace(F("update %s" CR), mac);
|
||||
THEENGS_LOG_TRACE(F("update %s" CR), mac);
|
||||
device->lastUpdate = millis();
|
||||
device->macType = mac_type;
|
||||
|
||||
@@ -475,14 +475,14 @@ void dumpDevices() {
|
||||
# if LOG_LEVEL > LOG_LEVEL_NOTICE
|
||||
for (vector<BLEdevice*>::iterator it = devices.begin(); it != devices.end(); ++it) {
|
||||
BLEdevice* p = *it;
|
||||
Log.trace(F("macAdr %s" CR), p->macAdr);
|
||||
Log.trace(F("macType %d" CR), p->macType);
|
||||
Log.trace(F("isDisc %d" CR), p->isDisc);
|
||||
Log.trace(F("isWhtL %d" CR), p->isWhtL);
|
||||
Log.trace(F("isBlkL %d" CR), p->isBlkL);
|
||||
Log.trace(F("connect %d" CR), p->connect);
|
||||
Log.trace(F("sensorModel_id %d" CR), p->sensorModel_id);
|
||||
Log.trace(F("LastUpdate %u" CR), p->lastUpdate);
|
||||
THEENGS_LOG_TRACE(F("macAdr %s" CR), p->macAdr);
|
||||
THEENGS_LOG_TRACE(F("macType %d" CR), p->macType);
|
||||
THEENGS_LOG_TRACE(F("isDisc %d" CR), p->isDisc);
|
||||
THEENGS_LOG_TRACE(F("isWhtL %d" CR), p->isWhtL);
|
||||
THEENGS_LOG_TRACE(F("isBlkL %d" CR), p->isBlkL);
|
||||
THEENGS_LOG_TRACE(F("connect %d" CR), p->connect);
|
||||
THEENGS_LOG_TRACE(F("sensorModel_id %d" CR), p->sensorModel_id);
|
||||
THEENGS_LOG_TRACE(F("LastUpdate %u" CR), p->lastUpdate);
|
||||
}
|
||||
# endif
|
||||
}
|
||||
@@ -495,7 +495,7 @@ void strupp(char* beg) {
|
||||
# ifdef ZmqttDiscovery
|
||||
void DT24Discovery(const char* mac, const char* sensorModel_id) {
|
||||
# define DT24parametersCount 7
|
||||
Log.trace(F("DT24Discovery" CR));
|
||||
THEENGS_LOG_TRACE(F("DT24Discovery" CR));
|
||||
const char* DT24sensor[DT24parametersCount][9] = {
|
||||
{HASS_TYPE_SENSOR, "volt", mac, HASS_CLASS_VOLTAGE, jsonVolt, "", "", HASS_UNIT_VOLT, stateClassMeasurement},
|
||||
{HASS_TYPE_SENSOR, "amp", mac, HASS_CLASS_CURRENT, jsonCurrent, "", "", HASS_UNIT_AMP, stateClassMeasurement},
|
||||
@@ -512,7 +512,7 @@ void DT24Discovery(const char* mac, const char* sensorModel_id) {
|
||||
|
||||
void BM2Discovery(const char* mac, const char* sensorModel_id) {
|
||||
# define BM2parametersCount 2
|
||||
Log.trace(F("BM2Discovery" CR));
|
||||
THEENGS_LOG_TRACE(F("BM2Discovery" CR));
|
||||
const char* BM2sensor[BM2parametersCount][9] = {
|
||||
{HASS_TYPE_SENSOR, "volt", mac, HASS_CLASS_VOLTAGE, jsonVoltBM2, "", "", HASS_UNIT_VOLT, stateClassMeasurement}, // We use a json definition that retrieve only data from the BM2 decoder, as this sensor also advertize volt as an iBeacon
|
||||
{HASS_TYPE_SENSOR, "batt", mac, HASS_CLASS_BATTERY, jsonBatt, "", "", HASS_UNIT_PERCENT, stateClassMeasurement}
|
||||
@@ -524,7 +524,7 @@ void BM2Discovery(const char* mac, const char* sensorModel_id) {
|
||||
|
||||
void LYWSD03MMCDiscovery(const char* mac, const char* sensorModel) {
|
||||
# define LYWSD03MMCparametersCount 4
|
||||
Log.trace(F("LYWSD03MMCDiscovery" CR));
|
||||
THEENGS_LOG_TRACE(F("LYWSD03MMCDiscovery" CR));
|
||||
const char* LYWSD03MMCsensor[LYWSD03MMCparametersCount][9] = {
|
||||
{HASS_TYPE_SENSOR, "batt", mac, HASS_CLASS_BATTERY, jsonBatt, "", "", HASS_UNIT_PERCENT, stateClassMeasurement},
|
||||
{HASS_TYPE_SENSOR, "volt", mac, "", jsonVolt, "", "", HASS_UNIT_VOLT, stateClassMeasurement},
|
||||
@@ -538,7 +538,7 @@ void LYWSD03MMCDiscovery(const char* mac, const char* sensorModel) {
|
||||
|
||||
void MHO_C401Discovery(const char* mac, const char* sensorModel) {
|
||||
# define MHO_C401parametersCount 4
|
||||
Log.trace(F("MHO_C401Discovery" CR));
|
||||
THEENGS_LOG_TRACE(F("MHO_C401Discovery" CR));
|
||||
const char* MHO_C401sensor[MHO_C401parametersCount][9] = {
|
||||
{HASS_TYPE_SENSOR, "batt", mac, HASS_CLASS_BATTERY, jsonBatt, "", "", HASS_UNIT_PERCENT, stateClassMeasurement},
|
||||
{HASS_TYPE_SENSOR, "volt", mac, "", jsonVolt, "", "", HASS_UNIT_VOLT, stateClassMeasurement},
|
||||
@@ -552,7 +552,7 @@ void MHO_C401Discovery(const char* mac, const char* sensorModel) {
|
||||
|
||||
void HHCCJCY01HHCCDiscovery(const char* mac, const char* sensorModel) {
|
||||
# define HHCCJCY01HHCCparametersCount 5
|
||||
Log.trace(F("HHCCJCY01HHCCDiscovery" CR));
|
||||
THEENGS_LOG_TRACE(F("HHCCJCY01HHCCDiscovery" CR));
|
||||
const char* HHCCJCY01HHCCsensor[HHCCJCY01HHCCparametersCount][9] = {
|
||||
{HASS_TYPE_SENSOR, "batt", mac, HASS_CLASS_BATTERY, jsonBatt, "", "", HASS_UNIT_PERCENT, stateClassMeasurement},
|
||||
{HASS_TYPE_SENSOR, "temp", mac, HASS_CLASS_TEMPERATURE, jsonTempc, "", "", HASS_UNIT_CELSIUS, stateClassMeasurement},
|
||||
@@ -567,7 +567,7 @@ void HHCCJCY01HHCCDiscovery(const char* mac, const char* sensorModel) {
|
||||
|
||||
void XMWSDJ04MMCDiscovery(const char* mac, const char* sensorModel) {
|
||||
# define XMWSDJ04MMCparametersCount 4
|
||||
Log.trace(F("XMWSDJ04MMCDiscovery" CR));
|
||||
THEENGS_LOG_TRACE(F("XMWSDJ04MMCDiscovery" CR));
|
||||
const char* XMWSDJ04MMCsensor[XMWSDJ04MMCparametersCount][9] = {
|
||||
{HASS_TYPE_SENSOR, "batt", mac, HASS_CLASS_BATTERY, jsonBatt, "", "", HASS_UNIT_PERCENT, stateClassMeasurement},
|
||||
{HASS_TYPE_SENSOR, "volt", mac, "", jsonVolt, "", "", HASS_UNIT_VOLT, stateClassMeasurement},
|
||||
@@ -601,7 +601,7 @@ class ScanCallbacks : public NimBLEScanCallbacks {
|
||||
void onResult(const NimBLEAdvertisedDevice* advertisedDevice) {
|
||||
NimBLEAdvertisedDevice* ad = new NimBLEAdvertisedDevice(*advertisedDevice);
|
||||
if (xQueueSend(BLEQueue, &ad, 0) != pdTRUE) {
|
||||
Log.error(F("BLEQueue full" CR));
|
||||
THEENGS_LOG_ERROR(F("BLEQueue full" CR));
|
||||
delete (ad);
|
||||
}
|
||||
}
|
||||
@@ -612,7 +612,7 @@ std::string convertServiceData(std::string deviceServiceData) {
|
||||
char spr[2 * serviceDataLength + 1];
|
||||
for (int i = 0; i < serviceDataLength; i++) sprintf(spr + 2 * i, "%.2x", (unsigned char)deviceServiceData[i]);
|
||||
spr[2 * serviceDataLength] = 0;
|
||||
Log.trace(F("Converted service data (%d) to %s" CR), serviceDataLength, spr);
|
||||
THEENGS_LOG_TRACE(F("Converted service data (%d) to %s" CR), serviceDataLength, spr);
|
||||
return spr;
|
||||
}
|
||||
|
||||
@@ -624,7 +624,7 @@ bool checkIfIsTracker(char ch) {
|
||||
data = 10 + (ch - 'a');
|
||||
|
||||
if (((data >> 3) & 0x01) == 1) {
|
||||
Log.trace(F("Is Device Tracker" CR));
|
||||
THEENGS_LOG_TRACE(F("Is Device Tracker" CR));
|
||||
return true;
|
||||
} else {
|
||||
return false;
|
||||
@@ -639,17 +639,17 @@ void procBLETask(void* pvParameters) {
|
||||
// Feed the watchdog
|
||||
//esp_task_wdt_reset();
|
||||
if (!BTProcessLock) {
|
||||
Log.trace(F("Creating BLE buffer" CR));
|
||||
THEENGS_LOG_TRACE(F("Creating BLE buffer" CR));
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||
BLEdata["id"] = advertisedDevice->getAddress().toString();
|
||||
BLEdata["mac_type"] = advertisedDevice->getAddress().getType();
|
||||
BLEdata["adv_type"] = advertisedDevice->getAdvType();
|
||||
Log.notice(F("BT Device detected: %s" CR), BLEdata["id"].as<const char*>());
|
||||
THEENGS_LOG_NOTICE(F("BT Device detected: %s" CR), BLEdata["id"].as<const char*>());
|
||||
BLEdevice* device = getDeviceByMac(BLEdata["id"].as<const char*>());
|
||||
|
||||
if (BTConfig.filterConnectable && device->connect) {
|
||||
Log.notice(F("Filtered connectable device" CR));
|
||||
THEENGS_LOG_NOTICE(F("Filtered connectable device" CR));
|
||||
delete (advertisedDevice);
|
||||
continue;
|
||||
}
|
||||
@@ -669,15 +669,15 @@ void procBLETask(void* pvParameters) {
|
||||
}
|
||||
if (advertisedDevice->haveServiceData()) {
|
||||
int serviceDataCount = advertisedDevice->getServiceDataCount();
|
||||
Log.trace(F("Get services data number: %d" CR), serviceDataCount);
|
||||
THEENGS_LOG_TRACE(F("Get services data number: %d" CR), serviceDataCount);
|
||||
for (int j = 0; j < serviceDataCount; j++) {
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBufferTemp;
|
||||
JsonObject BLEdataTemp = BLEdataBufferTemp.to<JsonObject>();
|
||||
BLEdataBufferTemp = BLEdataBuffer;
|
||||
std::string service_data = convertServiceData(advertisedDevice->getServiceData(j));
|
||||
Log.trace(F("Service data: %s" CR), service_data.c_str());
|
||||
THEENGS_LOG_TRACE(F("Service data: %s" CR), service_data.c_str());
|
||||
std::string serviceDatauuid = advertisedDevice->getServiceDataUUID(j).toString();
|
||||
Log.trace(F("Service data UUID: %s" CR), (char*)serviceDatauuid.c_str());
|
||||
THEENGS_LOG_TRACE(F("Service data UUID: %s" CR), (char*)serviceDatauuid.c_str());
|
||||
BLEdataTemp["servicedata"] = (char*)service_data.c_str();
|
||||
BLEdataTemp["servicedatauuid"] = (char*)serviceDatauuid.c_str();
|
||||
PublishDeviceData(BLEdataTemp);
|
||||
@@ -686,7 +686,7 @@ void procBLETask(void* pvParameters) {
|
||||
PublishDeviceData(BLEdata);
|
||||
}
|
||||
} else {
|
||||
Log.trace(F("Filtered MAC device" CR));
|
||||
THEENGS_LOG_TRACE(F("Filtered MAC device" CR));
|
||||
}
|
||||
updateDevicesStatus();
|
||||
}
|
||||
@@ -703,7 +703,7 @@ void BLEscan() {
|
||||
while (uxQueueMessagesWaiting(BLEQueue) || queueLength != 0) { // the criteria on queueLength could be adjusted to parallelize the scan and the queue processing
|
||||
delay(1); // Wait for queue to empty, a yield here instead of the delay cause the WDT to trigger
|
||||
}
|
||||
Log.notice(F("Scan begin" CR));
|
||||
THEENGS_LOG_NOTICE(F("Scan begin" CR));
|
||||
BLEScan* pBLEScan = BLEDevice::getScan();
|
||||
pBLEScan->setScanCallbacks(&scanCallbacks);
|
||||
if ((millis() > (timeBetweenActive + BTConfig.intervalActiveScan) || BTConfig.intervalActiveScan == BTConfig.BLEinterval) && !BTConfig.forcePassiveScan) {
|
||||
@@ -717,8 +717,8 @@ void BLEscan() {
|
||||
NimBLEScanResults foundDevices = pBLEScan->getResults(BTConfig.scanDuration, false);
|
||||
if (foundDevices.getCount())
|
||||
scanCount++;
|
||||
Log.notice(F("Found %d devices, scan number %d end" CR), foundDevices.getCount(), scanCount);
|
||||
Log.trace(F("Process BLE stack free: %u" CR), uxTaskGetStackHighWaterMark(xProcBLETaskHandle));
|
||||
THEENGS_LOG_NOTICE(F("Found %d devices, scan number %d end" CR), foundDevices.getCount(), scanCount);
|
||||
THEENGS_LOG_TRACE(F("Process BLE stack free: %u" CR), uxTaskGetStackHighWaterMark(xProcBLETaskHandle));
|
||||
}
|
||||
|
||||
/**
|
||||
@@ -727,12 +727,12 @@ void BLEscan() {
|
||||
# if BLEDecoder
|
||||
void BLEconnect() {
|
||||
if (!BTProcessLock) {
|
||||
Log.notice(F("BLE Connect begin" CR));
|
||||
THEENGS_LOG_NOTICE(F("BLE Connect begin" CR));
|
||||
do {
|
||||
for (vector<BLEdevice*>::iterator it = devices.begin(); it != devices.end(); ++it) {
|
||||
BLEdevice* p = *it;
|
||||
if (p->connect) {
|
||||
Log.trace(F("Model to connect found: %s" CR), p->macAdr);
|
||||
THEENGS_LOG_TRACE(F("Model to connect found: %s" CR), p->macAdr);
|
||||
NimBLEAddress addr((const char*)p->macAdr, p->macType);
|
||||
if (p->sensorModel_id == BLEconectable::id::LYWSD03MMC ||
|
||||
p->sensorModel_id == BLEconectable::id::MHO_C401) {
|
||||
@@ -794,7 +794,7 @@ void BLEconnect() {
|
||||
}
|
||||
}
|
||||
} while (BLEactions.size() > 0);
|
||||
Log.notice(F("BLE Connect end" CR));
|
||||
THEENGS_LOG_NOTICE(F("BLE Connect end" CR));
|
||||
}
|
||||
}
|
||||
# else
|
||||
@@ -805,14 +805,14 @@ void stopProcessing(bool deinit) {
|
||||
if (BTConfig.enabled) {
|
||||
BTProcessLock = true;
|
||||
// We stop the scan
|
||||
Log.notice(F("Stopping BLE scan" CR));
|
||||
THEENGS_LOG_NOTICE(F("Stopping BLE scan" CR));
|
||||
BLEScan* pBLEScan = BLEDevice::getScan();
|
||||
if (pBLEScan->isScanning()) {
|
||||
pBLEScan->stop();
|
||||
}
|
||||
|
||||
if (xSemaphoreTake(semaphoreBLEOperation, pdMS_TO_TICKS(5000)) == pdTRUE) {
|
||||
Log.notice(F("Stopping BLE tasks" CR));
|
||||
THEENGS_LOG_NOTICE(F("Stopping BLE tasks" CR));
|
||||
//Suspending, deleting tasks and stopping BT to free memory
|
||||
vTaskSuspend(xCoreTaskHandle);
|
||||
vTaskDelete(xCoreTaskHandle);
|
||||
@@ -824,7 +824,7 @@ void stopProcessing(bool deinit) {
|
||||
if (deinit)
|
||||
BLEDevice::deinit(true);
|
||||
}
|
||||
Log.notice(F("BLE gateway stopped, free heap: %d" CR), ESP.getFreeHeap());
|
||||
THEENGS_LOG_NOTICE(F("BLE gateway stopped, free heap: %d" CR), ESP.getFreeHeap());
|
||||
}
|
||||
|
||||
void coreTask(void* pvParameters) {
|
||||
@@ -838,10 +838,10 @@ void coreTask(void* pvParameters) {
|
||||
BLEconnect();
|
||||
}
|
||||
//dumpDevices();
|
||||
Log.trace(F("CoreTask stack free: %u" CR), uxTaskGetStackHighWaterMark(xCoreTaskHandle));
|
||||
THEENGS_LOG_TRACE(F("CoreTask stack free: %u" CR), uxTaskGetStackHighWaterMark(xCoreTaskHandle));
|
||||
xSemaphoreGive(semaphoreBLEOperation);
|
||||
} else {
|
||||
Log.error(F("Failed to start scan - BLE busy" CR));
|
||||
THEENGS_LOG_ERROR(F("Failed to start scan - BLE busy" CR));
|
||||
}
|
||||
if (SYSConfig.powerMode > 0) {
|
||||
int scan = atomic_exchange_explicit(&forceBTScan, 0, ::memory_order_seq_cst); // is this enough, it will wait the full deepsleep...
|
||||
@@ -891,18 +891,18 @@ void setupBTTasksAndBLE() {
|
||||
void setupBT() {
|
||||
BTConfig_init();
|
||||
BTConfig_load();
|
||||
Log.notice(F("BLE scans interval: %d" CR), BTConfig.BLEinterval);
|
||||
Log.notice(F("BLE connects interval: %d" CR), BTConfig.intervalConnect);
|
||||
Log.notice(F("BLE scan duration: %d" CR), BTConfig.scanDuration);
|
||||
Log.notice(F("Publishing only BLE sensors: %T" CR), BTConfig.pubOnlySensors);
|
||||
Log.notice(F("Publishing random MAC devices: %T" CR), BTConfig.pubRandomMACs);
|
||||
Log.notice(F("Adaptive BLE scan: %T" CR), BTConfig.adaptiveScan);
|
||||
Log.notice(F("Active BLE scan interval: %d" CR), BTConfig.intervalActiveScan);
|
||||
Log.notice(F("minrssi: %d" CR), -abs(BTConfig.minRssi));
|
||||
Log.notice(F("Presence Away Timer: %d" CR), BTConfig.presenceAwayTimer);
|
||||
Log.notice(F("Moving Timer: %d" CR), BTConfig.movingTimer);
|
||||
Log.notice(F("Force passive scan: %T" CR), BTConfig.forcePassiveScan);
|
||||
Log.notice(F("Enabled BLE: %T" CR), BTConfig.enabled);
|
||||
THEENGS_LOG_NOTICE(F("BLE scans interval: %d" CR), BTConfig.BLEinterval);
|
||||
THEENGS_LOG_NOTICE(F("BLE connects interval: %d" CR), BTConfig.intervalConnect);
|
||||
THEENGS_LOG_NOTICE(F("BLE scan duration: %d" CR), BTConfig.scanDuration);
|
||||
THEENGS_LOG_NOTICE(F("Publishing only BLE sensors: %T" CR), BTConfig.pubOnlySensors);
|
||||
THEENGS_LOG_NOTICE(F("Publishing random MAC devices: %T" CR), BTConfig.pubRandomMACs);
|
||||
THEENGS_LOG_NOTICE(F("Adaptive BLE scan: %T" CR), BTConfig.adaptiveScan);
|
||||
THEENGS_LOG_NOTICE(F("Active BLE scan interval: %d" CR), BTConfig.intervalActiveScan);
|
||||
THEENGS_LOG_NOTICE(F("minrssi: %d" CR), -abs(BTConfig.minRssi));
|
||||
THEENGS_LOG_NOTICE(F("Presence Away Timer: %d" CR), BTConfig.presenceAwayTimer);
|
||||
THEENGS_LOG_NOTICE(F("Moving Timer: %d" CR), BTConfig.movingTimer);
|
||||
THEENGS_LOG_NOTICE(F("Force passive scan: %T" CR), BTConfig.forcePassiveScan);
|
||||
THEENGS_LOG_NOTICE(F("Enabled BLE: %T" CR), BTConfig.enabled);
|
||||
|
||||
atomic_init(&forceBTScan, 0); // in theory, we don't need this
|
||||
|
||||
@@ -915,9 +915,9 @@ void setupBT() {
|
||||
BLEQueue = xQueueCreate(QueueSize, sizeof(NimBLEAdvertisedDevice*));
|
||||
if (BTConfig.enabled) {
|
||||
setupBTTasksAndBLE();
|
||||
Log.notice(F("gatewayBT multicore ESP32 setup done" CR));
|
||||
THEENGS_LOG_NOTICE(F("gatewayBT multicore ESP32 setup done" CR));
|
||||
} else {
|
||||
Log.notice(F("gatewayBT multicore ESP32 setup disabled" CR));
|
||||
THEENGS_LOG_NOTICE(F("gatewayBT multicore ESP32 setup disabled" CR));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -936,7 +936,7 @@ void launchBTDiscovery(bool overrideDiscovery) {
|
||||
if (!overrideDiscovery && newDevices == 0)
|
||||
return;
|
||||
if (xSemaphoreTake(semaphoreCreateOrUpdateDevice, pdMS_TO_TICKS(QueueSemaphoreTimeOutTask)) == pdFALSE) {
|
||||
Log.error(F("Semaphore NOT taken" CR));
|
||||
THEENGS_LOG_ERROR(F("Semaphore NOT taken" CR));
|
||||
return;
|
||||
}
|
||||
newDevices = 0;
|
||||
@@ -944,15 +944,15 @@ void launchBTDiscovery(bool overrideDiscovery) {
|
||||
xSemaphoreGive(semaphoreCreateOrUpdateDevice);
|
||||
for (vector<BLEdevice*>::iterator it = localDevices.begin(); it != localDevices.end(); ++it) {
|
||||
BLEdevice* p = *it;
|
||||
Log.trace(F("Device mac %s" CR), p->macAdr);
|
||||
THEENGS_LOG_TRACE(F("Device mac %s" CR), p->macAdr);
|
||||
// Do not launch discovery for the devices already discovered (unless we have overrideDiscovery) or that are not unique by their MAC Address (iBeacon, GAEN and Microsoft CDP)
|
||||
if (overrideDiscovery || !isDiscovered(p)) {
|
||||
String macWOdots = String(p->macAdr);
|
||||
macWOdots.replace(":", "");
|
||||
if (p->sensorModel_id >= 0) {
|
||||
Log.trace(F("Looking for Model_id: %d" CR), p->sensorModel_id);
|
||||
THEENGS_LOG_TRACE(F("Looking for Model_id: %d" CR), p->sensorModel_id);
|
||||
std::string properties = decoder.getTheengProperties(p->sensorModel_id);
|
||||
Log.trace(F("properties: %s" CR), properties.c_str());
|
||||
THEENGS_LOG_TRACE(F("properties: %s" CR), properties.c_str());
|
||||
std::string brand = decoder.getTheengAttribute(p->sensorModel_id, "brand");
|
||||
std::string model = decoder.getTheengAttribute(p->sensorModel_id, "model");
|
||||
# if ForceDeviceName
|
||||
@@ -1003,17 +1003,17 @@ void launchBTDiscovery(bool overrideDiscovery) {
|
||||
if (jsonBuffer.overflowed()) {
|
||||
// This should not happen if JSON_MSG_BUFFER is large enough for
|
||||
// the Theengs json properties
|
||||
Log.error(F("JSON deserialization of Theengs properties overflowed (error %s), buffer capacity: %u. Program might crash. Properties json: %s" CR),
|
||||
THEENGS_LOG_ERROR(F("JSON deserialization of Theengs properties overflowed (error %s), buffer capacity: %u. Program might crash. Properties json: %s" CR),
|
||||
error.c_str(), jsonBuffer.capacity(), properties.c_str());
|
||||
} else {
|
||||
Log.error(F("JSON deserialization of Theengs properties errored: %" CR),
|
||||
THEENGS_LOG_ERROR(F("JSON deserialization of Theengs properties errored: %" CR),
|
||||
error.c_str());
|
||||
}
|
||||
}
|
||||
for (JsonPair prop : jsonBuffer["properties"].as<JsonObject>()) {
|
||||
Log.trace(F("Key: %s"), prop.key().c_str());
|
||||
Log.trace(F("Unit: %s"), prop.value()["unit"].as<const char*>());
|
||||
Log.trace(F("Name: %s"), prop.value()["name"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("Key: %s"), prop.key().c_str());
|
||||
THEENGS_LOG_TRACE(F("Unit: %s"), prop.value()["unit"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("Name: %s"), prop.value()["name"].as<const char*>());
|
||||
String entity_name = String(model_id.c_str()) + "-" + String(prop.key().c_str());
|
||||
String unique_id = macWOdots + "-" + String(prop.key().c_str());
|
||||
String value_template = "{{ value_json." + String(prop.key().c_str()) + " | is_defined }}";
|
||||
@@ -1155,13 +1155,13 @@ void launchBTDiscovery(bool overrideDiscovery) {
|
||||
HHCCJCY01HHCCDiscovery(macWOdots.c_str(), "HHCCJCY01HHCC");
|
||||
}
|
||||
} else {
|
||||
Log.trace(F("Device UNKNOWN_MODEL %s" CR), p->macAdr);
|
||||
THEENGS_LOG_TRACE(F("Device UNKNOWN_MODEL %s" CR), p->macAdr);
|
||||
}
|
||||
}
|
||||
}
|
||||
p->isDisc = true; // we don't need the semaphore and all the search magic via createOrUpdateDevice
|
||||
} else {
|
||||
Log.trace(F("Device already discovered or that doesn't require discovery %s" CR), p->macAdr);
|
||||
THEENGS_LOG_TRACE(F("Device already discovered or that doesn't require discovery %s" CR), p->macAdr);
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -1195,18 +1195,18 @@ void reverseBytes(uint8_t* data, size_t length) {
|
||||
void process_bledata(JsonObject& BLEdata) {
|
||||
yield(); // Necessary to let the loop run in case of connectivity issues
|
||||
if (!BLEdata.containsKey("id")) {
|
||||
Log.error(F("No mac address in the payload" CR));
|
||||
THEENGS_LOG_ERROR(F("No mac address in the payload" CR));
|
||||
return;
|
||||
}
|
||||
const char* mac = BLEdata["id"].as<const char*>();
|
||||
Log.trace(F("Processing BLE data %s" CR), BLEdata["id"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("Processing BLE data %s" CR), BLEdata["id"].as<const char*>());
|
||||
int model_id = BTConfig.extDecoderEnable ? -1 : decoder.decodeBLEJson(BLEdata);
|
||||
int mac_type = BLEdata["mac_type"].as<int>();
|
||||
|
||||
# if BLEDecryptor
|
||||
if (BLEdata["encr"] && (BLEdata["encr"].as<int>() > 0 && BLEdata["encr"].as<int>() <= 3)) {
|
||||
// Decrypting Encrypted BLE Data PVVX, BTHome or Victron
|
||||
Log.trace(F("[BLEDecryptor] Decrypt ENCR:%d ModelID:%s Payload:%s" CR), BLEdata["encr"].as<int>(), BLEdata["model_id"].as<const char*>(), BLEdata["cipher"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Decrypt ENCR:%d ModelID:%s Payload:%s" CR), BLEdata["encr"].as<int>(), BLEdata["model_id"].as<const char*>(), BLEdata["cipher"].as<const char*>());
|
||||
|
||||
// MAC address
|
||||
String macWOdots = BLEdata["id"].as<String>(); // Mac Address without dots
|
||||
@@ -1214,7 +1214,7 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
unsigned char macAddress[6];
|
||||
int maclen = hexToBytes(macWOdots, macAddress, 6);
|
||||
if (maclen != 6) {
|
||||
Log.error(F("[BLEDecryptor] Invalid MAC Address length %d" CR), maclen);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Invalid MAC Address length %d" CR), maclen);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1222,15 +1222,15 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
unsigned char bleaeskey[16];
|
||||
int bleaeskeylength = 0;
|
||||
if (ble_aes_keys.containsKey(macWOdots)) {
|
||||
Log.trace(F("[BLEDecryptor] Custom AES key %s" CR), ble_aes_keys[macWOdots].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Custom AES key %s" CR), ble_aes_keys[macWOdots].as<const char*>());
|
||||
bleaeskeylength = hexToBytes(ble_aes_keys[macWOdots], bleaeskey, 16);
|
||||
} else {
|
||||
Log.trace(F("[BLEDecryptor] Default AES key" CR));
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Default AES key" CR));
|
||||
bleaeskeylength = hexToBytes(ble_aes, bleaeskey, 16);
|
||||
}
|
||||
// Check AES Key
|
||||
if (bleaeskeylength != 16) {
|
||||
Log.error(F("[BLEDecryptor] Invalid key length %d" CR), bleaeskeylength);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Invalid key length %d" CR), bleaeskeylength);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1255,13 +1255,13 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
unsigned char ctr[1]; // 1 byte : counter
|
||||
int ctrlen = hexToBytes(BLEdata["ctr"].as<String>(), ctr, 1);
|
||||
if (ctrlen != 1) {
|
||||
Log.error(F("[BLEDecryptor] Invalid counter length %d" CR), ctrlen);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Invalid counter length %d" CR), ctrlen);
|
||||
return;
|
||||
}
|
||||
nonce[10] = ctr[0];
|
||||
aad[0] = 0x11;
|
||||
aadLength = 1;
|
||||
Log.trace(F("[BLEDecryptor] PVVX nonce %s" CR), NimBLEUtils::dataToHexString(nonce, noncelength).c_str());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] PVVX nonce %s" CR), NimBLEUtils::dataToHexString(nonce, noncelength).c_str());
|
||||
|
||||
} else if (BLEdata["encr"].as<int>() == 2) { // BTHome V2 Encrypted
|
||||
noncelength = 13; // 13 bytes
|
||||
@@ -1272,25 +1272,25 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
unsigned char ctr[4]; // Counter
|
||||
int ctrlen = hexToBytes(BLEdata["ctr"].as<String>(), ctr, 4);
|
||||
if (ctrlen != 4) {
|
||||
Log.error(F("[BLEDecryptor] Invalid counter length %d" CR), ctrlen);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Invalid counter length %d" CR), ctrlen);
|
||||
return;
|
||||
}
|
||||
memcpy(&nonce[9], ctr, 4);
|
||||
aad[0] = 0x00;
|
||||
aadLength = 0;
|
||||
Log.trace(F("[BLEDecryptor] BTHomeV2 nonce %s" CR), NimBLEUtils::dataToHexString(nonce, noncelength).c_str());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] BTHomeV2 nonce %s" CR), NimBLEUtils::dataToHexString(nonce, noncelength).c_str());
|
||||
|
||||
} else if (BLEdata["encr"].as<int>() == 3) {
|
||||
nonce[16] = {0}; // Victron has a 16 byte zero padded nonce with IV bytes 6,7
|
||||
unsigned char iv[2];
|
||||
int ivlen = hexToBytes(BLEdata["ctr"].as<String>(), iv, 2);
|
||||
if (ivlen != 2) {
|
||||
Log.error(F("[BLEDecryptor] Invalid iv length %d" CR), ivlen);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Invalid iv length %d" CR), ivlen);
|
||||
return;
|
||||
}
|
||||
memcpy(nonce, iv, 2);
|
||||
memset(nonce + 2, 0, 14); // 14 bytes: zero padding
|
||||
Log.trace(F("[BLEDecryptor] Victron nonce %s" CR), NimBLEUtils::dataToHexString(nonce, 16).c_str());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Victron nonce %s" CR), NimBLEUtils::dataToHexString(nonce, 16).c_str());
|
||||
} else {
|
||||
return; // No match
|
||||
}
|
||||
@@ -1308,7 +1308,7 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
mbedtls_ccm_context ctx;
|
||||
mbedtls_ccm_init(&ctx);
|
||||
if (mbedtls_ccm_setkey(&ctx, MBEDTLS_CIPHER_ID_AES, bleaeskey, 128) != 0) {
|
||||
Log.error(F("[BLEDecryptor] Failed to set AES key to mbedtls" CR));
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Failed to set AES key to mbedtls" CR));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1316,7 +1316,7 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
unsigned char mic[4];
|
||||
int miclen = hexToBytes(BLEdata["mic"].as<String>(), mic, 4);
|
||||
if (miclen != 4) {
|
||||
Log.error(F("[BLEDecryptor] Invalid MIC length %d" CR), miclen);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Invalid MIC length %d" CR), miclen);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1332,16 +1332,16 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
mbedtls_ccm_free(&ctx);
|
||||
|
||||
if (ret == 0) {
|
||||
Log.notice(F("[BLEDecryptor] Decryption successful" CR));
|
||||
THEENGS_LOG_NOTICE(F("[BLEDecryptor] Decryption successful" CR));
|
||||
} else if (ret == MBEDTLS_ERR_CCM_AUTH_FAILED) {
|
||||
if (ble_aes_keys.containsKey(macWOdots)) {
|
||||
Log.error(F("[BLEDecryptor] Decryption failed for %s with key %s" CR), macWOdots.c_str(), ble_aes_keys[macWOdots].as<const char*>());
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Decryption failed for %s with key %s" CR), macWOdots.c_str(), ble_aes_keys[macWOdots].as<const char*>());
|
||||
} else {
|
||||
Log.error(F("[BLEDecryptor] Decryption failed for %s with default key" CR), macWOdots.c_str());
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Decryption failed for %s with default key" CR), macWOdots.c_str());
|
||||
}
|
||||
return;
|
||||
} else {
|
||||
Log.error(F("[BLEDecryptor] Decryption failed with error: %X" CR), ret);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Decryption failed with error: %X" CR), ret);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1359,7 +1359,7 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
Log.trace(F("[BLEDecryptor] Decrypted servicedata %s" CR), BLEdata["servicedata"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Decrypted servicedata %s" CR), BLEdata["servicedata"].as<const char*>());
|
||||
|
||||
} else if (BLEdata["encr"].as<int>() == 3) {
|
||||
// Decrypt Victron Energy encrypted advertisements.
|
||||
@@ -1381,12 +1381,12 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
mbedtls_aes_free(&ctx);
|
||||
|
||||
if (ret == 0) {
|
||||
Log.notice(F("[BLEDecryptor] Victron Decryption successful" CR));
|
||||
THEENGS_LOG_NOTICE(F("[BLEDecryptor] Victron Decryption successful" CR));
|
||||
} else if (ret == MBEDTLS_ERR_CCM_AUTH_FAILED) {
|
||||
Log.error(F("[BLEDecryptor] Victron Authentication failed." CR));
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Victron Authentication failed." CR));
|
||||
return;
|
||||
} else {
|
||||
Log.error(F("[BLEDecryptor] Victron decryption failed with error: %X" CR), ret);
|
||||
THEENGS_LOG_ERROR(F("[BLEDecryptor] Victron decryption failed with error: %X" CR), ret);
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1398,14 +1398,14 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
manufacturerdata[8] = 0xff; // Replace byte 8 with "ff" to indicate decrypted data
|
||||
memcpy(&manufacturerdata[10], decrypted, ciphertextlen); // Append the decrypted payload to the manufacturer data
|
||||
BLEdata["manufacturerdata"] = NimBLEUtils::dataToHexString(manufacturerdata, 10 + ciphertextlen); // Rebuild manufacturerdata
|
||||
Log.trace(F("[BLEDecryptor] Victron decrypted manufacturerdata %s" CR), BLEdata["manufacturerdata"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Victron decrypted manufacturerdata %s" CR), BLEdata["manufacturerdata"].as<const char*>());
|
||||
}
|
||||
|
||||
// Print before and after decoder post decryption
|
||||
// serializeJsonPretty(BLEdata, Serial);
|
||||
model_id = BTConfig.extDecoderEnable ? -1 : decoder.decodeBLEJson(BLEdata);
|
||||
// serializeJsonPretty(BLEdata, Serial);
|
||||
Log.trace(F("[BLEDecryptor] Decrypted model_id %d" CR), model_id);
|
||||
THEENGS_LOG_TRACE(F("[BLEDecryptor] Decrypted model_id %d" CR), model_id);
|
||||
|
||||
// Remove the cipher fields from BLEdata
|
||||
BLEdata.remove("encr");
|
||||
@@ -1422,13 +1422,13 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
BLEdata.remove("track");
|
||||
}
|
||||
BLEdata["type"] = "RMAC";
|
||||
Log.trace(F("Potential RMAC (prmac) converted to RMAC" CR));
|
||||
THEENGS_LOG_TRACE(F("Potential RMAC (prmac) converted to RMAC" CR));
|
||||
}
|
||||
const char* deviceName = BLEdata["name"] | "";
|
||||
|
||||
if ((BLEdata["type"].as<string>()).compare("RMAC") != 0 && model_id != TheengsDecoder::BLE_ID_NUM::IBEACON) { // Do not store in memory the random mac devices and iBeacons
|
||||
if (model_id >= 0) { // Broadcaster devices
|
||||
Log.trace(F("Decoder found device: %s" CR), BLEdata["model_id"].as<const char*>());
|
||||
THEENGS_LOG_TRACE(F("Decoder found device: %s" CR), BLEdata["model_id"].as<const char*>());
|
||||
if (model_id == TheengsDecoder::BLE_ID_NUM::HHCCJCY01HHCC || model_id == TheengsDecoder::BLE_ID_NUM::BM2) { // Device that broadcast and can be connected
|
||||
createOrUpdateDevice(mac, device_flags_connect, model_id, mac_type, deviceName);
|
||||
} else {
|
||||
@@ -1439,7 +1439,7 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
BTConfig.BLEinterval = MinTimeBtwScan;
|
||||
BTConfig.intervalActiveScan = MinTimeBtwScan;
|
||||
BTConfig.scanDuration = MinScanDuration;
|
||||
Log.notice(F("Active and continuous scanning required, parameters adapted" CR));
|
||||
THEENGS_LOG_NOTICE(F("Active and continuous scanning required, parameters adapted" CR));
|
||||
stateBTMeasures(false);
|
||||
}
|
||||
} else if (BLEdata.containsKey("cont") && BTConfig.BLEinterval != MinTimeBtwScan) {
|
||||
@@ -1448,7 +1448,7 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
if ((BLEdata["type"].as<string>()).compare("CTMO") == 0) {
|
||||
BTConfig.scanDuration = MinScanDuration;
|
||||
}
|
||||
Log.notice(F("Passive continuous scanning required, parameters adapted" CR));
|
||||
THEENGS_LOG_NOTICE(F("Passive continuous scanning required, parameters adapted" CR));
|
||||
stateBTMeasures(false);
|
||||
}
|
||||
}
|
||||
@@ -1467,23 +1467,23 @@ void process_bledata(JsonObject& BLEdata) {
|
||||
model_id = BLEconectable::id::XMWSDJ04MMC;
|
||||
|
||||
if (model_id > 0) {
|
||||
Log.trace(F("Connectable device found: %s" CR), name.c_str());
|
||||
THEENGS_LOG_TRACE(F("Connectable device found: %s" CR), name.c_str());
|
||||
createOrUpdateDevice(mac, device_flags_connect, model_id, mac_type, deviceName);
|
||||
}
|
||||
} else if (BTConfig.extDecoderEnable && model_id < 0 && BLEdata.containsKey("servicedata")) {
|
||||
const char* service_data = (const char*)(BLEdata["servicedata"] | "");
|
||||
if (strstr(service_data, "209800") != NULL) {
|
||||
model_id = TheengsDecoder::BLE_ID_NUM::HHCCJCY01HHCC;
|
||||
Log.trace(F("Connectable device found: HHCCJCY01HHCC" CR));
|
||||
THEENGS_LOG_TRACE(F("Connectable device found: HHCCJCY01HHCC" CR));
|
||||
createOrUpdateDevice(mac, device_flags_connect, model_id, mac_type, deviceName);
|
||||
}
|
||||
}
|
||||
}
|
||||
} else {
|
||||
Log.trace(F("Random MAC or iBeacon device filtered" CR));
|
||||
THEENGS_LOG_TRACE(F("Random MAC or iBeacon device filtered" CR));
|
||||
}
|
||||
if (!BTConfig.extDecoderEnable && model_id < 0) {
|
||||
Log.trace(F("No eligible device found " CR));
|
||||
THEENGS_LOG_TRACE(F("No eligible device found " CR));
|
||||
}
|
||||
}
|
||||
void PublishDeviceData(JsonObject& BLEdata) {
|
||||
@@ -1492,7 +1492,7 @@ void PublishDeviceData(JsonObject& BLEdata) {
|
||||
process_bledata(BLEdata);
|
||||
// If the device is a random MAC and pubRandomMACs is false we don't publish this payload
|
||||
if (!BTConfig.pubRandomMACs && (BLEdata["type"].as<string>()).compare("RMAC") == 0) {
|
||||
Log.trace(F("Random MAC, device filtered" CR));
|
||||
THEENGS_LOG_TRACE(F("Random MAC, device filtered" CR));
|
||||
return;
|
||||
}
|
||||
// If pubAdvData is false we don't publish the adv data
|
||||
@@ -1517,7 +1517,7 @@ void PublishDeviceData(JsonObject& BLEdata) {
|
||||
BLEdata["id"] = BLEdata["uuid"].as<std::string>();
|
||||
}
|
||||
String topic = String(mqtt_topic) + BTConfig.presenceTopic + String(gateway_name);
|
||||
Log.trace(F("Pub HA Presence %s" CR), topic.c_str());
|
||||
THEENGS_LOG_TRACE(F("Pub HA Presence %s" CR), topic.c_str());
|
||||
BLEdata["topic"] = topic;
|
||||
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
||||
}
|
||||
@@ -1527,7 +1527,7 @@ void PublishDeviceData(JsonObject& BLEdata) {
|
||||
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
||||
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
||||
} else {
|
||||
Log.notice(F("Not a sensor device filtered" CR));
|
||||
THEENGS_LOG_NOTICE(F("Not a sensor device filtered" CR));
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1552,7 +1552,7 @@ void PublishDeviceData(JsonObject& BLEdata) {
|
||||
}
|
||||
# endif
|
||||
} else {
|
||||
Log.notice(F("Low rssi, device filtered" CR));
|
||||
THEENGS_LOG_NOTICE(F("Low rssi, device filtered" CR));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1571,7 +1571,7 @@ void PublishDeviceData(JsonObject& BLEdata) {
|
||||
buildTopicFromId(BLEdata, subjectBTtoMQTT);
|
||||
enqueueJsonObject(BLEdata, QueueSemaphoreTimeOutTask);
|
||||
} else {
|
||||
Log.notice(F("Low rssi, device filtered" CR));
|
||||
THEENGS_LOG_NOTICE(F("Low rssi, device filtered" CR));
|
||||
return;
|
||||
}
|
||||
}
|
||||
@@ -1579,11 +1579,11 @@ void PublishDeviceData(JsonObject& BLEdata) {
|
||||
|
||||
void hass_presence(JsonObject& HomePresence) {
|
||||
int BLErssi = HomePresence["rssi"];
|
||||
Log.trace(F("BLErssi %d" CR), BLErssi);
|
||||
THEENGS_LOG_TRACE(F("BLErssi %d" CR), BLErssi);
|
||||
int txPower = HomePresence["txpower"] | 0;
|
||||
if (txPower >= 0)
|
||||
txPower = -59; //if tx power is not found we set a default calibration value
|
||||
Log.trace(F("TxPower: %d" CR), txPower);
|
||||
THEENGS_LOG_TRACE(F("TxPower: %d" CR), txPower);
|
||||
double ratio = BLErssi * 1.0 / txPower;
|
||||
double distance;
|
||||
if (ratio < 1.0) {
|
||||
@@ -1592,17 +1592,17 @@ void hass_presence(JsonObject& HomePresence) {
|
||||
distance = (0.89976) * pow(ratio, 7.7095) + 0.111;
|
||||
}
|
||||
HomePresence["distance"] = distance;
|
||||
Log.trace(F("Ble distance %D" CR), distance);
|
||||
THEENGS_LOG_TRACE(F("Ble distance %D" CR), distance);
|
||||
}
|
||||
|
||||
void BTforceScan() {
|
||||
if (!BTProcessLock) {
|
||||
BLEscan();
|
||||
Log.trace(F("Scan done" CR));
|
||||
THEENGS_LOG_TRACE(F("Scan done" CR));
|
||||
if (BTConfig.bleConnect)
|
||||
BLEconnect();
|
||||
} else {
|
||||
Log.trace(F("Cannot launch scan due to other process running" CR));
|
||||
THEENGS_LOG_TRACE(F("Cannot launch scan due to other process running" CR));
|
||||
}
|
||||
}
|
||||
|
||||
@@ -1635,7 +1635,7 @@ void immediateBTAction(void* pvParameters) {
|
||||
std::swap(BLEactions, act_swap);
|
||||
xSemaphoreGive(semaphoreCreateOrUpdateDevice);
|
||||
} else {
|
||||
Log.error(F("CreateOrUpdate Semaphore NOT taken" CR));
|
||||
THEENGS_LOG_ERROR(F("CreateOrUpdate Semaphore NOT taken" CR));
|
||||
}
|
||||
|
||||
// If we stopped the scheduled connect for this action, do the scheduled now
|
||||
@@ -1645,7 +1645,7 @@ void immediateBTAction(void* pvParameters) {
|
||||
}
|
||||
xSemaphoreGive(semaphoreBLEOperation);
|
||||
} else {
|
||||
Log.error(F("BLE busy - immediateBTAction not sent" CR));
|
||||
THEENGS_LOG_ERROR(F("BLE busy - immediateBTAction not sent" CR));
|
||||
gatewayState = GatewayState::ERROR;
|
||||
StaticJsonDocument<JSON_MSG_BUFFER> BLEdataBuffer;
|
||||
JsonObject BLEdata = BLEdataBuffer.to<JsonObject>();
|
||||
@@ -1675,7 +1675,7 @@ void startBTActionTask() {
|
||||
# if BLEDecoder
|
||||
void KnownBTActions(JsonObject& BTdata) {
|
||||
if (!BTdata.containsKey("id")) {
|
||||
Log.error(F("BLE mac address missing" CR));
|
||||
THEENGS_LOG_ERROR(F("BLE mac address missing" CR));
|
||||
gatewayState = GatewayState::ERROR;
|
||||
return;
|
||||
}
|
||||
@@ -1728,7 +1728,7 @@ void KnownBTActions(JsonObject& BTdata) {
|
||||
BLEactions.push_back(action);
|
||||
startBTActionTask();
|
||||
} else {
|
||||
Log.error(F("BLE action not recognized" CR));
|
||||
THEENGS_LOG_ERROR(F("BLE action not recognized" CR));
|
||||
gatewayState = GatewayState::ERROR;
|
||||
}
|
||||
}
|
||||
@@ -1751,12 +1751,12 @@ void XtoBTAction(JsonObject& BTdata) {
|
||||
else if (vt == "FLOAT")
|
||||
action.value_type = BLE_VAL_FLOAT;
|
||||
else if (vt != "STRING") {
|
||||
Log.error(F("BLE value type invalid %s" CR), vt.c_str());
|
||||
THEENGS_LOG_ERROR(F("BLE value type invalid %s" CR), vt.c_str());
|
||||
return;
|
||||
}
|
||||
}
|
||||
|
||||
Log.trace(F("BLE ACTION TTL = %u" CR), action.ttl);
|
||||
THEENGS_LOG_TRACE(F("BLE ACTION TTL = %u" CR), action.ttl);
|
||||
action.complete = false;
|
||||
if (BTdata.containsKey("ble_write_address") &&
|
||||
BTdata.containsKey("ble_write_service") &&
|
||||
@@ -1768,7 +1768,7 @@ void XtoBTAction(JsonObject& BTdata) {
|
||||
std::string val = BTdata["ble_write_value"].as<std::string>(); // Fix #1694
|
||||
action.value = val;
|
||||
action.write = true;
|
||||
Log.trace(F("BLE ACTION Write" CR));
|
||||
THEENGS_LOG_TRACE(F("BLE ACTION Write" CR));
|
||||
} else if (BTdata.containsKey("ble_read_address") &&
|
||||
BTdata.containsKey("ble_read_service") &&
|
||||
BTdata.containsKey("ble_read_char")) {
|
||||
@@ -1776,7 +1776,7 @@ void XtoBTAction(JsonObject& BTdata) {
|
||||
action.service = NimBLEUUID((const char*)BTdata["ble_read_service"]);
|
||||
action.characteristic = NimBLEUUID((const char*)BTdata["ble_read_char"]);
|
||||
action.write = false;
|
||||
Log.trace(F("BLE ACTION Read" CR));
|
||||
THEENGS_LOG_TRACE(F("BLE ACTION Read" CR));
|
||||
} else {
|
||||
return;
|
||||
}
|
||||
@@ -1791,7 +1791,7 @@ void XtoBTAction(JsonObject& BTdata) {
|
||||
|
||||
void XtoBT(const char* topicOri, JsonObject& BTdata) { // json object decoding
|
||||
if (cmpToMainTopic(topicOri, subjectMQTTtoBTset)) {
|
||||
Log.trace(F("MQTTtoBT json set" CR));
|
||||
THEENGS_LOG_TRACE(F("MQTTtoBT json set" CR));
|
||||
|
||||
// Black list & white list set
|
||||
bool WorBupdated;
|
||||
@@ -1807,7 +1807,7 @@ void XtoBT(const char* topicOri, JsonObject& BTdata) { // json object decoding
|
||||
|
||||
// Force scan now
|
||||
if (BTdata.containsKey("interval") && BTdata["interval"] == 0) {
|
||||
Log.notice(F("BLE forced scan" CR));
|
||||
THEENGS_LOG_NOTICE(F("BLE forced scan" CR));
|
||||
atomic_store_explicit(&forceBTScan, 1, ::memory_order_seq_cst); // ask the other core to do the scan for us
|
||||
}
|
||||
|
||||
@@ -1834,7 +1834,7 @@ void XtoBT(const char* topicOri, JsonObject& BTdata) { // json object decoding
|
||||
XtoBTAction(BTdata);
|
||||
xSemaphoreGive(semaphoreBLEOperation);
|
||||
} else {
|
||||
Log.error(F("BLE busy - BTActions not sent" CR));
|
||||
THEENGS_LOG_ERROR(F("BLE busy - BTActions not sent" CR));
|
||||
gatewayState = GatewayState::ERROR;
|
||||
}
|
||||
} else if (strstr(topicOri, subjectTrackerSync) != NULL) {
|
||||
@@ -1842,7 +1842,7 @@ void XtoBT(const char* topicOri, JsonObject& BTdata) { // json object decoding
|
||||
BLEdevice* device = getDeviceByMac(BTdata["trackerid"].as<const char*>());
|
||||
if (device != &NO_BT_DEVICE_FOUND && device->lastUpdate != 0) {
|
||||
device->lastUpdate = 0;
|
||||
Log.notice(F("Tracker %s disassociated by gateway %s" CR), BTdata["trackerid"].as<const char*>(), BTdata["gatewayid"].as<const char*>());
|
||||
THEENGS_LOG_NOTICE(F("Tracker %s disassociated by gateway %s" CR), BTdata["trackerid"].as<const char*>(), BTdata["gatewayid"].as<const char*>());
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in new issue
Block a user