diff --git a/src/main.cpp b/src/main.cpp index 1db32ae..eb52cb5 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -75,10 +75,40 @@ void reconnect() } } +#define RELAY_ACTIVATION_PIN D6 +#define REED_ACTIVATION_PIN D5 + +void callback(char *topic, byte *payload, unsigned int length) +{ + StaticJsonDocument<256> doc; + deserializeJson(doc, payload, length); + + Serial.print("Message arrived ["); + Serial.print(topic); + Serial.print("] "); + for (int i = 0; i < length; i++) + { + Serial.print((char)payload[i]); + } + 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 + } +} + void setup() { Serial.begin(115200); + pinMode(RELAY_ACTIVATION_PIN, OUTPUT); + pinMode(REED_ACTIVATION_PIN, INPUT); + lcd.init(); lcd.backlight(); pinMode(buzzerPin, OUTPUT); @@ -102,14 +132,34 @@ void isArmed() lcd.clear(); } +bool lastReed = 0; + void loop() { - client.loop(); - if (!client.connected()) { reconnect(); } - - isArmed(); + + bool reed = !digitalRead(REED_ACTIVATION_PIN); + + if (reed != lastReed) + { + Serial.print("Reed has changed to: "); + Serial.println(reed); + + + DynamicJsonDocument doc(1024); + + doc["deviceId"] = deviceId; + doc["open"] = reed; + + char buffer[1024]; + size_t n = serializeJson(doc, buffer); + + client.publish("door/status", buffer, n); + lastReed = reed; + } + + client.loop(); } \ No newline at end of file