//#define ENABLE_DEBUG
#ifdef ENABLE_DEBUG
#define DEBUG_ESP_PORT Serial
#define NODEBUG_WEBSOCKETS
#define NDEBUG
#endif
#include <Arduino.h>
/*#if defined(ESP8266)
#include <ESP8266WiFi.h>*/
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
#include <WiFi.h>
#endif
#include <SinricPro.h>
#include <SinricProSwitch.h>
#if defined(ESP32) || defined(ARDUINO_ARCH_RP2040)
#define RELAYPIN_1 16
#define RELAYPIN_2 17
#define RELAYPIN_3 18
#endif
struct RelayInfo {
String deviceId;
String name;
int pin;
};
std::vector<RelayInfo> relays = {
{"65d58031ccc93539a13e9347", "Relay 1", RELAYPIN_1},
{"65d5a3d660d81635d1b74927", "Relay 2", RELAYPIN_2},
{"65d5a3e438f6f4a3cdb1849f", "Relay 3", RELAYPIN_3}};
#define WIFI_SSID "Wokwi-GUEST"
#define WIFI_PASS ""
#define APP_KEY "e70629b2-86fd-49da-9288-b354ebb2067b"
#define APP_SECRET "bf469fe4-7a3b-4f54-a4c5-663544b9312f-b6eaacdb-99ba-4478-97ec-cbc7e09b2ac1"
#define BAUD_RATE 9600
bool onPowerState(const String &deviceId, bool &state) {
for (auto &relay : relays) {
if (deviceId == relay.deviceId) {
Serial.printf("Device %s turned %s\r\n", relay.name.c_str(), state ? "on" : "off");
digitalWrite(relay.pin, state);
return true;
}
}
return false;
}
void setupRelayPins() {
for (auto &relay : relays) {
pinMode(relay.pin, OUTPUT);
}
}
void setupWiFi() {
Serial.printf("\r\n[Wifi]: Connecting");
WiFi.begin(WIFI_SSID, WIFI_PASS);
while (WiFi.status() != WL_CONNECTED) {
Serial.printf(".");
delay(250);
}
Serial.printf("connected!\r\n[WiFi]: IP-Address is %s\r\n", WiFi.localIP().toString().c_str());
}
void setupSinricPro() {
for (auto &relay : relays) {
SinricProSwitch &mySwitch = SinricPro[relay.deviceId];
mySwitch.onPowerState(onPowerState);
}
SinricPro.onConnected([]() { Serial.printf("Connected to SinricPro\r\n"); });
SinricPro.onDisconnected([]() { Serial.printf("Disconnected from SinricPro\r\n"); });
SinricPro.begin(APP_KEY, APP_SECRET);
}
void setup() {
Serial.begin(BAUD_RATE);
setupRelayPins();
setupWiFi();
setupSinricPro();
}
void loop() {
SinricPro.handle();
}