public override Task Execute(IActionExecutionArguments arguments) { List <Task> sendCommandTasks = new(arguments.Devices.Count()); foreach (var device in arguments.Devices) { if (device.Source == DeviceSource.Telldus) { var telldusAPIService = arguments.GetService <ITelldusAPIService>(); var command = telldusAPIService.ConvertStateToCommand(State); if (command.HasValue) { var task = telldusAPIService.SendCommand(int.Parse(device.SourceID), command.Value); sendCommandTasks.Add(task); } } if (device.Source == DeviceSource.ZWave) { var zwaveAPIService = arguments.GetService <IZWaveAPIService>(); ZWaveCommandClass?command = zwaveAPIService.ConvertStateToCommand(State, out object parameter); if (command.HasValue) { var task = zwaveAPIService.SendCommand(byte.Parse(device.SourceID), command.Value, parameter); sendCommandTasks.Add(task); } } } return(Task.WhenAll(sendCommandTasks)); }
protected string GetProcessedMessage(IActionExecutionArguments arguments) { string deviceString = string.Join(", ", arguments.Devices.Select(d => d.Name)); string message = Message.Replace("{devices}", deviceString); message = message.Replace("{source}", arguments.Source.ToSourceString()); message = message.Replace("{now}", DateTime.Now.ToString()); return(message); }
public override async Task Execute(IActionExecutionArguments arguments) { using (WebClient webClient = new WebClient()) { foreach (var device in arguments.Devices.OfType <CameraDevice>()) { try { byte[] imageBytes = await webClient.DownloadDataTaskAsync(device.URL); await arguments.GetService <INotificationService>().SendToSlack(Channel, GetProcessedMessage(arguments), imageBytes, $"snapshot_{DateTime.Now.ToString("yyyy-MM-dd HHmm")}.jpg", "jpg"); } catch (Exception ex) { arguments.GetService <ILogger <SnapshotAction> >().LogError(ex, $"Failed to take snapshot for device ID {device.ID}."); } } } }
public override Task Execute(IActionExecutionArguments arguments) { var notificationService = arguments.GetService <INotificationService>(); return(notificationService.SendToSlack(Channel, GetProcessedMessage(arguments))); }
public abstract Task Execute(IActionExecutionArguments arguments);