code: def set_color(self, value, callb=None, duration=0, rapid=False):
          
          if len(value) == 4:
              mypartial=partial(self.resp_set_light,color=value)
              if callb:
                  mycallb=lambda x,y:(mypartial(y),callb(x,y))
              else:
                  mycallb=lambda x,y:mypartial(y)
              #try:
              if rapid:
                  self.fire_and_forget(LightSetColor, {"color": value, "duration": duration}, num_repeats=1)
                  self.resp_set_light(None,color=value)
                  if callb:
                      callb(self,None)
              else:
                  self.req_with_ack(LightSetColor, {"color": value, "duration": duration},callb=mycallb)
docs: Convenience method to set the colour status of the device
  
          This method will send a LightSetColor message to the device, and request callb be executed
          when an ACK is received. The default callback will simply cache the value.
  
              :param value: The new state, a dictionary onf int with 4 keys Hue, Saturation, Brightness, Kelvin
              :type value: dict
              :param duration: The duration, in seconds, of the power state transition.
              :type duration: int
              :param callb: Callable to be used when the response is received. If not set,
                          self.resp_set_label will be used.
              :type callb: callable
              :param rapid: Whether to ask for ack (False) or not (True). Default False
              :type rapid: bool
              :returns: None
              :rtype: None