 const char* CLEAR_AND_RANGE = "clear+range";
 const char* FADE = "fade";
 const char* CYCLE = "cycle";
+const char* FIRE = "fire";
 
 #define FADE_COMMAND 1
+#define FIRE_COMMAND 2
+
+#define FIRE_RED 255
+#define FIRE_GREEN 100
+#define FIRE_BLUE 10
 
 uint8_t current_R = 0;
 uint8_t current_G = 0;


#define LED_PIN D6
#define LED_TOPIC "house/led"
#define DELAY_MILLIS 50

WiFiClient wclient;
ESP8266WiFiGenericClass wifi;

    } else {
      delete command;
    }
  } else if (0 == strncmp(FIRE, messageBuffer.c_str(), strlen(FADE))) {
    CommandEntry* command = new CommandEntry;
    char* next = strtok((char*) messageBuffer.c_str()," ");

    next = strtok(nullptr," ");
    command->duration = atoi(next); 
    if (command->duration < 0) {
      Serial.println("Invalid duration"); 
      delete command;
      return;
    }

    // max dip for green for flicker
    next = strtok(nullptr," ");
    command->G = atoi(next);
    if ((command->G < 0) || (command->G > 100)) {
      Serial.println("Invalid Green dip"); 
      delete command;
      return;
    }

    // max brightness dip
    next = strtok(nullptr," ");
    command->B = atoi(next);  
    if ((command->B < 0) || (command->B > 100)) {
      Serial.println("Invalid Brightness dip"); 
      delete command;
      return;
    }
    
    if (extractRange(&command->range_start, 
                     &command->range_end, 
                     strip.numPixels())) {
      command->command = FIRE_COMMAND;
      command->next_command = nullptr;
      clearQueue();
      enqueueCommand(command);
      Serial.println("Fire enqueued");
    } else {
      delete command;
    }
  } else if (0 == strcmp(messageBuffer.c_str(), OFF)) {
    clearQueue();
    for(uint16_t i=0; i <strip.numPixels(); i++) {
