From d47aae3f99d8ec3b3d7ff4e238bbbf4ef415ced0 Mon Sep 17 00:00:00 2001 From: openshwprojects Date: Thu, 9 Mar 2023 03:27:30 +0100 Subject: [PATCH] add ability to change mired range --- src/cmnds/cmd_newLEDDriver.c | 14 ++++++++++++-- src/cmnds/cmd_public.h | 5 +++-- src/httpserver/http_fns.c | 6 ++++-- 3 files changed, 19 insertions(+), 6 deletions(-) diff --git a/src/cmnds/cmd_newLEDDriver.c b/src/cmnds/cmd_newLEDDriver.c index bede8ae79..f05a247b0 100644 --- a/src/cmnds/cmd_newLEDDriver.c +++ b/src/cmnds/cmd_newLEDDriver.c @@ -70,8 +70,8 @@ float rgb_used_corr[3]; // RGB correction currently used int g_lightEnableAll = 0; // the slider control in the UI emits values -//in the range from 154-500 (defined -//in homeassistant/util/color.py as HASS_COLOR_MIN and HASS_COLOR_MAX). +// in the range from 154-500 (defined +// in homeassistant/util/color.py as HASS_COLOR_MIN and HASS_COLOR_MAX). float led_temperature_min = HASS_TEMPERATURE_MIN; float led_temperature_max = HASS_TEMPERATURE_MAX; float led_temperature_current = HASS_TEMPERATURE_MIN; @@ -1311,6 +1311,15 @@ static commandResult_t lerpSpeed(const void *context, const char *cmd, const cha return CMD_RES_OK; } +static commandResult_t ledRange(const void *context, const char *cmd, const char *args, int cmdFlags) { + // Use tokenizer, so we can use variables (eg. $CH11 as variable) + Tokenizer_TokenizeString(args, 0); + + led_temperature_min = Tokenizer_GetArgFloat(0); + led_temperature_max = Tokenizer_GetArgFloat(1); + + return CMD_RES_OK; +} static commandResult_t setBrightness(const void *context, const char *cmd, const char *args, int cmdFlags) { float f; @@ -1494,6 +1503,7 @@ void NewLED_InitCommands(){ //cmddetail:"fn":"rgb_gamma_control","file":"cmnds/cmd_rgbGamma.c","requires":"", //cmddetail:"examples":"led_gammaCtrl on"} CMD_RegisterCommand("led_gammaCtrl", led_gamma_control, NULL); + CMD_RegisterCommand("LEDRange", ledRange, NULL); } void NewLED_RestoreSavedStateIfNeeded() { diff --git a/src/cmnds/cmd_public.h b/src/cmnds/cmd_public.h index ba2bea4f6..40ea0c129 100644 --- a/src/cmnds/cmd_public.h +++ b/src/cmnds/cmd_public.h @@ -124,8 +124,7 @@ enum EventCode { #define HASS_TEMPERATURE_MIN 154 #define HASS_TEMPERATURE_MAX 500 #define HASS_TEMPERATURE_CENTER ((HASS_TEMPERATURE_MAX+HASS_TEMPERATURE_MIN)/2) -#define KELVIN_TEMPERATURE_MIN 2000 -#define KELVIN_TEMPERATURE_MAX 6500 +#define HASS_TO_KELVIN(x) (1000000 / (x)) // In general, LED can be in two modes: // - Temperature (Cool and Warm LEDs are on) @@ -222,6 +221,8 @@ OBK_Publish_Result LED_SendDimmerChange(); OBK_Publish_Result sendTemperatureChange(); OBK_Publish_Result LED_SendCurrentLightMode(); void LED_ResetGlobalVariablesToDefaults(); +extern float led_temperature_min; +extern float led_temperature_max; // cmd_test.c int CMD_InitTestCommands(); // cmd_channels.c diff --git a/src/httpserver/http_fns.c b/src/httpserver/http_fns.c index 372c7cd99..2365477d9 100644 --- a/src/httpserver/http_fns.c +++ b/src/httpserver/http_fns.c @@ -769,14 +769,16 @@ int http_fn_index(http_request_t* request) { inputName = "pwm"; pwmValue = LED_GetTemperature(); - long pwmKelvin = 1000000 / pwmValue; + long pwmKelvin = HASS_TO_KELVIN(pwmValue); + long pwmKelvinMax = HASS_TO_KELVIN(led_temperature_min); + long pwmKelvinMin = HASS_TO_KELVIN(led_temperature_max); poststr(request, ""); hprintf255(request, "
LED Temperature Slider %s (%ld K) (Warm <--- ---> Cool)
", activeStr, pwmKelvin); hprintf255(request, "
", SPECIAL_CHANNEL_TEMPERATURE); //(KELVIN_TEMPERATURE_MAX - KELVIN_TEMPERATURE_MIN) / (HASS_TEMPERATURE_MAX - HASS_TEMPERATURE_MIN) = 13 - hprintf255(request, "", pwmKelvin); hprintf255(request, "", inputName, SPECIAL_CHANNEL_TEMPERATURE);