Separar y cortar partes para rgb

es la primera vez que realizo una consulta en el foro, perdonen si no esta como deberia
estoy trabajando en un proyecto de mqtt y estoy teniendo un problema a la hora de controlar una tira rgb
a la hora de enviar el rgb envia el payload entre "[ ]", tendria que quitar eso y seguido, separar las 3 partes del rgb por la ","
image

esta seria la parte del callback al que llega esos datos

void callback(char* topic, byte* payload, unsigned int length) {
  int valor;
  Serial.print("Mensaje recibido [");
  Serial.print(topic);
  Serial.print("] ");

  if( strcmp(topic, "colores")==0){
    for (int i = 0; i < length; i++) {
    Serial.print((char)payload[i]);
    } Serial.println();
  } else {

//
  char payload_string[length + 1];

  memcpy(payload_string, payload, length);
  payload_string[length] = '\0';
  valor = atoi(payload_string);
  Serial.print(valor);
  Serial.println();
//

la parte que se encuentra entre "//" la uso para convertir los otros tipos de datos que llegan, pero con el rgb no funciona, manda directamente 0; asi que esta la otra función que se activaria solamente cuando llegue un dato rgb y no modificaria lo demas que ya funciona bien.

Puedes usar strtok
o strings, depende del gusto aunque muchos son detractores de usar strings.

Te paso ejemplo con strtok adaptado a tus necesidades:

char payload[] = "[10,20,30]";
char delimitador[]="[,]";
char *resultado=NULL;
int r=0;
int g=0;
int b=0;

void setup() {
  Serial.begin(9600);
  resultado = strtok(payload, delimitador); //buscamos delimitadores

    if (resultado != NULL) { 
      r=atoi(resultado);
      resultado = strtok(NULL, delimitador); //sigiente delimitador
    }
     if (resultado != NULL) { 
      g=atoi(resultado);
      resultado = strtok(NULL, delimitador); //sigiente delimitador
    }
     if (resultado != NULL) { 
      b=atoi(resultado);
      resultado = strtok(NULL, delimitador); //sigiente delimitador
    }
  Serial.println(r);
  Serial.println(g);
  Serial.println(b);
}

void loop() {
  // put your main code here, to run repeatedly:

}


Lo puedes ver en ejecución aqui:
https://wokwi.com/projects/349103272749957716

@laty03
Cambie esta parte de la función y muestre el resultado de la impresión en el Serial monitor cuando se reciba el topic "colores"

if( strcmp(topic, "colores")==0){
    Serial.print ("Payload length = ");
    Serial.println (length);
    for (int i = 0; i < length; i++) {
    Serial.print((byte)payload[i], HEX);
    } Serial.println();
  }