public IActionResult UpdateDeviceSchedule([FromBody] DeviceSchedule deviceSchedule)
 {
     try
     {
         _logger.LogInformation($"POST /v1/Device/Update called");
         var updatedDeviceSchedule = _aquariumService.UpdateDeviceSchedule(deviceSchedule);
         return(new OkObjectResult(updatedDeviceSchedule));
     }
     catch (Exception ex)
     {
         _logger.LogError($"POST /v1/Schedule/Update endpoint caught exception: { ex.Message } Details: { ex.ToString() }");
         return(NotFound());
     }
 }
        public IActionResult AddDeviceSchedule([FromBody] DeviceSchedule deviceSchedule)
        {
            try
            {
                deviceSchedule.AuthorId = _accountService.GetCurrentUserId();

                _logger.LogInformation($"POST /v1/Schedule/Add called");
                var newDeviceSchedule = _aquariumService.AddDeviceSchedule(deviceSchedule);
                return(CreatedAtAction(nameof(UpdateDeviceSchedule), new { id = newDeviceSchedule.Id }, newDeviceSchedule));
            }
            catch (Exception ex)
            {
                _logger.LogError($"POST /v1/Device/Add endpoint caught exception: { ex.Message } Details: { ex.ToString() }");
                return(NotFound());
            }
        }
Esempio n. 3
0
    public void GivenSchedule_ExpandSchedule_CreatesExpandedTasks()
    {
        DeviceSchedule schedule = new DeviceSchedule()
        {
            Tasks = new List <DeviceScheduleTask>()
            {
                new DeviceScheduleTask()
                {
                    TaskId    = ScheduleTaskTypes.Snapshot,
                    Interval  = 20,
                    StartTime = DateTime.Now
                }
            }
        };

        var scheduledTasks = schedule.ExpandTasks();

        Assert.Equal(24 * 3, scheduledTasks.Count);
    }
Esempio n. 4
0
        public DeviceSchedule UpdateDeviceSchedule(DeviceSchedule deviceSchedule)
        {
            var updatedSchedule = _aquariumDao.UpdateDeviceSchedule(deviceSchedule);


            var affectedDevices = _aquariumDao.GetDevicesInUseBySchedule(updatedSchedule.Id);

            affectedDevices.ForEach(device =>
            {
                try
                {
                    var d = _aquariumDao.GetAquariumDeviceById(device.Id);
                    _deviceClient.Configure(d);
                    _deviceClient.ApplyUpdatedDevice(d);
                }
                catch (Exception e)
                {
                    //todo could not update schedule assignment (pi is offline maybe)
                }
            });
            return(updatedSchedule);
        }
Esempio n. 5
0
        public ActionResult EditStatus(string macaddress, int status, string start = null, string end = null)
        {
            DeviceSchedule schedule = null;

            if (status == 2)
            {
                var startSuccess = DateTime.TryParseExact(start, "H:mm:ss", null, System.Globalization.DateTimeStyles.None, out var startTime);
                var endSuccess   = DateTime.TryParseExact(end, "H:mm:ss", null, System.Globalization.DateTimeStyles.None, out var endTime);

                if (!startSuccess || !endSuccess)
                {
                    TempData["error"] = "Invalid start or end time format (must have format H:mm:ss).";
                    return(RedirectToAction("Index"));
                }
                else if ((endTime - startTime).TotalMinutes % TimeSpan.FromHours(24).TotalMinutes < 1)
                {
                    TempData["error"] = "The range from start time to end time must be greater than 1 minute.";
                    return(RedirectToAction("Index"));
                }
                else
                {
                    schedule = new DeviceSchedule()
                    {
                        StartTime = startTime.ToString("HH:mm:ss"),
                        EndTime   = endTime.ToString("HH:mm:ss")
                    };
                }
            }

            var repo   = new TempRepo();
            var device = repo.GetDevice(d => d.MacAddress, macaddress).Result;

            if (device.UserId == Session["UID"] as int?)
            {
                repo.UpdateDeviceStatus("mac_address", macaddress, status, schedule).Wait();
            }

            return(RedirectToAction("Index"));
        }
Esempio n. 6
0
 public DeviceSchedule AddDeviceSchedule(DeviceSchedule deviceSchedule)
 {
     return(_aquariumDao.AddDeviceSchedule(deviceSchedule));
 }
Esempio n. 7
0
        public async Task UpdateDeviceStatus(string searchCol, string searchVal, int status, DeviceSchedule schedule = null)
        {
            await _connection.OpenAsync();

            using (var cmd = _connection.CreateCommand())
            {
                cmd.CommandText = "UPDATE Devices SET status = @status, schedule = @schedule WHERE " + searchCol + " = @searchVal";
                cmd.Parameters.AddWithValue("@status", status);
                cmd.Parameters.AddWithValue("@schedule", schedule == null ? null : JsonConvert.SerializeObject(schedule));
                cmd.Parameters.AddWithValue("@searchVal", searchVal);
                await cmd.ExecuteNonQueryAsync();
            }

            await _connection.CloseAsync();
        }