#include #include #include WiFiUDP udpClient; Syslog syslog(udpClient, SYSLOG_PROTO_IETF); const int PIN_RELAY = D1; int timer = 0; HomieNode powerNode("power", "switch"); bool powerStateHandler(const HomieRange& range, const String& value) { if (value != "true" && value != "false") return false; bool on = (value == "true"); digitalWrite(PIN_RELAY, on ? LOW : HIGH); powerNode.setProperty("state").send(value); Homie.getLogger() << "Power is " << (on ? "on" : "off") << endl; return true; } bool powerTimerHandler(const HomieRange& range, const String& value) { int settimer = value.toInt(); if(settimer == 0 || settimer > 120) return false; powerNode.setProperty("timer").send(String(settimer)); powerNode.setProperty("state").send("on"); Homie.getLogger() << "Power is on for " << settimer << "minutes" << endl; digitalWrite(PIN_RELAY, on ? LOW : HIGH); return true; } void setupHandler() { pinMode(PIN_RELAY, OUTPUT); digitalWrite(PIN_RELAY, HIGH); powerNode.setProperty("state").send("off"); } void onHomieEvent(const HomieEvent& event) { switch(event.type) { case HomieEventType::OTA_FAILED: syslog.log(LOG_INFO, "OTA failed"); // Do whatever you want when OTA is failed break; case HomieEventType::OTA_SUCCESSFUL: syslog.log(LOG_INFO, "OTA completed"); break; case HomieEventType::ABOUT_TO_RESET: // Do whatever you want when the device is about to reset break; case HomieEventType::WIFI_CONNECTED: // Do whatever you want when Wi-Fi is connected in normal mode syslog.deviceHostname(Homie.getConfiguration().name); syslog.appName("deskcontrol"); syslog.defaultPriority(LOG_ERR); syslog.log(LOG_INFO, "WiFi Connected, software version: 1.0"); break; case HomieEventType::MQTT_READY: syslog.log(LOG_INFO, "MQTT connected"); break; case HomieEventType::MQTT_DISCONNECTED: syslog.log(LOG_INFO, "MQTT disconnected"); break; default: break; } } void setup() { syslog.server("192.168.1.100", 514); Serial.begin(115200); Serial << endl << endl; Serial << "Firmware 0.0.1" << endl; Serial << endl << endl; Homie_setFirmware("deskcontrol", "1.0.0"); Homie_setBrand("FuryFire"); powerNode.advertise("state").settable(powerStateHandler); powerNode.advertise("timer").settable(powerTimerHandler); Homie.setSetupFunction(setupHandler); Homie.onEvent(onHomieEvent); // before Homie.setup() Homie.setup(); } void loop() { Homie.loop(); }