Mirror detect handler in clear handler

This commit is contained in:
Joshua Boniface 2025-03-20 02:06:07 -04:00
parent 79e4cac044
commit cdc0982dcc

View File

@ -227,37 +227,38 @@ script:
int light_counts = (id(occupancy_clear_mode) & ( 1 << 0 )) >> 0; int light_counts = (id(occupancy_clear_mode) & ( 1 << 0 )) >> 0;
// Determine our results // Determine our results
bool new_state = false;
if (pir_counts & radar_counts & light_counts) { if (pir_counts & radar_counts & light_counts) {
// Logical AND of pir & radar & light // Logical AND of pir & radar & light
ESP_LOGD("occupancy_clear_handler", "PIR & Radar & Light: %i", pir & radar & light); new_state = pir & radar & light;
id(supersensor_occupancy).publish_state(pir & radar & light);
} else if (pir_counts & radar_counts) { } else if (pir_counts & radar_counts) {
// Logical AND of pir & radar // Logical AND of pir & radar
ESP_LOGD("occupancy_clear_handler", "PIR & Radar: %i", pir & radar); new_state = pir & radar;
id(supersensor_occupancy).publish_state(pir & radar);
} else if (pir_counts & light_counts) { } else if (pir_counts & light_counts) {
// Logical AND of pir & light // Logical AND of pir & light
ESP_LOGD("occupancy_clear_handler", "PIR & Light: %i", pir & light); new_state = pir & light;
id(supersensor_occupancy).publish_state(pir & light);
} else if (radar_counts & light_counts) { } else if (radar_counts & light_counts) {
// Logical AND of radar & light // Logical AND of radar & light
ESP_LOGD("occupancy_clear_handler", "Radar & Light: %i", radar & light); new_state = radar & light;
id(supersensor_occupancy).publish_state(radar & light);
} else if (pir_counts) { } else if (pir_counts) {
// Only pir // Only pir
ESP_LOGD("occupancy_clear_handler", "PIR: %i", pir); new_state = pir;
id(supersensor_occupancy).publish_state(pir);
} else if (radar_counts) { } else if (radar_counts) {
// Only radar // Only radar
ESP_LOGD("occupancy_clear_handler", "Radar: %i", radar); new_state = radar;
id(supersensor_occupancy).publish_state(radar);
} else if (light_counts) { } else if (light_counts) {
// Only light // Only light
ESP_LOGD("occupancy_clear_handler", "Light: %i", light); new_state = light;
id(supersensor_occupancy).publish_state(light); }
} else {
ESP_LOGD("occupancy_clear_handler", "None"); ESP_LOGD("occupancy_clear_handler", "New state: %s", new_state ? "true" : "false");
id(supersensor_occupancy).publish_state(false);
// Force update even if state hasn't changed
id(supersensor_occupancy).publish_state(new_state);
// Add a delayed re-publish to ensure state propagation
if (!new_state) {
id(supersensor_occupancy).publish_state(new_state);
} }
preferences: preferences: