public async Task <string> DeviceRequestCommandCustomViewModule(CustomViewModuleRequest customViewModuleRequest)
        {
            //identify device
            object deviceRequested = ConvertCustomViewModuleResquestToObject(customViewModuleRequest);

            if (deviceRequested == null)
            {
                return(FormatterSpeechResponse_CustomViewModule(customViewModuleRequest, $"I'm sorry, {customViewModuleRequest.IdDevice} was not found", false));
            }

            string jsonReturn = string.Empty;

            if (deviceRequested is SonoffDualR2)
            {
                //TODO: use pattern matching
                SonoffDualR2 sonoffRequest = ((SonoffDualR2)deviceRequested);
                if (ValidIdDeviceRequested(sonoffRequest.IdDevice))
                {
                    switch (sonoffRequest.SonoffModelEnum)
                    {
                    case DeviceEnum.SonoffDualR2:
                        jsonReturn = await SonoffDualR2ExecuteCommand(sonoffRequest);

                        return(FormatterSpeechResponse_CustomViewModule(customViewModuleRequest, jsonReturn, true));

                    default:
                        break;
                    }
                }
            }
            return(FormatterSpeechResponse_CustomViewModule(customViewModuleRequest, $"I'm sorry, {customViewModuleRequest.IdDevice} was not found", false));
        }
        private object ConvertCustomViewModuleResquestToObject(CustomViewModuleRequest customViewModuleRequest)
        {
            var device = GetInformationDeviceById(customViewModuleRequest);

            if (device == null || device.Count() <= 0)
            {
                return(null);
            }

            var objectType = device.Where(x => x.Key.Equals("ModelDevice")).Select(y => y.Value).FirstOrDefault();

            //TODO: valid objectType (!=null)

            //VALID DEVICE AND OBJECTTYPE
            switch ((DeviceEnum)Enum.Parse(typeof(DeviceEnum), objectType, true))
            {
            case DeviceEnum.SonoffDualR2:
            {
                int _channel = 1;        //by default we use channel 1 (if is not mentioned in the object in appsettings.json
                int.TryParse(device.Where(x => x.Key.Equals("Channel")).Select(y => y.Value).FirstOrDefault(), out _channel);

                return(new SonoffDualR2()
                    {
                        IdDevice = device.Where(x => x.Key.Equals("IP_Address")).Select(y => y.Value).FirstOrDefault(),
                        SonoffChannel = _channel,
                        SonoffRequestCommandEnum = ConvertStringCmdToSonoffRequestCommandEnum(customViewModuleRequest.Command)
                    });
            }

            default:
                return(null);
            }
        }
 public async Task <JsonResult> DeviceRequestCommandCustomViewModule(CustomViewModuleRequest customViewModuleRequest)
 {
     //TODO (validate command)
     if (customViewModuleRequest.IdDevice == null || string.IsNullOrEmpty(customViewModuleRequest.IdDevice))
     {
         return(await FormatResposeCustomViewModule("I'm sorry, but I didn't find the device"));
     }
     return(await FormatResposeCustomViewModule(await service.DeviceRequestCommandCustomViewModule(customViewModuleRequest)));
 }
        private string FormatterSpeechResponse_CustomViewModule(CustomViewModuleRequest customViewModuleRequest, string response, bool trimResponse)
        {
            if (!trimResponse)
            {
                return(response);
            }

            response = response.Replace("\"", "").Replace("\\", "").Replace("}", "").Split(":")[1].ToLower();
            return($"{customViewModuleRequest.IdDevice} was turned {response}");
        }
 private IEnumerable <IConfigurationSection> GetInformationDeviceById(CustomViewModuleRequest customViewModuleRequest)
 {
     return(repository.GetInformationDeviceById(customViewModuleRequest.IdDevice));
 }