From 7c02873007fd188cbffc1aff462e92a23ac0cb47 Mon Sep 17 00:00:00 2001 From: openshwprojects Date: Fri, 14 Apr 2023 09:28:55 +0200 Subject: [PATCH] OBK_FLAG_POWER_FORCE_ZERO_IF_RELAYS_OPEN --- src/driver/drv_bl_shared.c | 27 +++++++++++++++++++++++++++ src/httpserver/http_fns.c | 4 ++-- src/new_pins.h | 3 ++- 3 files changed, 31 insertions(+), 3 deletions(-) diff --git a/src/driver/drv_bl_shared.c b/src/driver/drv_bl_shared.c index d7f9c3b0d..ac11ba564 100644 --- a/src/driver/drv_bl_shared.c +++ b/src/driver/drv_bl_shared.c @@ -408,7 +408,27 @@ commandResult_t BL09XX_SetupConsumptionThreshold(const void *context, const char return CMD_RES_OK; } +bool Channel_AreAllRelaysOpen() { + int i, role, ch; + for (i = 0; i < PLATFORM_GPIO_MAX; i++) { + role = g_cfg.pins.roles[i]; + ch = g_cfg.pins.channels[i]; + if (role == IOR_Relay) { + // this channel is high = relay is set + if (CHANNEL_Get(ch)) { + return false; + } + } + if (role == IOR_Relay_n) { + // this channel is low = relay_n is set + if (CHANNEL_Get(ch)==false) { + return false; + } + } + } + return true; +} void BL_ProcessUpdate(float voltage, float current, float power, float frequency) { @@ -435,6 +455,13 @@ void BL_ProcessUpdate(float voltage, float current, float power, if (current < 0.0f) current = 0.0f; } + if (CFG_HasFlag(OBK_FLAG_POWER_FORCE_ZERO_IF_RELAYS_OPEN)) + { + if (Channel_AreAllRelaysOpen()) { + power = 0; + current = 0; + } + } // those are final values, like 230V lastReadings[OBK_POWER] = power; diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 40606c4ef..366b9dc5f 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -2187,13 +2187,13 @@ const char* g_obk_flagNames[] = { "[HASS] Deactivate avty_t flag for sensor when publishing to HASS (permit to keep value)", "[DRV] Deactivate Autostart of all drivers", "[WiFi] Quick connect to WiFi on reboot (TODO: check if it works for you and report on github)", + "[Power] Set power and current to zero if all relays are open", "error", "error", "error", "error", "error", - "error", -}; +}; int http_fn_cfg_generic(http_request_t* request) { int i; char tmpA[64]; diff --git a/src/new_pins.h b/src/new_pins.h index a30c70494..dc4efbd20 100644 --- a/src/new_pins.h +++ b/src/new_pins.h @@ -853,8 +853,9 @@ typedef struct pinsState_s { #define OBK_FLAG_NOT_PUBLISH_AVAILABILITY_SENSOR 35 #define OBK_FLAG_DRV_DISABLE_AUTOSTART 36 #define OBK_FLAG_WIFI_FAST_CONNECT 37 +#define OBK_FLAG_POWER_FORCE_ZERO_IF_RELAYS_OPEN 38 -#define OBK_TOTAL_FLAGS 38 +#define OBK_TOTAL_FLAGS 39 #define LOGGER_FLAG_MQTT_DEDUPER 1 #define LOGGER_FLAG_POWER_SAVE 2