/// <summary>
        /// Метод повторной смены маски детекции
        /// </summary>
        public static async Task <string> ChangeDetectionMaskFromBody([FromBody] DetectionData.GridFromDB data)
        {
            _logger.Info("[ChangeDetectionMaskFromBody] Method started");

            byte[]        hexValues = { 8, 4, 2, 1 };   // Значения для конвертирования входящей маски в понятный для камеры вид
            StringBuilder gridMap   = new();            // объявление итоговой маски для камеры

            try
            {
                var splittedArray = data.dbGridMap.Split(22); // Маска поступает из 396 значений, разделить их на многомерный массив по 22 значения
                var sum           = 0;                        // сумма значений в массиве на основе hexValues
                foreach (var value in splittedArray)          // Выбрать получившиеся массивы разделённые по 22 значения
                {
                    foreach (var value2 in value.Split(4))    // раделить полученные ранее массивы по 22 элемента - ещё по 4
                    {
                        for (var i = 0; i < value2.Length; i++)
                        {
                            if ((int)char.GetNumericValue(value2[i]) == 1)           // строку конвертим в charArray, и извлекаем из него int значение. Если пришедшее значение = 1(ячейка активирована)
                            {
                                sum += hexValues[i];                                 // ..то извлекаем значение из hexValues и находим сумму значений многомерного массива(4 значения)
                            }
                            else
                            {
                                sum += 0;                                 // Если значение 0, то оставляем сумму без изменений
                            }
                        }
                        gridMap.Append(sum.ToString("x")); // Конвертируем итоговую сумму первого многомерного массива в 16-ричную систему и помещаем в конец StringBuilder
                        sum = 0;                           //сбрасываем результат предыдущих вычислений
                    }
                }

                var objData = new DetectionData.MotionDetectionLayout
                {
                    sensitivityLevel = 60,
                    layout           = new DetectionData.Layout
                    {
                        gridMap = gridMap.ToString()
                    }
                };

                using var xmlData = Converters.ToStringContent(objData, "MotionDetectionGridLayout");
                var response = await WebClient.Client.PutAsync("System/Video/inputs/channels/1/motionDetection/layout/gridLayout", xmlData).Result.Content.ReadAsStringAsync();

                var jsonResponse = Converters.XmlToJson(response);
                var responseData = JsonConvert.DeserializeObject <CamResponses>(jsonResponse);

                _logger.Info("[ChangeDetectionMaskFromBody] Method has complete");
                return($"{responseData.responseStatus.StatusString,-5} Request url {responseData.responseStatus.RequestUrl}");
            }
            catch (Exception e)
            {
                _logger.Error($"[ChangeDetectionMaskFromBody] Method failed. \nError message: {e.Message}");
                return(e.Message);
            }
        }
Exemple #2
0
        public async Task <string> ChangeDetectionMaskFromBody([FromBody] DetectionData.GridFromDB data)
        {
            var authStatus = CheckClient(data.id, out string rtspIp);

            switch (authStatus)
            {
            case 200:
            {
                _logger.Info("[ChangeDetectionMaskFromBody] Auth status 200");

                var response = await PutRequests.ChangeDetectionMaskFromBody(data);

                _logger.Info("[ChangeDetectionMaskFromBody] Configuration is complete. \nMethod has completed");
                return(response);
            }

            case 401:
            {
                _logger.Info("[ChangeDetectionMaskFromBody] Auth status 401. Unauthorized. \nMethod has completed");
                return(null);
            }

            case 404:
            {
                _logger.Info("[ChangeDetectionMaskFromBody] Auth status 404. Device not supported. \nMethod has completed");
                return(null);
            }

            case 601:
            {
                _logger.Info("[ChangeDetectionMaskFromBody] Status 601. Rtsp_ip is null. \nMethod has completed");
                return(null);
            }

            default:
            {
                _logger.Info($"[ChangeDetectionMaskFromBody] Auth status {authStatus}. Default error. \nMethod has completed");
                return(null);
            }
            }
        }