diff --git a/code/espurna/domoticz.cpp b/code/espurna/domoticz.cpp index 69dc2d2a..8ab527d3 100644 --- a/code/espurna/domoticz.cpp +++ b/code/espurna/domoticz.cpp @@ -64,53 +64,52 @@ void _domoticzStatus(unsigned char id, bool status) { void _domoticzLight(unsigned int idx, const JsonObject& root) { - if (!lightHasColor()) return; - JsonObject& color = root["Color"]; - if (!color.success()) return; + if (color.success()) { - // for ColorMode... see: - // https://github.com/domoticz/domoticz/blob/development/hardware/ColorSwitch.h - // https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's#Set_a_light_to_a_certain_color_or_color_temperature + // for ColorMode... see: + // https://github.com/domoticz/domoticz/blob/development/hardware/ColorSwitch.h + // https://www.domoticz.com/wiki/Domoticz_API/JSON_URL's#Set_a_light_to_a_certain_color_or_color_temperature - DEBUG_MSG_P(PSTR("[DOMOTICZ] Received rgb:%u,%u,%u ww:%u,cw:%u t:%u brightness:%u for IDX %u\n"), - color["r"].as(), - color["g"].as(), - color["b"].as(), - color["ww"].as(), - color["cw"].as(), - color["t"].as(), - color["Level"].as(), - idx - ); + DEBUG_MSG_P(PSTR("[DOMOTICZ] Received rgb:%u,%u,%u ww:%u,cw:%u t:%u brightness:%u for IDX %u\n"), + color["r"].as(), + color["g"].as(), + color["b"].as(), + color["ww"].as(), + color["cw"].as(), + color["t"].as(), + color["Level"].as(), + idx + ); - // m field contains information about color mode (enum ColorMode from domoticz ColorSwitch.h): - unsigned int cmode = color["m"]; + // m field contains information about color mode (enum ColorMode from domoticz ColorSwitch.h): + unsigned int cmode = color["m"]; - if (cmode == 2) { // ColorModeWhite - WW,CW,temperature (t unused for now) + if (cmode == 2) { // ColorModeWhite - WW,CW,temperature (t unused for now) - if (lightChannels() < 2) return; + if (lightChannels() < 2) return; - lightChannel(0, color["ww"]); - lightChannel(1, color["cw"]); + lightChannel(0, color["ww"]); + lightChannel(1, color["cw"]); - } else if (cmode == 3 || cmode == 4) { // ColorModeRGB or ColorModeCustom + } else if (cmode == 3 || cmode == 4) { // ColorModeRGB or ColorModeCustom - if (lightChannels() < 3) return; + if (lightChannels() < 3) return; - lightChannel(0, color["r"]); - lightChannel(1, color["g"]); - lightChannel(2, color["b"]); + lightChannel(0, color["r"]); + lightChannel(1, color["g"]); + lightChannel(2, color["b"]); + + // WARM WHITE (or MONOCHROME WHITE) and COLD WHITE are always sent. + // Apply only when supported. + if (lightChannels() > 3) { + lightChannel(3, color["ww"]); + } + if (lightChannels() > 4) { + lightChannel(4, color["cw"]); + } - // WARM WHITE (or MONOCHROME WHITE) and COLD WHITE are always sent. - // Apply only when supported. - if (lightChannels() > 3) { - lightChannel(3, color["ww"]); } - if (lightChannels() > 4) { - lightChannel(4, color["cw"]); - } - } // domoticz uses 100 as maximum value while we're using Light::BRIGHTNESS_MAX (unsigned char) @@ -154,10 +153,11 @@ void _domoticzMqtt(unsigned int type, const char * topic, char * payload) { // IDX unsigned int idx = root["idx"]; - String stype = root["stype"]; #if LIGHT_PROVIDER != LIGHT_PROVIDER_NONE - if (stype.startsWith("RGB") && (_domoticzIdx(0) == idx)) { + String stype = root["stype"]; + String switchType = root["switchType"]; + if ((_domoticzIdx(0) == idx) && (stype.startsWith("RGB") || (switchType.equals("Dimmer")))) { _domoticzLight(idx, root); } #endif