 CommandEntry* command_queue = nullptr;
 
 void enqueueCommand(struct CommandEntry* command) {
+  command->duration_left = command->duration;
   command->next_in_queue = nullptr;
   if (command_queue == nullptr) {
     command_queue = command;

  if (command_queue) {
    CommandEntry* command = command_queue;
    if (FADE_COMMAND == command->command) {
      current_R += (((int)(command->R) - current_R) * DELAY_MILLIS)/command->duration;
      current_G += (((int)(command->G) - current_G) * DELAY_MILLIS)/command->duration;
      current_B += (((int)(command->B) - current_B) * DELAY_MILLIS)/command->duration;
      for(uint16_t i = command->range_start; i <= command->range_end; i++) {
        strip.setPixelColor(i, strip.Color(current_R, current_G, current_B));
      }
      strip.show();
      if ((command->duration - DELAY_MILLIS) > 0) {
        command->duration = command->duration - DELAY_MILLIS;
      } else {
        // we are done
        delete(dequeueHead());
      }
    }
  }

                              uint8_t* B) {
  *start = 0;
  *end = 0;
  char* next = strtok(nullptr," ");
  *start = atoi(next);
  next = strtok(nullptr," ");
  *end = atoi(next);
