DetectionSensor: broadcast all state changes

Closes #4753
This commit is contained in:
Augusto Zanellato 2024-09-18 19:43:13 +02:00
parent deada41cee
commit 2ebfcea94e
No known key found for this signature in database
2 changed files with 11 additions and 4 deletions

View File

@ -49,10 +49,16 @@ int32_t DetectionSensorModule::runOnce()
// LOG_DEBUG("Detection Sensor Module: Current pin state: %i\n", digitalRead(moduleConfig.detection_sensor.monitor_pin));
if ((millis() - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.detection_sensor.minimum_broadcast_secs) &&
hasDetectionEvent()) {
sendDetectionMessage();
return DELAYED_INTERVAL;
if ((millis() - lastSentToMesh) >= Default::getConfiguredOrDefaultMs(moduleConfig.detection_sensor.minimum_broadcast_secs)) {
if (hasDetectionEvent()) {
wasDetected = true;
sendDetectionMessage();
return DELAYED_INTERVAL;
} else if (wasDetected) {
wasDetected = false;
sendCurrentStateMessage();
return DELAYED_INTERVAL;
}
}
// Even if we haven't detected an event, broadcast our current state to the mesh on the scheduled interval as a sort
// of heartbeat. We only do this if the minimum broadcast interval is greater than zero, otherwise we'll only broadcast state

View File

@ -15,6 +15,7 @@ class DetectionSensorModule : public SinglePortModule, private concurrency::OSTh
private:
bool firstTime = true;
uint32_t lastSentToMesh = 0;
bool wasDetected = false;
void sendDetectionMessage();
void sendCurrentStateMessage();
bool hasDetectionEvent();