From c23cf033dece9b718b7020506a648c74bbc137d3 Mon Sep 17 00:00:00 2001 From: Joe Tretter Date: Thu, 3 Apr 2025 15:37:32 -0500 Subject: [PATCH] First try version of the kitchen PIR --- src/main.cpp | 33 +++++++++++++++++++++++++-------- 1 file changed, 25 insertions(+), 8 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index f18df75..9dd06eb 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -61,13 +61,16 @@ void reconnect() { } } -void send_mqtt(String value) { +void send_mqtt(String status, long time_min=0) { const size_t CAPACITY = JSON_OBJECT_SIZE(1); StaticJsonDocument doc; // create an object JsonObject object = doc.to(); - object["status"] = value.c_str(); + object["status"] = status.c_str(); + if (time_min > 0) { + object["minutes"] = time_min; + } // serialize the object and send the result to Serial static char sensorStatus[150]; @@ -88,17 +91,31 @@ void setup() { } +long previousMotionMillis=millis(); +short previousState=digitalRead(PIR_PIN); +long previousNoMoNotifyMins=0; void loop() { if (!mqttClient.connected()) { reconnect(); } mqttClient.loop(); - int pir = digitalRead(PIR_PIN); - if (pir == HIGH) { - send_mqtt("motion"); - digitalWrite(LED_BUILTIN,HIGH); - delay(1000); - digitalWrite(LED_BUILTIN,LOW); + short currentState = digitalRead(PIR_PIN); + if (currentState != previousState) { + if (currentState == HIGH) { + send_mqtt("motion"); + digitalWrite(LED_BUILTIN,HIGH); + delay(1000); + digitalWrite(LED_BUILTIN,LOW); + previousMotionMillis=millis(); + } + previousState = currentState; } + + long minsSinceLastMotion=(millis()-previousMotionMillis)/(1000*60); + if (previousNoMoNotifyMins != minsSinceLastMotion) { + send_mqtt("no_motion",minsSinceLastMotion); + previousNoMoNotifyMins = minsSinceLastMotion; + } + }