 ExponentialFilter efTemp = ExponentialFilter(FACTOR_TEMP);
 SmoothSensorData smooth;
 
-// Temperature trigger values
-const float TEMP_VALUE_FREEZE  =  5.0;
-const float TEMP_VALUE_COLD    = 20.0;
-const float TEMP_VALUE_NORMAL  = 24.0;
-const float TEMP_VALUE_WARM    = 28.0;
+// Temperature processing parameters
 const float TEMP_VALUE_MARGIN  =  0.5;    // Temperature hysteresis in centigrades
 const float TEMP_TREND_MARGIN  =  0.01;   // Trend hysteresis in centigrades per minute
-
-// Temperature statuses
-const unsigned char TEMP_STATUS_FREEZE = 1;
-const unsigned char TEMP_STATUS_COLD   = 2;
-const unsigned char TEMP_STATUS_NORMAL = 3;
-const unsigned char TEMP_STATUS_WARM   = 4;
-const unsigned char TEMP_STATUS_HOT    = 5;
+const float TEMP_BUCKET[] = {0.0, 5.0, 20.0, 24.0, 28.0};
+const char* TEMP_STATUS[] = {"unknown", "Freeze", "Cold", "Normal", "Warm", "Hot"};
 
 void setup()
 {

#ifdef BLYNK_NOTIFY_TEMP
        if (tempStatus != tempStatusOld && fabs(tempValue - tempValueOld) > TEMP_VALUE_MARGIN)
        {
            String txtStatus;
            switch (tempStatus)
            {
                case TEMP_STATUS_FREEZE:
                    txtStatus = String("Freeze");
                    break;
                case TEMP_STATUS_COLD:
                    txtStatus = String("Cold");
                    break;
                case TEMP_STATUS_NORMAL:
                    txtStatus = String("Normal");
                    break;
                case TEMP_STATUS_WARM:
                    txtStatus = String("Warm");
                    break;
                case TEMP_STATUS_HOT:
                    txtStatus = String("Hot");
                    break;
            }
            Blynk.notify(BLYNK_LABEL_PREFIX + BLYNK_LABEL_GLUE + BLYNK_LABEL_TEMP + BLYNK_LABEL_GLUE + txtStatus);
            tempStatusOld = tempStatus;
        }
#endif

            case 1:
                publishSuccess = Particle.publish("Temperature/Trend", String::format("%4.1f/%4.3f", tempValue, tempTrend));
                break;

            case 2:
                publishSuccess = Particle.publish("Status", String(TEMP_STATUS[tempStatus]));
                break;
        }
        if (publishSuccess)
        {
