diff --git a/esp-alexa-relay/relay-c/v1/main/constants.h.bak b/esp-alexa-relay/relay-c/v1/main/constants.h.bak new file mode 100644 index 0000000..0438157 --- /dev/null +++ b/esp-alexa-relay/relay-c/v1/main/constants.h.bak @@ -0,0 +1,13 @@ +#define DEVICENAME "YOUR-DEVICE-NAME" + +#define LED 1 +#define RELAY 0 + +// set to false to have relay stay on +const bool INCHING = true; +const unsigned long INCHINGMS = 500; + +const String SSID = "SSID"; +const String PASSWORD = "PASSWORD"; + + diff --git a/esp-alexa-relay/relay-c/v1/main/main.ino b/esp-alexa-relay/relay-c/v1/main/main.ino new file mode 100644 index 0000000..aa166c6 --- /dev/null +++ b/esp-alexa-relay/relay-c/v1/main/main.ino @@ -0,0 +1,118 @@ +#include "constants.h" +#include +#include +#include + +String deviceName = DEVICENAME; +byte mac[6]; + +Espalexa espalexa; +void deviceHandler(uint8_t brightness); + +Timer<1, millis, void *> timer; + +void setup(void){ + pinMode(LED, OUTPUT); + pinMode(RELAY, OUTPUT); + + led(LOW); + + relay(LOW); + delay(100); + relay(LOW); + + delay(1000); + + if (connectWifi()) { + espDevice(); + } + +} + +boolean connectWifi() { + log(""); + log("Serching for " + SSID); + + WiFi.mode(WIFI_STA); + WiFi.begin(SSID, PASSWORD); + + WiFi.macAddress(mac); + String hostname = "fesp-" + deviceName + String(mac[3], HEX) + String(mac[4], HEX) + String(mac[5], HEX); + WiFi.hostname(hostname); + + while (WiFi.status() != WL_CONNECTED) { + flash(); + delay(500); + } + + led(HIGH); + log(hostname + " Connected - IP Address: " + WiFi.localIP().toString()); + + return true; +} + +void espDevice() { + log("Adding Alexa device as " + deviceName); + + espalexa.addDevice(deviceName, deviceHandler); + espalexa.begin(); + + log("ESP Device Setup Complete"); +} + +void deviceHandler(uint8_t brightness) { + if (brightness > 0) { + relayOn(brightness); + + if (INCHING) { + timer.in(INCHINGMS, timerCallback); + } + }else { + relayOff(); + } +} + +bool timerCallback(void *) { + relayOff(); + log("Timer Called"); + return false; +} + +void relay(int state) { + pinMode(RELAY, OUTPUT); + digitalWrite(RELAY, state); +} + +void relayOn(int level) { + relay(HIGH); + espalexa.getDevice(0)->setValue(level); + led(LOW); +} + +void relayOff() { + relay(LOW); + espalexa.getDevice(0)->setValue(0); + led(HIGH); +} + +void flash() { + int state = digitalRead(LED) == HIGH ? LOW : HIGH; + led(state); +} + +void led(int state) { + pinMode(LED, OUTPUT); + digitalWrite(LED, state); +} + +void log(String msg) { + Serial.begin(115200); + Serial.println(msg); + Serial.flush(); + Serial.end(); +} + +void loop(void) { + espalexa.loop(); + timer.tick(); +} \ No newline at end of file diff --git a/esp-alexa-relay/shelly.backup.bin b/esp-alexa-relay/shelly.backup.bin new file mode 100644 index 0000000..efec8b7 Binary files /dev/null and b/esp-alexa-relay/shelly.backup.bin differ