public static string Update(HttpListenerContext context)
            {
                string response = null;

                try
                {
                    lock (_lock)
                    {
                        using (var reader = new StreamReader(context.Request.InputStream))
                        {
                            var body = reader.ReadToEnd();

                            string json = HTTP.GetPostValue(body, "devices");
                            if (!string.IsNullOrEmpty(json))
                            {
                                var devices = JSON.ToType <List <API.Data.DeviceInfo> >(json);
                                if (devices != null && devices.Count > 0)
                                {
                                    // Load backup data on first pass
                                    if (first)
                                    {
                                        var backupInfos = Backup.Load(devices.ToArray());
                                        if (backupInfos != null && backupInfos.Count > 0)
                                        {
                                            DeviceInfos.AddRange(backupInfos);
                                        }
                                    }

                                    foreach (var device in devices)
                                    {
                                        int i = DeviceInfos.FindIndex(o => o.UniqueId == device.UniqueId);
                                        if (i < 0)
                                        {
                                            DeviceInfos.Add(device);
                                            i = DeviceInfos.FindIndex(o => o.UniqueId == device.UniqueId);
                                        }

                                        var info = DeviceInfos[i];

                                        object obj = null;

                                        obj = device.GetClass("status");
                                        if (obj != null)
                                        {
                                            info.AddClass("status", obj);
                                        }

                                        obj = device.GetClass("controller");
                                        if (obj != null)
                                        {
                                            info.AddClass("controller", obj);
                                        }

                                        // Get HourInfos for current day
                                        List <API.Data.HourInfo> hours = null;
                                        obj = info.GetClass("hours");
                                        if (obj != null)
                                        {
                                            info.RemoveClass("hours");
                                            hours = (List <API.Data.HourInfo>)obj;
                                        }

                                        // Add new HourInfo objects and then combine them into the current list
                                        obj = device.GetClass("hours");
                                        if (obj != null)
                                        {
                                            if (hours == null)
                                            {
                                                hours = new List <API.Data.HourInfo>();
                                            }

                                            hours.AddRange((List <API.Data.HourInfo>)obj);
                                        }

                                        if (hours != null)
                                        {
                                            DateTime d    = DateTime.Now;
                                            DateTime from = new DateTime(d.Year, d.Month, d.Day, 0, 0, 0, DateTimeKind.Local);
                                            DateTime to   = from.AddDays(1);

                                            hours = hours.FindAll(o => TestHourDate(o, from, to));
                                            hours = API.Data.HourInfo.CombineHours(hours);

                                            // Add Hours
                                            info.AddClass("hours", hours);

                                            // Add OEE
                                            var oee = API.Data.HourInfo.GetOeeInfo(hours);
                                            if (oee != null)
                                            {
                                                info.AddClass("oee", oee);
                                            }

                                            // Add Timers
                                            var timers = new API.Data.TimersInfo();
                                            timers.Total = hours.Select(o => o.PlannedProductionTime).Sum();

                                            timers.Active = hours.Select(o => o.Active).Sum();
                                            timers.Idle   = hours.Select(o => o.Idle).Sum();
                                            timers.Alert  = hours.Select(o => o.Alert).Sum();

                                            timers.Production         = hours.Select(o => o.Production).Sum();
                                            timers.Setup              = hours.Select(o => o.Setup).Sum();
                                            timers.Teardown           = hours.Select(o => o.Teardown).Sum();
                                            timers.Maintenance        = hours.Select(o => o.Maintenance).Sum();
                                            timers.ProcessDevelopment = hours.Select(o => o.ProcessDevelopment).Sum();

                                            info.AddClass("timers", timers);

                                            response = "Devices Updated Successfully";
                                        }
                                    }

                                    first = false;
                                }
                            }
                        }
                    }
                }
                catch (Exception ex) { logger.Error(ex); }

                return(response);
            }