From f7ab7f61a2ad589e62b52bb4d4e87698d50be214 Mon Sep 17 00:00:00 2001 From: Joe Tretter Date: Sun, 6 Apr 2025 18:20:17 -0500 Subject: [PATCH] Prevent wrong triggering by requiring 2 triggers within 30 seconds to initially react. Hopefully that helps preventing accidental triggers. --- src/main.cpp | 20 +++++++++++++++++++- 1 file changed, 19 insertions(+), 1 deletion(-) diff --git a/src/main.cpp b/src/main.cpp index fb6e8d4..ea739e0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -100,6 +100,10 @@ const int millisPerSecond=1000; long previousMotionMillis=millis(); short previousState=0; long previousNoMoNotifyMinutes=0; + +uint repeatTriggerCounter=0; +const int repeatTriggerResetSeconds=30; +const short requiredRepeatsToTrigger=1; void loop() { if (!mqttClient.connected()) { reconnect(); @@ -113,13 +117,27 @@ void loop() { Serial.print(" previousState: "); Serial.println(previousState); if (currentState == HIGH) { - send_mqtt("motion"); + if (repeatTriggerCounter >= requiredRepeatsToTrigger) { + send_mqtt("motion"); + } else { + send_mqtt("motion_ignored"); + } digitalWrite(LED_BUILTIN,HIGH); previousMotionMillis=millis(); + repeatTriggerCounter++; } previousState = currentState; } + if ( + (currentState == LOW) + && (repeatTriggerCounter >= requiredRepeatsToTrigger) + && ((millis()-previousMotionMillis)/millisPerSecond >= repeatTriggerResetSeconds) + ) { + repeatTriggerCounter =0; + send_mqtt("motion_repeat_trigger_reset"); + } + const int secondsPerMinute=60; long minutesSinceLastMotion=(millis()-previousMotionMillis)/(millisPerSecond*secondsPerMinute); if ((previousNoMoNotifyMinutes != minutesSinceLastMotion) && (0 != minutesSinceLastMotion)) {