From 3e88ab1771a189be1bba8ca359f84eddf3b96c72 Mon Sep 17 00:00:00 2001 From: HenrikBojsenNehm Date: Tue, 15 Aug 2023 12:54:48 +0200 Subject: [PATCH] Trigger alarm if door is open on armed --- src/main.cpp | 33 ++++++++++++++++++++++++++++----- 1 file changed, 28 insertions(+), 5 deletions(-) diff --git a/src/main.cpp b/src/main.cpp index 6fcf0ba..a883da0 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -46,6 +46,7 @@ void reconnect() { Serial.println("connected"); client.subscribe("door/lock"); + client.subscribe("alarm/state"); } else { @@ -73,11 +74,33 @@ void callback(char* topic, byte* payload, unsigned int length) { } Serial.println(); - if (doc["deviceId"] == deviceId && doc["lock"] == true) { - digitalWrite(RELAY_ACTIVATION_PIN, HIGH); // Turn the relay on - } else { - digitalWrite(RELAY_ACTIVATION_PIN, LOW); // Turn the relay off + if (strcmp(topic, "door/lock") == 0) + { + if (doc["deviceId"] == deviceId && doc["lock"] == true) { + digitalWrite(RELAY_ACTIVATION_PIN, HIGH); + } else { + digitalWrite(RELAY_ACTIVATION_PIN, LOW); + } + } + else if (strcmp(topic, "alarm/state") == 0) + { + if (strcmp(doc["status"], "Armed") == 0) + { + if (bool reed = digitalRead(REED_ACTIVATION_PIN) == 1) + { + DynamicJsonDocument doc(1024); + + doc["deviceId"] = deviceId; + doc["open"] = reed; + + char buffer[1024]; + size_t n = serializeJson(doc, buffer); + + client.publish("door/status", buffer, n); + } + } } + } @@ -98,7 +121,7 @@ bool lastReed = 0; void loop() { - bool reed = !digitalRead(REED_ACTIVATION_PIN); + bool reed = digitalRead(REED_ACTIVATION_PIN); if (reed != lastReed) {