Support pvvx firmware custom type messages from LYWSD03MMC (#889)

This commit is contained in:
Csiki authored and GitHub committed 2021-03-10 15:09:06 -06:00
1 parent 48791b2c88
commit fd0518ae46
2 files changed
+31 -3

No files matched your search

+29 -2
View File
@@ -1007,7 +1007,7 @@ void launchBTDiscovery() {
if ((p->sensorModel == XMTZC04HM) ||
(p->sensorModel == XMTZC05HM)) MiScaleDiscovery((char*)macWOdots.c_str(), "XMTZC0xHM");
if (p->sensorModel == INKBIRD) InkBirdDiscovery((char*)macWOdots.c_str(), "INKBIRD");
if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC) LYWSD03MMCDiscovery((char*)macWOdots.c_str(), "LYWSD03MMC");
if (p->sensorModel == LYWSD03MMC || p->sensorModel == LYWSD03MMC_ATC || p->sensorModel == LYWSD03MMC_PVVX) LYWSD03MMCDiscovery((char*)macWOdots.c_str(), "LYWSD03MMC");
if (p->sensorModel == MHO_C401) MHO_C401Discovery((char*)macWOdots.c_str(), "MHO_C401");
if (p->sensorModel == INODE_EM) INodeEMDiscovery((char*)macWOdots.c_str(), "INODE_EM");
p->isDisc = true; // we don't need the semaphore and all the search magic via createOrUpdateDevice
@@ -1048,6 +1048,7 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
Log.trace(F("Checking BLE service data validity" CR));
const char* service_data = (const char*)(BLEdata["servicedata"] | "");
if (valid_service_data(service_data)) {
int service_len = strlen(service_data);
Log.trace(F("Searching BLE device data %s size %d" CR), service_data, strlen(service_data));
Log.trace(F("Is it a mi flora ?" CR));
if (strstr(service_data, "209800") != NULL) {
@@ -1143,7 +1144,15 @@ JsonObject& process_bledata(JsonObject& BLEdata) {
if (device->sensorModel == -1)
createOrUpdateDevice(mac, device_flags_init, LYWSD03MMC);
}
Log.trace(F("Is it a custom LYWSD03MMC" CR));
Log.trace(F("Is it a custom (pvvx) LYWSD03MMC?" CR));
if (service_len >= 30 && strncmp(service_data + 6, "38c1a4", 6) == 0) {
Log.trace(F("LYWSD03MMC PVVX" CR));
BLEdata.set("model", "LYWSD03MMC_PVVX");
if (device->sensorModel == -1)
createOrUpdateDevice(mac, device_flags_init, LYWSD03MMC_PVVX);
return process_pvvx(BLEdata);
}
Log.trace(F("Is it a custom (atc1441) LYWSD03MMC?" CR));
if (strstr(service_data, "a4c138") != NULL) {
Log.trace(F("LYWSD03MMC ATC" CR));
BLEdata.set("model", "LYWSD03MMC_ATC");
@@ -1395,6 +1404,24 @@ JsonObject& process_atc(JsonObject& BLEdata) {
return BLEdata;
}
JsonObject& process_pvvx(JsonObject& BLEdata) {
const char* servicedata = BLEdata["servicedata"].as<const char*>();
double temperature = (double)value_from_hex_data(servicedata, 12, 4, true) / 100;
double humidity = (double)value_from_hex_data(servicedata, 16, 4, true) / 100;
double battery = (double)value_from_hex_data(servicedata, 24, 2, false);
double voltage = (double)value_from_hex_data(servicedata, 20, 4, true) / 1000;
//Set Json values
BLEdata.set("tempc", (double)temperature);
BLEdata.set("tempf", (double)convertTemp_CtoF(temperature));
BLEdata.set("hum", (double)humidity);
BLEdata.set("batt", (double)battery);
BLEdata.set("volt", (double)voltage);
return BLEdata;
}
JsonObject& process_inode_em(JsonObject& BLEdata) {
const char* manufacturerdata = BLEdata["manufacturerdata"].as<const char*>();
+2 -1
View File
@@ -116,7 +116,8 @@ enum ble_sensor_model {
MHO_C401,
LYWSD03MMC_ATC,
INODE_EM,
CGDK2
CGDK2,
LYWSD03MMC_PVVX,
};
/*-------------------PIN DEFINITIONS----------------------*/