Correct handling of passive response of Winsen ZH03X Particle sensor in xsns_18_pms5003.ino (#23651)

* Update xsns_18_pms5003.ino

* Update xsns_18_pms5003.ino
This commit is contained in:
FransOv 2025-07-12 21:20:16 +02:00 committed by GitHub
parent d3e2bb6906
commit 3b207db27c
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194

View File

@ -205,28 +205,26 @@ bool ZH03ReadDataPassive() // process the passive mode response of the ZH03x sen
AddLogBuffer(LOG_LEVEL_DEBUG_MORE, buffer, 9);
uint8_t sum = 0;
for (uint32_t i = 1; i < 7; i++) {
for (uint32_t i = 1; i < 8; i++) {
sum += buffer[i];
}
sum=(~sum)+1;
sum=~(sum)+1;
if (sum != buffer[8]) {
AddLog(LOG_LEVEL_DEBUG, PSTR("ZH03x: " D_CHECKSUM_FAILURE));
return false;
}
uint16_t buffer_u16[12];
for (uint32_t i = 1; i < 4; i++) {
buffer_u16[i] = buffer[i*2 + 1];
buffer_u16[i] += (buffer[i*2] << 8);
buffer_u16[i+3] = buffer[i*2 + 1]; // Direct and Environment values identical
buffer_u16[i+3] += (buffer[i*2] << 8); // Direct and Environment values identical
buffer_u16[0] = 20; // set dummy framelength
buffer_u16[11] = buffer[8]; // copy checksum
}
pms_data.pm10_standard = buffer[6]*256+buffer[7];
pms_data.pm10_env = pms_data.pm10_standard; // Direct and Environment values identical
pms_data.pm25_standard = buffer[2]*256+buffer[3];
pms_data.pm25_env = pms_data.pm25_standard; // Direct and Environment values identical
pms_data.pm100_standard = buffer[4]*256+buffer[5];
pms_data.pm100_env = pms_data.pm100_standard; // Direct and Environment values identical
pms_data.framelen = 20; // set dummy framelength
pms_data.checksum = buffer[8]; // copy checksum
memcpy((void *)&pms_data, (void *)buffer_u16, 22);
Pms.valid = 10;
Pms.valid = Settings->pms_wake_interval*2;
if (!Pms.discovery_triggered) {
TasmotaGlobal.discovery_counter = 1; // Force discovery
@ -531,4 +529,4 @@ bool Xsns18(uint32_t function)
return result;
}
#endif // USE_PMS5003
#endif // USE_PMS5003