Получение скриншота (фото) с камеры из 1С. Управляемые формы

Обработки - Универсальные обработки

Получение и вывод на управляемую форму фото с IP камер видео наблюдения.

После получения задания от руководства при определенных действиях получать и хранить фото с камер видео наблюдения, решил обратиться к гуглу, но после продолжительного поиска информации по русскоязычным ресурсам наткнулся на старые и уже не актуальные форумы. Решения были найдены на англоязычных форумах и других языках (в основном питон).

В данной обработке присутствует пример получения фото с камер Hikvision , Dahua и получение фото с ПО TRASSIR (по их словам любую камеру можно к ним подключить).

Камеры Dahua используют Дайджест-аутентификация (Digest), в обработке показано, как с ней работать из 1С.

Ниже привожу пример для TRASSIR 

ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); //для получения Джейсона
    Соединение = Неопределено;
    Попытка
        ssl = Новый ЗащищенноеСоединениеOpenSSL(Неопределено,Неопределено);
        Соединение = Новый HTTPСоединение(ИПТрассир,ПортТрассир,,,,,ssl); //ИП и Порт Вашей камеры
    Исключение
        Соединение = Неопределено;    
    КонецПопытки;
    Результат =  Соединение.Получить("/login?password="+ПарольТрассир,ИмяВременногоФайла); //необходимо передать ТОЛЬКО пароль от камеры в ответ прийдет джейсон
    //в котором будет наш ид на текущую сессию
    ЧтениеДжейсон = Новый ЧтениеJSON();
    ЧтениеДжейсон.ОткрытьФайл(ИмяВременногоФайла,"UTF8");
    Текст = ПрочитатьJSON(ЧтениеДжейсон,Истина);
    
    Для Каждого Стр Из Текст Цикл
        
        Если Стр.Ключ = "sid" Тогда
            ИДСессии = Стр.Значение;
            Прервать;
        КонецЕсли;
        
    КонецЦикла;   
    
    ЧтениеДжейсон.Закрыть();    
    УдалитьФайлы(ИмяВременногоФайла); //удалим файл что бы не захламлять

      ИмяВременногоФайла = ПолучитьИмяВременногоФайла("txt"); 
        
        Результат =  Соединение.Получить("/objects/?sid=" + ИДСессии,ИмяВременногоФайла);  //нам прийдет имена всех подключенных камер 
        
        ЧтениеДжейсон = Новый ЧтениеJSON();
        ЧтениеДжейсон.ОткрытьФайл(ИмяВременногоФайла,"UTF8");
        Текст = ПрочитатьJSON(ЧтениеДжейсон,Истина);
        
        Для Каждого Стр Из Текст Цикл
            НоваяСтрока = ТаблицаКамер.Добавить();//ТаблицаКамер ТЧ на форме
            НоваяСтрока.ИмяКамеры = Стр.Получить("guid");
            НоваяСтрока.НазваниеКамеры = Стр.Получить("name");     
        КонецЦикла;  
        
        ЧтениеДжейсон.Закрыть();
        УдалитьФайлы(ИмяВременногоФайла);

///////

//После получения выбираем наше имя камеры

        ИмяВременногоФайлаКартини = ПолучитьИмяВременногоФайла("jpeg");
        
        Результат =  Соединение.Получить("/screenshot/" + Элементы.ТаблицаКамер.ТекущиеДанные.ИмяКамеры + "?timestamp=0&sid=" + ИДСессии ,ИмяВременногоФайлаКартини);  
        
        // и размещение ее на форме:
        Описание = Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайлаКартини, "");
        ПомещаемыеФайлы = Новый Массив;
        ПомещенныеФайлы = Новый Массив;
        
        ПомещаемыеФайлы.Добавить(Описание);    
        ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы,,Ложь);
        ЭтаФорма.КартинкаТрассер = ПомещенныеФайлы[0].Хранение;
        
        УдалитьФайлы(ИмяВременногоФайлаКартини);

 

Интерфейс обработки интуитивно понятен. Присутствуют 3 вкладки для каждой камеры. Необходимо заполнить параметрами и нажать кнопку "Выполнить запрос".

Особенность камер ХикВизион: если камера находится с Вами в одной сети, порт указывать необязательно.

Разработка проводилась на платформе 1С:Предприятие 8.3 (8.3.11.2867).

Работоспособность проверено на конфигурации 1С:CRM для Украины, редакция 2.0 (2.0.13.3).

Скачать файлы

Наименование Файл Версия Размер
: ФотоСКамер
.epf 10,07Kb
20.04.18
0
.epf 1.0.0 10,07Kb Скачать

См. также

Комментарии
2. Виктор Назаров (androgin) 21.04.18 16:28 Сейчас в теме
Уже можно не использовать временные файлы для получения ответа от соединения.
Пример:
Запрос = Новый HTTPЗапрос;
Запрос.АдресРесурса = Настройка_АдресСкрипта;
Запрос.УстановитьТелоИзСтроки(ТелоЗапроса);
Ответ = Соединение.ОтправитьДляОбработки(Запрос);
ТелоОтвета = Ответ.ПолучитьТелоКакСтроку();
3. Александр Авг (harvester_sorrow) 5 21.04.18 17:00 Сейчас в теме
(2) Спасибо за информацию, на момент написания обработки, к сожалению не знал об этом, в будущем учту

(2)
5. Виктор Назаров (androgin) 22.04.18 02:31 Сейчас в теме
(3)
Текст = ПрочитатьJSON(ЧтениеДжейсон,Истина);
Для Каждого Стр Из Текст Цикл
......


какой объект в Текст?
7. Александр Авг (harvester_sorrow) 5 22.04.18 09:44 Сейчас в теме
(5) Насколько я помню структуру,но более точно смогу в понедельник сказать если интересно.
9. Виктор Назаров (androgin) 22.04.18 14:59 Сейчас в теме
(7) да, интересно ))
хочу узнать зачем вы циклом ключ ищете)))
10. Александр Авг (harvester_sorrow) 5 23.04.18 09:05 Сейчас в теме
(9)Прошу прощения, запамятовал, там приходит соответствие, а внутри еще ряд соответствий, в которых хранятся значения.
6. Виктор Назаров (androgin) 22.04.18 02:48 Сейчас в теме
(3)
Описание = Новый ОписаниеПередаваемогоФайла(ИмяВременногоФайлаКартини, "");
ПомещаемыеФайлы = Новый Массив;
ПомещенныеФайлы = Новый Массив;
        
ПомещаемыеФайлы.Добавить(Описание);    
ПоместитьФайлы(ПомещаемыеФайлы, ПомещенныеФайлы,,Ложь);

ЭтаФорма.КартинкаТрассер = ПомещенныеФайлы[0].Хранение;
Показать

Это можно заменить этим:
Хранение = ПоместитьВоВременноеХранилище(Новый ДвоичныеДанные(ИмяВременногоФайлаКартини), Новый УникальныйИдентификатор);
ЭтаФорма.КартинкаТрассер = Хранение;
8. Александр Авг (harvester_sorrow) 5 22.04.18 09:47 Сейчас в теме
(6) можно,не спорю.Также сразу можно избавиться от модальности используя НачатьПомещенияФайла.
В данном примере показан пример работы с камерой, но за критику спасибо,всегда полезно узнать что то новое)
Оставьте свое сообщение