@@ -241,6 +241,7 @@ bool GroupState::isSetField(GroupStateField field) const {
241241 case GroupStateField::COLOR_TEMP :
242242 return isSetKelvin ();
243243 case GroupStateField::BULB_MODE :
244+ case GroupStateField::COLOR_MODE :
244245 return isSetBulbMode ();
245246 default :
246247 Serial.print (F (" WARNING: tried to check if unknown field was set: " ));
@@ -855,6 +856,29 @@ void GroupState::applyField(JsonObject partialState, const BulbId& bulbId, Group
855856 partialState[GroupStateFieldNames::BULB_MODE ] = BULB_MODE_NAMES [getBulbMode ()];
856857 break ;
857858
859+ // For HomeAssistant. Should report:
860+ // 1. "brightness" if no color temp/rgb support
861+ // 2. "rgb" if RGB or RGBW bulb and in color mode
862+ // 3. "color_temp" if WW or RGBW and in color temp mode
863+ // 4. "onoff" if in night mode
864+ case GroupStateField::COLOR_MODE :
865+ if (
866+ MiLightRemoteTypeHelpers::supportsRgb (bulbId.deviceType )
867+ && getBulbMode () == BULB_MODE_COLOR
868+ ) {
869+ partialState[GroupStateFieldNames::COLOR_MODE ] = F (" rgb" );
870+ } else if (
871+ MiLightRemoteTypeHelpers::supportsColorTemp (bulbId.deviceType )
872+ && getBulbMode () == BULB_MODE_WHITE
873+ ) {
874+ partialState[GroupStateFieldNames::COLOR_MODE ] = F (" color_temp" );
875+ } else if (getBulbMode () == BULB_MODE_NIGHT ) {
876+ partialState[GroupStateFieldNames::COLOR_MODE ] = F (" onoff" );
877+ } else {
878+ partialState[GroupStateFieldNames::COLOR_MODE ] = F (" brightness" );
879+ }
880+ break ;
881+
858882 case GroupStateField::COLOR :
859883 if (getBulbMode () == BULB_MODE_COLOR ) {
860884 applyColor (partialState);
0 commit comments