From 45a018432055d1148d7f8bdf720f569fe3af2d2d Mon Sep 17 00:00:00 2001 From: h2zero Date: Wed, 7 Jul 2021 21:08:43 -0600 Subject: [PATCH] Add triggering of actuator on/off state by button press. This will enable using button on the gateway to switch any controlled attached actuators/relays when pressed. Adds the following macros: - ACTUATOR_ON; 0 or 1, set to the output level of the gpio pin to turn the actuator on. - ACTUATOR_ONOFF_DEFAULT; ACTUATOR_ON or !ACTUATOR_ON, set to the state desired on reset. - ACTUATOR_BUTTON_TRIGGER_LEVEL; 0 or 1, set to the sensing level which to detect a button press to change the actuator state. --- main/ZactuatorONOFF.ino | 11 +++++++++++ main/ZsensorGPIOInput.ino | 6 ++++++ main/config_ONOFF.h | 9 +++++++++ main/main.ino | 4 ++++ platformio.ini | 6 ++++++ 5 files changed, 36 insertions(+) diff --git a/main/ZactuatorONOFF.ino b/main/ZactuatorONOFF.ino index 6c32740..b4c32ea 100644 --- a/main/ZactuatorONOFF.ino +++ b/main/ZactuatorONOFF.ino @@ -76,4 +76,15 @@ void MQTTtoONOFF(char* topicOri, char* datacallback) { } # endif +void ActuatorButtonTrigger() { + uint8_t level = !digitalRead(ACTUATOR_ONOFF_GPIO); + char* level_string = "ON"; + if (level != ACTUATOR_ON) { + level_string = "OFF"; + } + Log.trace(F("Actuator triggered %s by button" CR), level_string); + digitalWrite(ACTUATOR_ONOFF_GPIO, level); + pub(subjectGTWONOFFtoMQTT, level_string); +} + #endif diff --git a/main/ZsensorGPIOInput.ino b/main/ZsensorGPIOInput.ino index c38775c..9c6a7be 100644 --- a/main/ZsensorGPIOInput.ino +++ b/main/ZsensorGPIOInput.ino @@ -73,6 +73,12 @@ void MeasureGPIOInput() { } if (GPIOdata.size() > 0) pub(subjectGPIOInputtoMQTT, GPIOdata); + +# ifdef ZactuatorONOFF + if (InputState == ACTUATOR_BUTTON_TRIGGER_LEVEL) { + ActuatorButtonTrigger(); + } +# endif } } diff --git a/main/config_ONOFF.h b/main/config_ONOFF.h index c6d928f..8f1b358 100644 --- a/main/config_ONOFF.h +++ b/main/config_ONOFF.h @@ -36,6 +36,15 @@ extern void MQTTtoONOFF(char* topicOri, JsonObject& RFdata); #define ONKey "setON" #define OFFKey "setOFF" +#ifndef ACTUATOR_ON +# define ACTUATOR_ON LOW +#endif +#ifndef ACTUATOR_ONOFF_DEFAULT +# define ACTUATOR_ONOFF_DEFAULT !ACTUATOR_ON +#endif +#ifndef ACTUATOR_BUTTON_TRIGGER_LEVEL +# define ACTUATOR_BUTTON_TRIGGER_LEVEL LOW +#endif /*-------------------PIN DEFINITIONS----------------------*/ // default pin, if not set into the MQTT json diff --git a/main/main.ino b/main/main.ino index 9642827..5164f8d 100644 --- a/main/main.ino +++ b/main/main.ino @@ -636,6 +636,10 @@ void setup() { delay(1500); +#ifdef ZactuatorONOFF + pinMode(ACTUATOR_ONOFF_GPIO, OUTPUT); + digitalWrite(ACTUATOR_ONOFF_GPIO, ACTUATOR_ONOFF_DEFAULT); +#endif #ifdef ZsensorBME280 setupZsensorBME280(); modules.add(ZsensorBME280); diff --git a/platformio.ini b/platformio.ini index d20983a..ed70a6b 100644 --- a/platformio.ini +++ b/platformio.ini @@ -925,6 +925,9 @@ build_flags = '-DZsensorGPIOInput="GPIOInput"' '-DACTUATOR_ONOFF_GPIO=12' '-DINPUT_GPIO=0' + '-DACTUATOR_ON=0' + '-DACTUATOR_ONOFF_DEFAULT=ACTUATOR_ON' + '-DACTUATOR_BUTTON_TRIGGER_LEVEL=0' '-DGateway_Name="OpenMQTTGateway_SONOFF_RELAY"' board_build.flash_mode = dout @@ -941,6 +944,9 @@ build_flags = '-DZsensorGPIOInput="GPIOInput"' '-DACTUATOR_ONOFF_GPIO=12' '-DINPUT_GPIO=0' + '-DACTUATOR_ON=0' + '-DACTUATOR_ONOFF_DEFAULT=ACTUATOR_ON' + '-DACTUATOR_BUTTON_TRIGGER_LEVEL=0' '-DRF_RECEIVER_GPIO=4' '-DZgatewayRF="RF"' '-DGateway_Name="OpenMQTTGateway_SONOFF_BASIC_RFR3"'