Example #1
0
        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));
        }
Example #2
0
        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);
        }
Example #3
0
        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}.");
                    }
                }
            }
        }
Example #4
0
        public override Task Execute(IActionExecutionArguments arguments)
        {
            var notificationService = arguments.GetService <INotificationService>();

            return(notificationService.SendToSlack(Channel, GetProcessedMessage(arguments)));
        }
Example #5
0
 public abstract Task Execute(IActionExecutionArguments arguments);