From bcd2bf807fce3bbef989166fa6adaec8ce97ffbd Mon Sep 17 00:00:00 2001 From: Maxim Prokhorov Date: Tue, 15 Oct 2019 18:12:56 +0300 Subject: [PATCH 1/4] light: configure colortemp limits from settings --- code/espurna/config/general.h | 8 -------- code/espurna/light.h | 8 -------- code/espurna/light.ino | 26 +++++++++++++++++++++----- 3 files changed, 21 insertions(+), 21 deletions(-) diff --git a/code/espurna/config/general.h b/code/espurna/config/general.h index 70e79c20aa..f76a7bf820 100644 --- a/code/espurna/config/general.h +++ b/code/espurna/config/general.h @@ -1220,14 +1220,6 @@ #define LIGHT_WARMWHITE_MIRED 500 // Warmwhite Strip, Value must be __ABOVE__ W1!! (Default: 2000 Kelvin/500 MiRed) #endif -#ifndef LIGHT_COLDWHITE_KELVIN -#define LIGHT_COLDWHITE_KELVIN 6536 -#endif - -#ifndef LIGHT_WARMWHITE_KELVIN -#define LIGHT_WARMWHITE_KELVIN 2000 -#endif - #ifndef LIGHT_STEP #define LIGHT_STEP 32 // Step size #endif diff --git a/code/espurna/light.h b/code/espurna/light.h index 68f5bb4a7b..e59233c801 100644 --- a/code/espurna/light.h +++ b/code/espurna/light.h @@ -11,14 +11,6 @@ namespace Light { constexpr const long BRIGHTNESS_MIN = LIGHT_MIN_BRIGHTNESS; constexpr const long BRIGHTNESS_MAX = LIGHT_MAX_BRIGHTNESS; - // Default to the Philips Hue value that HA also use. - // https://developers.meethue.com/documentation/core-concepts - constexpr const long MIREDS_COLDWHITE = LIGHT_COLDWHITE_MIRED; - constexpr const long MIREDS_WARMWHITE = LIGHT_WARMWHITE_MIRED; - - constexpr const long KELVIN_WARMWHITE = LIGHT_WARMWHITE_KELVIN; - constexpr const long KELVIN_COLDWHITE = LIGHT_COLDWHITE_KELVIN; - constexpr const long PWM_MIN = LIGHT_MIN_PWM; constexpr const long PWM_MAX = LIGHT_MAX_PWM; constexpr const long PWM_LIMIT = LIGHT_LIMIT_PWM; diff --git a/code/espurna/light.ino b/code/espurna/light.ino index f3d7b73c0a..6e0a5dc4e5 100644 --- a/code/espurna/light.ino +++ b/code/espurna/light.ino @@ -56,7 +56,16 @@ unsigned int _light_transition_time = LIGHT_TRANSITION_TIME; bool _light_dirty = false; bool _light_state = false; unsigned char _light_brightness = Light::BRIGHTNESS_MAX; -unsigned int _light_mireds = lround((Light::MIREDS_COLDWHITE + Light::MIREDS_WARMWHITE) / 2); + +// Default to the Philips Hue value that HA also use. +// https://developers.meethue.com/documentation/core-concepts +long _light_mireds_cold = LIGHT_COLDWHITE_MIRED; +long _light_mireds_warm = LIGHT_WARMWHITE_MIRED; + +long _light_kelvin_cold = (1000000L / _light_mireds_cold); +long _light_kelvin_warm = (1000000L / _light_mireds_warm); + +long _light_mireds = lround((_light_mireds_cold + _light_mireds_warm) / 2L); using light_brightness_func_t = void(); light_brightness_func_t* _light_brightness_func = nullptr; @@ -154,7 +163,7 @@ void _lightApplyBrightnessColor() { if (_light_use_cct) { // This change the range from 153-500 to 0-347 so we get a value between 0 and 1 in the end. - double miredFactor = ((double) _light_mireds - (double) Light::MIREDS_COLDWHITE)/((double) Light::MIREDS_WARMWHITE - (double) Light::MIREDS_COLDWHITE); + double miredFactor = ((double) _light_mireds - (double) _light_mireds_cold)/((double) _light_mireds_warm - (double) _light_mireds_cold); // set cold white _light_channel[3].inputValue = 0; @@ -320,11 +329,11 @@ void _fromHSV(const char * hsv) { // https://github.com/stelgenhof/AiLight // Color temperature is measured in mireds (kelvin = 1e6/mired) long _toKelvin(const long mireds) { - return constrain(static_cast(1000000L / mireds), Light::KELVIN_WARMWHITE, Light::KELVIN_COLDWHITE); + return constrain(static_cast(1000000L / mireds), _light_kelvin_warm, _light_kelvin_cold); } long _toMireds(const long kelvin) { - return constrain(static_cast(lround(1000000L / kelvin)), Light::MIREDS_COLDWHITE, Light::MIREDS_WARMWHITE); + return constrain(static_cast(lround(1000000L / kelvin)), _light_mireds_cold, _light_mireds_warm); } void _lightMireds(const long kelvin) { @@ -335,7 +344,7 @@ void _lightMiredsCCT(const long kelvin) { _lightMireds(kelvin); // This change the range from 153-500 to 0-347 so we get a value between 0 and 1 in the end. - const double factor = ((double) _light_mireds - (double) Light::MIREDS_COLDWHITE)/((double) Light::MIREDS_WARMWHITE - (double) Light::MIREDS_COLDWHITE); + const double factor = ((double) _light_mireds - (double) _light_mireds_cold)/((double) _light_mireds_warm - (double) _light_mireds_cold); _setCCTInputValue( lround(factor * Light::VALUE_MAX), lround(((double) 1.0 - factor) * Light::VALUE_MAX) @@ -1270,6 +1279,13 @@ void _lightConfigure() { setSetting("useCCT", _light_use_cct); } + if (_light_use_cct) { + _light_mireds_cold = getSetting("lightColdMired", LIGHT_COLDWHITE_MIRED).toInt(); + _light_mireds_warm = getSetting("lightWarmMired", LIGHT_WARMWHITE_MIRED).toInt(); + _light_kelvin_cold = (1000000L / _light_mireds_cold); + _light_kelvin_warm = (1000000L / _light_mireds_warm); + } + _light_use_gamma = getSetting("useGamma", LIGHT_USE_GAMMA).toInt() == 1; _light_use_transitions = getSetting("useTransitions", LIGHT_USE_TRANSITIONS).toInt() == 1; _light_transition_time = getSetting("lightTime", LIGHT_TRANSITION_TIME).toInt(); From 6d9d4ae149c11cfb5e162888a6d01dba8b1e1283 Mon Sep 17 00:00:00 2001 From: Max Prokhorov Date: Tue, 15 Oct 2019 19:14:22 +0300 Subject: [PATCH 2/4] light: provide mired warm / cold limits to webui --- code/espurna/data/index.all.html.gz | Bin 59380 -> 59412 bytes code/espurna/data/index.light.html.gz | Bin 55939 -> 55972 bytes code/espurna/light.ino | 5 +- code/espurna/static/index.all.html.gz.h | 864 +++++++++++----------- code/espurna/static/index.light.html.gz.h | 840 ++++++++++----------- code/html/custom.js | 6 +- 6 files changed, 862 insertions(+), 853 deletions(-) diff --git a/code/espurna/data/index.all.html.gz b/code/espurna/data/index.all.html.gz index 0b6dfa15f273467614c85445d13c118238910c1d..d4326fc770baadb2d9ff46047459d2f2c1a931cb 100644 GIT binary patch delta 8636 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 O{|Dwi_dGFH0|5ZN2M$XB delta 8603 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 diff --git a/code/espurna/data/index.light.html.gz b/code/espurna/data/index.light.html.gz index fa8027ba28ba68091372523f3e773cfdf7ee9cec..0da9e3b601bf2a95a71379b7bb5bad61701cd645 100644 GIT binary patch delta 8461 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 delta 8427 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 Date: Tue, 15 Oct 2019 19:14:59 +0300 Subject: [PATCH 3/4] light: update XIAOMI_SMART_DESK_LAMP mired values --- code/espurna/config/hardware.h | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/code/espurna/config/hardware.h b/code/espurna/config/hardware.h index 1082ab6270..9a26c20496 100644 --- a/code/espurna/config/hardware.h +++ b/code/espurna/config/hardware.h @@ -3374,6 +3374,10 @@ #define LIGHT_CH2_PIN 4 // cold white #define LIGHT_CH2_INVERSE 0 + // https://www.xiaomitoday.com/xiaomi-mijia-mjtd01yl-led-desk-lamp-review/ + #define LIGHT_COLDWHITE_MIRED 153 + #define LIGHT_WARMWHITE_MIRED 370 + // Encoder // If mode is ENCODER_MODE_RATIO, the value ratio between both channels is changed // when the button is not pressed, and the overall brightness when pressed From 6a3ef86c8f78e4dd95fb8a23848cbd6a4b0adcd1 Mon Sep 17 00:00:00 2001 From: Max Prokhorov Date: Tue, 15 Oct 2019 19:22:15 +0300 Subject: [PATCH 4/4] light: change naming order for cct vars --- code/espurna/light.ino | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/code/espurna/light.ino b/code/espurna/light.ino index 20ee7212b0..e40bbc99fa 100644 --- a/code/espurna/light.ino +++ b/code/espurna/light.ino @@ -59,13 +59,13 @@ unsigned char _light_brightness = Light::BRIGHTNESS_MAX; // Default to the Philips Hue value that HA also use. // https://developers.meethue.com/documentation/core-concepts -long _light_mireds_cold = LIGHT_COLDWHITE_MIRED; -long _light_mireds_warm = LIGHT_WARMWHITE_MIRED; +long _light_cold_mireds = LIGHT_COLDWHITE_MIRED; +long _light_warm_mireds = LIGHT_WARMWHITE_MIRED; -long _light_kelvin_cold = (1000000L / _light_mireds_cold); -long _light_kelvin_warm = (1000000L / _light_mireds_warm); +long _light_cold_kelvin = (1000000L / _light_cold_mireds); +long _light_warm_kelvin = (1000000L / _light_warm_mireds); -long _light_mireds = lround((_light_mireds_cold + _light_mireds_warm) / 2L); +long _light_mireds = lround((_light_cold_mireds + _light_warm_mireds) / 2L); using light_brightness_func_t = void(); light_brightness_func_t* _light_brightness_func = nullptr; @@ -163,7 +163,7 @@ void _lightApplyBrightnessColor() { if (_light_use_cct) { // This change the range from 153-500 to 0-347 so we get a value between 0 and 1 in the end. - double miredFactor = ((double) _light_mireds - (double) _light_mireds_cold)/((double) _light_mireds_warm - (double) _light_mireds_cold); + double miredFactor = ((double) _light_mireds - (double) _light_cold_mireds)/((double) _light_warm_mireds - (double) _light_cold_mireds); // set cold white _light_channel[3].inputValue = 0; @@ -329,11 +329,11 @@ void _fromHSV(const char * hsv) { // https://github.com/stelgenhof/AiLight // Color temperature is measured in mireds (kelvin = 1e6/mired) long _toKelvin(const long mireds) { - return constrain(static_cast(1000000L / mireds), _light_kelvin_warm, _light_kelvin_cold); + return constrain(static_cast(1000000L / mireds), _light_warm_kelvin, _light_cold_kelvin); } long _toMireds(const long kelvin) { - return constrain(static_cast(lround(1000000L / kelvin)), _light_mireds_cold, _light_mireds_warm); + return constrain(static_cast(lround(1000000L / kelvin)), _light_cold_mireds, _light_warm_mireds); } void _lightMireds(const long kelvin) { @@ -344,7 +344,7 @@ void _lightMiredsCCT(const long kelvin) { _lightMireds(kelvin); // This change the range from 153-500 to 0-347 so we get a value between 0 and 1 in the end. - const double factor = ((double) _light_mireds - (double) _light_mireds_cold)/((double) _light_mireds_warm - (double) _light_mireds_cold); + const double factor = ((double) _light_mireds - (double) _light_cold_mireds)/((double) _light_warm_mireds - (double) _light_cold_mireds); _setCCTInputValue( lround(factor * Light::VALUE_MAX), lround(((double) 1.0 - factor) * Light::VALUE_MAX) @@ -1014,8 +1014,8 @@ void _lightWebSocketStatus(JsonObject& root) { if (_light_use_cct) { JsonObject& mireds = root.createNestedObject("mireds"); mireds["value"] = _light_mireds; - mireds["cold"] = _light_mireds_cold; - mireds["warm"] = _light_mireds_warm; + mireds["cold"] = _light_cold_mireds; + mireds["warm"] = _light_warm_mireds; root["useCCT"] = _light_use_cct; } JsonArray& channels = root.createNestedArray("channels"); @@ -1283,10 +1283,10 @@ void _lightConfigure() { } if (_light_use_cct) { - _light_mireds_cold = getSetting("lightColdMired", LIGHT_COLDWHITE_MIRED).toInt(); - _light_mireds_warm = getSetting("lightWarmMired", LIGHT_WARMWHITE_MIRED).toInt(); - _light_kelvin_cold = (1000000L / _light_mireds_cold); - _light_kelvin_warm = (1000000L / _light_mireds_warm); + _light_cold_mireds = getSetting("lightColdMired", LIGHT_COLDWHITE_MIRED).toInt(); + _light_warm_mireds = getSetting("lightWarmMired", LIGHT_WARMWHITE_MIRED).toInt(); + _light_cold_kelvin = (1000000L / _light_cold_mireds); + _light_warm_kelvin = (1000000L / _light_warm_mireds); } _light_use_gamma = getSetting("useGamma", LIGHT_USE_GAMMA).toInt() == 1;