From 3884630727627ef9e36ddf8bb158b9955a4a30da Mon Sep 17 00:00:00 2001 From: Nikolay Chapkin Date: Sat, 30 Jan 2021 01:34:28 +0300 Subject: [PATCH] Fix ClearGlass CGG1 and CGP1W sensors recognition (#849) * Fix ClearGlass CGG1 and CGP1W sensors recognition * CGG1 parsing refactoring --- main/ZgatewayBT.ino | 18 ++++++------------ 1 file changed, 6 insertions(+), 12 deletions(-) diff --git a/main/ZgatewayBT.ino b/main/ZgatewayBT.ino index f2fec5f..c6d91dc 100644 --- a/main/ZgatewayBT.ino +++ b/main/ZgatewayBT.ino @@ -926,14 +926,6 @@ JsonObject& process_bledata(JsonObject& BLEdata) { createOrUpdateDevice(mac, device_flags_init, LYWSD02); return process_sensors(2, BLEdata); } - Log.trace(F("Is it a CGG1?" CR)); - if (strstr(service_data, "304703") != NULL && strlen(service_data) > ServicedataMinLength) { - Log.trace(F("CGG1 data reading method 1" CR)); - BLEdata.set("model", "CGG1"); - if (device->sensorModel == -1) - createOrUpdateDevice(mac, device_flags_init, CGG1); - return process_sensors(0, BLEdata); - } Log.trace(F("Is it a MUE4094RT?" CR)); if (strstr(service_data, "4030dd") != NULL) { Log.trace(F("MUE4094RT data reading" CR)); @@ -943,7 +935,7 @@ JsonObject& process_bledata(JsonObject& BLEdata) { return process_milamp(BLEdata); } Log.trace(F("Is it a CGP1W?" CR)); - if ((strstr(service_data, "08094c") != NULL || strstr(service_data, "080972") != NULL) && strlen(service_data) > ServicedataMinLength) { + if ((strncmp(service_data, "0809", 4) == 0) && strlen(service_data) > ServicedataMinLength) { Log.trace(F("CGP1W data reading" CR)); BLEdata.set("model", "CGP1W"); if (device->sensorModel == -1) @@ -951,12 +943,14 @@ JsonObject& process_bledata(JsonObject& BLEdata) { return process_cleargrass(BLEdata, true); } Log.trace(F("Is it a CGG1" CR)); - if (strstr(service_data, "080774") != NULL) { - Log.trace(F("CGG1 method 2" CR)); + // One type of the advertising packet format started with 50204703 or 50304703, where 4703 is a type of a sensor + // Another type of the advertising packet started with 0807 or 8816 + if ((strncmp(&service_data[2], "4703", 4) == 0 && strlen(service_data) > ServicedataMinLength) || (strncmp(service_data, "0807", 4) == 0) || (strncmp(service_data, "8816", 4) == 0)) { + Log.trace(F("CGG1 data reading" CR)); BLEdata.set("model", "CGG1"); if (device->sensorModel == -1) createOrUpdateDevice(mac, device_flags_init, CGG1); - return process_cleargrass(BLEdata, false); + return strncmp(&service_data[2], "4703", 4) == 0 ? process_sensors(0, BLEdata) : process_cleargrass(BLEdata, false); } Log.trace(F("Is it a CGD1?" CR)); if (((strstr(service_data, "080caf") != NULL || strstr(service_data, "080c09") != NULL) && (strlen(service_data) > ServicedataMinLength)) || (strstr(service_data, "080cd0") != NULL && (strlen(service_data) > ServicedataMinLength - 6))) {