public async Task <IActionResult> TurnOff(int id) { var powerSwitch = jsonDatabaseService.PowerSwitches.FirstOrDefault(ps => ps.ID == id); if (powerSwitch == null) { logger.LogError($"PowerSwitchAPI.TurnOff: No power switch found with ID '{id}'."); return(Ok(new ChangeStatusModel { IsOn = false, Result = false })); } ChangeStatusModel model = new ChangeStatusModel(); try { var arguments = new ActionExecutionArguments(powerSwitch, new Device[] { powerSwitch }, serviceProvider); StateAction stateAction = new StateAction { Devices = new int[] { powerSwitch.ID }, State = Entities.Enums.DeviceState.Off }; await stateAction.Execute(arguments); logger.LogInformation($"PowerSwitchAPI.TurnOff: Successfully turned power switch OFF with ID '{id}'."); model.IsOn = false; model.Result = true; } catch { logger.LogError($"PowerSwitchAPI.TurnOff: Failed to turn power switch OFF with ID '{id}'."); } return(Ok(model)); }
public async Task Execute(int actionId, IEntity source) { var action = memoryEntitiesService.Actions.FirstOrDefault(a => a.ID == actionId); if (action == null) { logger.LogError($"Action.Execute :: {actionId} :: Status:NotFound"); return; } if (action.Disabled) { logger.LogInformation($"Action.Execute :: {actionId} :: Status:Disabled"); return; } bool meetConditions = await evaluateConditionService.MeetConditions(action, action.Conditions); if (!meetConditions) { logger.LogInformation($"Action.Execute :: {actionId} :: Status:ConditionsNotMet"); return; } var devices = new List <Device>(action.Devices?.Length ?? 0); if (action.Devices != null) { foreach (int deviceId in action.Devices) { var device = memoryEntitiesService.Devices.FirstOrDefault(d => d.ID == deviceId); devices.Add(device); } } logger.LogInformation($"Action.Execute :: {actionId} :: Source:{source.ToSourceString()}, Devices:{string.Join(',', devices.Select(x => x.ID))}"); try { var arguments = new ActionExecutionArguments(source, devices, serviceProvider); await action.Execute(arguments); } catch (Exception ex) { logger.LogError(ex, $"Action.Execute :: {actionId} :: Error:{ex.Message}"); } }