From e59d3d0f73a9bbbc115d251fe6ccd8aa6bf0fcf2 Mon Sep 17 00:00:00 2001 From: Ronald Schaten Date: Wed, 14 Dec 2016 23:14:17 +0100 Subject: [PATCH] first version with working relay function --- things/DeviceRelay.cpp | 34 ++++++++++++++++++++++++++++++++++ things/DeviceRelay.h | 21 +++++++++++++++++++++ things/HardwareSonoff.h | 10 +++++++++- 3 files changed, 64 insertions(+), 1 deletion(-) create mode 100644 things/DeviceRelay.cpp create mode 100644 things/DeviceRelay.h diff --git a/things/DeviceRelay.cpp b/things/DeviceRelay.cpp new file mode 100644 index 0000000..3924ff6 --- /dev/null +++ b/things/DeviceRelay.cpp @@ -0,0 +1,34 @@ +#include "DeviceRelay.h" + +void DeviceRelay::setRelay(bool value) { + digitalWrite(pinRelay, value); +} + +void DeviceRelay::deviceSetup() { + pinMode(pinRelay, OUTPUT); + setRelay(HIGH); +} + +bool DeviceRelay::relayOnHandler(String value) { + if (value == "true") { + setRelay(HIGH); + Homie.setNodeProperty(relayNode, "on", "true"); + Serial.println("relay is on"); + } else if (value == "false") { + setRelay(LOW); + Homie.setNodeProperty(relayNode, "on", "false"); + Serial.println("relay is off"); + } else { + return false; + } + return true; +} + +void DeviceRelay::deviceRegister() { + relayNode.subscribe("on", [this](String value) { return relayOnHandler(value); }); + Homie.registerNode(relayNode); +} + +void DeviceRelay::deviceLoop() { + return; +} diff --git a/things/DeviceRelay.h b/things/DeviceRelay.h new file mode 100644 index 0000000..112c3db --- /dev/null +++ b/things/DeviceRelay.h @@ -0,0 +1,21 @@ +#pragma once + +#include "Device.h" +#include + +class DeviceRelay : public Device { + public: + inline DeviceRelay(byte relayPin, char* relayName):relayNode(relayName, "relay") { + pinRelay = relayPin; + nameRelay = relayName; + } + virtual void deviceSetup(); + virtual void deviceRegister(); + virtual void deviceLoop(); + bool relayOnHandler(String value); + private: + byte pinRelay; + char* nameRelay; + void setRelay(bool value); + HomieNode relayNode; +}; diff --git a/things/HardwareSonoff.h b/things/HardwareSonoff.h index fe21387..4e58c6b 100644 --- a/things/HardwareSonoff.h +++ b/things/HardwareSonoff.h @@ -9,14 +9,22 @@ */ #include "DeviceButton.h" +#include "DeviceRelay.h" const char* FWNAME = "things@Sonoff"; const byte PIN_BUTTON = 0; DeviceButton deviceButton(PIN_BUTTON); +const byte PIN_RELAY = 12; +DeviceRelay deviceRelay(PIN_RELAY, "relay"); + Device* devices[] = { &deviceButton, + &deviceRelay, }; -void hardwareSetup() {}; +void hardwareSetup() { + pinMode(PIN_RELAY, OUTPUT); + digitalWrite(PIN_RELAY, HIGH); +};