diff --git a/gateway/gateway.ino b/gateway/gateway.ino new file mode 100644 index 0000000..27e8d1a --- /dev/null +++ b/gateway/gateway.ino @@ -0,0 +1,107 @@ +#include "Arduino.h" +#include +#include +#include +#include + +#define DEBUG 0 + +#define RESET_PIN 10 +#define SEND_PIN 11 +#define RECEIVE_PIN 2 +#define DHT11_PIN 12 + +#define READ_INTERVAL(c) (c*60*1000UL) // read interval in minutes + +const unsigned long readInterval = READ_INTERVAL(5); +unsigned long lastReadTime = -READ_INTERVAL(10); + +RCSwitch mySwitch = RCSwitch(); +DHT dht = DHT(DHT11_PIN, DHT11); + + +void setup() { + pinMode(LED_BUILTIN, OUTPUT); + pinMode(RESET_PIN, INPUT_PULLUP); + + mySwitch.enableReceive(digitalPinToInterrupt(RECEIVE_PIN)); + mySwitch.enableTransmit(SEND_PIN); + mySwitch.setRepeatTransmit(10); + + dht.begin(); + + Serial.begin(9600); + + delay(1000); +} + +void loop() { + unsigned long currentTime = millis(); + if ((currentTime - lastReadTime) > readInterval) { + lastReadTime = currentTime; + StaticJsonDocument<256> jsonDoc; + JsonObject dht11 = jsonDoc.createNestedObject("dht11"); + dht11["temperature"] = dht.readTemperature(); + dht11["humidity"] = dht.readHumidity(); + serializeJson(jsonDoc, Serial); + Serial.println(); + } + if (Serial.available() > 0) { + String cmd = Serial.readStringUntil('\n'); + if (cmd == "reset") { + pinMode(RESET_PIN, OUTPUT); + digitalWrite(RESET_PIN, LOW); + } + StaticJsonDocument<256> jsonBuffer; + DeserializationError err = deserializeJson(jsonBuffer, cmd); + if (err == DeserializationError::Ok) { + if (jsonBuffer.containsKey("rcSwitch")) { + JsonObject rcSwitch = jsonBuffer["rcSwitch"]; + unsigned int protocol = rcSwitch["protocol"]; + if (protocol == 1) { + mySwitch.setProtocol(protocol); + char* group = rcSwitch["group"]; + int channel = rcSwitch["channel"]; + if (rcSwitch["state"]) { + mySwitch.switchOn(group, channel); + } else { + mySwitch.switchOff(group, channel); + } + } else { + mySwitch.setProtocol(protocol); + mySwitch.send(rcSwitch["value"]); + } + } + } else { + Serial.println(err.c_str()); + } + } + if (mySwitch.available()) { + unsigned long value = mySwitch.getReceivedValue(); + mySwitch.resetAvailable(); +#if DEBUG + StaticJsonDocument<100> json1; + JsonObject rcSwitch = json1.createNestedObject("rcSwitch"); + rcSwitch["protocol"] = mySwitch.getReceivedProtocol(); + rcSwitch["value"] = value; + serializeJson(json1, Serial); + Serial.println(); +#endif + if (mySwitch.getReceivedProtocol() == 2) { + if (value == 637541753L || value == 771759481L) { + StaticJsonDocument<100> jsonBuffer; + JsonObject motion = jsonBuffer.createNestedObject("motion"); + motion["kitchen"] = value == 637541753L ? "on" : "off"; + serializeJson(jsonBuffer, Serial); + Serial.println(); + } + if (value == 1879048230L || value == 1879048198L) { + StaticJsonDocument<100> jsonBuffer; + JsonObject motion = jsonBuffer.createNestedObject("motion"); + motion["basement"] = value == 1879048230L ? "on" : "off"; + serializeJson(jsonBuffer, Serial); + Serial.println(); + } + } + } +}