Перейти в хранилище документации
Обратиться в техническую поддержку
Для иллюстрации возможных областей применения скриптов на языке JScript ниже приведены примеры, которые могут использоваться для создания на основе объекта Скрипт дополнительных функций в системе.
Для корректной работы скрипта в ПК Интеллект предварительно должны быть созданы и настроены объекты: Детектор длины очереди (входит в состав пакета детекторов Detector Pack), Камера и Титрователь (ниже вместо символов N, M, L нужно подставить соответствующие номера Детектора длины очереди, Камеры и Титрователя).
//Считывание события по длине очереди if (Event.SourceType == "OCCUPANCY_COUNTER" && Event.SourceId == "N" && Event.Action == "OCCUPANCY") //N - Номер Детектора длины очереди { var n=Event.GetParam("occupancy"); //Отображение длины очереди через Титрователь в Мониторе DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры L - Номер Титрователя DoReactStr("CAM","M","ADD_SUBTITLES","command<Длина очереди: "+n+" чел.\r>,page<BEGIN>,title_id<L>"); //M, L - то же }
В результате при отображении соответствующей камеры в мониторе, на видеоизображение будет накладываться текстовое сообщение о текущей длине очереди.
Настройки шрифта, цвета и положения надписи настраиваются на панели настройки объекта Титрователь.
Примечание.
При использовании параметров page<BEGIN> и page<END> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам.
Для корректной работы скрипта в ПК Интеллект предварительно должны быть созданы и настроены объекты: Детектор подсчета посетителей (входит в состав пакета детекторов Detector Pack), Камера, Титрователь и Макрокоманда (ниже вместо символов N, M, L, P нужно подставить соответствующие номера Детектора подсчета посетителей, Камеры, Титрователя и Макрокоманды).
//Считывание события и подсчет вошедших посетителей if (Event.SourceType == "PEOPLE_COUNTER" && Event.SourceId == "N" && Event.Action == "IN") //N - Номер Детектора подсчета посетителей { i = Itv_var("counter_i"); k = Itv_var("counter_k"); i++; Itv_var("counter_i")=i; //Отображение количества посетителей через Титрователь в Мониторе DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры L - Номер Титрователя DoReactStr("CAM","M","ADD_SUBTITLES","command<Кол-во посетителей (вх./вых.): "+i+" / "+k+"\r>,page<BEGIN>,title_id<L>"); //M, L - то же } //Считывание события и подсчет вышедших посетителей if (Event.SourceType == "PEOPLE_COUNTER" && Event.SourceId == "N" && Event.Action == "OUT") //N - Номер Детектора подсчета посетителей { i = Itv_var("counter_i"); k = Itv_var("counter_k"); k++; Itv_var("counter_k")=k; //Отображение количества посетителей через Титрователь в Мониторе DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры L - Номер Титрователя DoReactStr("CAM","M","ADD_SUBTITLES","command<Кол-во посетителей (вх./вых.): "+i+" / "+k+"\r>,page<BEGIN>,title_id<L>"); //M, L - то же } //Обнуление счетчика по Макрокоманде (предварительно в Интеллекте должна быть создана Макрокоманда) if (Event.SourceType == "MACRO" && Event.SourceId == "P" && Event.Action == "RUN") //P - Номер Макрокоманды { Itv_var("counter_i")=0; Itv_var("counter_k")=0; i=0; k=0; //Отображение количества посетителей через Титрователь в Мониторе DoReactStr("CAM","M","CLEAR_SUBTITLES","title_id<L>"); //M - Номер Камеры L - Номер Титрователя DoReactStr("CAM","M","ADD_SUBTITLES","command<Кол-во посетителей (вх./вых.): "+i+" / "+k+"\r>,page<BEGIN>,title_id<L>"); //M, L - то же }
В результате при отображении соответствующей камеры в Мониторе, на видеоизображение будет накладываться текстовое сообщение о количестве вошедших и вышедших посетителей.
Примечание.
При использовании параметров page<BEGIN> и page<END> будут заполняться соответствующие поля в базе титров, что даст возможность производить поиск данных с помощью интерфейсного объекта Поиск по титрам.
Настройки шрифта, цвета и положения надписи настраиваются на панели настройки объекта Титрователь (см. раздел Настройка вывода титров поверх видеоизображения документа Руководство администратора).
Для обнуления счетчика посетителей предварительно на вкладе Программирование создается объект Макрокоманда, название которой можно для удобства изменить, например, на «Обнуление счетчика посетителей».
Макрокоманду обнуления можно запускать как вручную через главное меню ПК Интеллект, так и автоматически в любое заданное время (для этого используется таблица События на панели настройки объекта Макрокоманда, где необходимо указать предварительно настроенный объект Временная зона). Подробные сведения об использовании объектов Макрокоманда и Временная зона изложены в документе Руководство Администратора.
При добавлении объекта на карту имеется возможность выбрать способ отображения Текст (см. Руководство Администратора, раздел Прикрепление объектов к слою интерактивной карты). При этом для изменения отображаемого текста может использоваться скрипт на языке JScript.
Пример. Для объекта Камера 1 выбран способ отображения на карте Текст. Требуется по выполнении Макрокоманды 1 выводить на карте и в отладочном окне значение переменной MyVar, считанной из файла C:\test.ini.
if(Event.SourceType == "MACRO" && Event.Action == "RUN") { var result = parseInt(ReadIni("MyVar","C:\\test.ini")); result += 2; NotifyEventStr("CAM","1","ANALOG_PARAMS","text<Значение переменной = \n" + result + ">, blink_state<1>"); DebugLogString(result); }
Приведенный ниже пример работает только для камер, у которых в конфигурации создан пульт управления PTZ. При настройке Монитора видеонаблюдения следует для 10 кнопок джойстика выбрать действие Перейти в пресет с параметрами 1,2,3...,0 (см. Руководство по установке и настройке компонентов охранной системы, раздел Присваивание клавишам джойстика команд при помощи Монитора видеонаблюдения).
Пример. По нажатию на кнопку пульта отображать соответствующую камеру в активном мониторе. Скрипт должен срабатывать по таймеру с ID = 1.
Примечание.
После каждого нажатия кнопки на пульте управления необходимо ожидать нажатия следующей кнопки в течение 2 секунд. Если нажатия не произошло, то необходимо выводить на экран камеру с набранным номером.
if (Event.SourceType=="TIMER" && Event.SourceId=="1" && Event.Action=="TRIGGER") { mon="1"; DebugLogString("на монитор "+ Itv_var("cam")); DoReactStr("MONITOR",mon,"ACTIVATE_CAM","cam<"+Itv_var("cam")+">"); Itv_var("cam")=""; } if (Event.GetParam("source_type")=="TELEMETRY" && Event.GetParam("action")=="GO_PRESET") { DoReactStr("TIMER","1","START","bound<2>"); var key=Event.GetParam("param4_val"); DebugLogString("Key:"+key); Itv_var("cam")=Itv_var("cam")+key; DebugLogString(Itv_var("cam")); }
Пример. IP-адрес камеры 192.168.0.13.
Следующая команда позволяет включить стеклоочиститель на камере:
192.168.10.101/httpapi/SendPTZ?action=sendptz&PTZ_PRESETSET=85
Следующая команда выключает стеклоочиститель на камере:
192.168.10.101/httpapi/SendPTZ?action=sendptz&PTZ_PRESETSET=86
Необходимо отправлять данные команды камере при помощи скрипта на языке JScript.
function DoPreset(preset) { xmlhttp=new ActiveXObject("MSXML2.XMLHTTP"); if(xmlhttp == null) { return; } xmlhttp.open("GET", "http://192.168.0.13/httpapi/SendPTZ?action=sendptz&PTZ_PRESETSET="+preset, false,"admin","1234"); xmlhttp.send(); DebugLogString(xmlhttp.status); } if (Event.SourceType == "MACRO" && Event.SourceId == "6" && Event.Action == "RUN") { DoPreset("85"); } if (Event.SourceType == "MACRO" && Event.SourceId == "7" && Event.Action == "RUN") { DoPreset("86"); }
Если используется функция детекции предметов на видеоизображении (см. Руководство Администратора, раздел Создание и настройка объекта Трекер), то при просмотре архива обнаруженные оставленные предметы будут выделяться на видеоизображении рамкой. Для выделения оставленных предметов рамкой на живом видео необходимо использовать следующий скрипт, который предназначен для рисования рамки вокруг оставленного предмета при получении тревоги по детектору VMDA:
if (Event.SourceType=="CAM_VMDA_DETECTOR") { cam=GetObjectParentId("CAM_VMDA_DETECTOR",Event.SourceId,"CAM"); if (Event.Action=="ALARM") { var x1,x2,y1,y2; x1=Event.GetParam("x"); x2=Event.GetParam("w"); y1=Event.GetParam("y"); y2=Event.GetParam("h"); x2=parseInt(x1)+parseInt(x2); y2=parseInt(y1)+parseInt(y2); DoReactStr("MONITOR","","SET_MARKRECT","cam<"+cam+">,color<255>,id<"+cam+">,x1<"+x1+">,x2<"+x2+">,y1<"+y1+">,y2<"+y2+">"); DebugLogString("x1:"+x1+" x2:"+x2+" y1:"+y1+" y2:"+y2); } else { DoReactStr("MONITOR","","DEL_MARKRECT","cam<"+cam+">,id<"+cam+">"); } }
Требуется не переносить на резервный Сервер объекты с более чем одного основного Сервера. Для этого при переносе на резервный Сервер объектов с какого-либо основного Сервера необходимо отключать все остальные объекта Сервис отказоустойчивости на данном резервном Сервере.
if (Event.SourceType == "FAILOVER" ) { if (Event.Action == "START") {action="DISABLE";} if (Event.Action == "STOP") {action="ENABLE";} id=Event.SourceId; msg=CreateMsg(); msg.StringToMsg(GetObjectIds("FAILOVER")); var objCount=msg.GetParam("id.count"); for (i=0;i<objCount;i++) { pid=msg.GetParam("id."+i); if (!(id==pid)) { DoReactStr("FAILOVER",pid,action,"");} } }
По достижению количества посетителей 20 на встроенном детекторе подсчета посетителей IP-камеры Bosch FLEXIDOME IP dynamic 7000 VR (с идентификатором 1) вызывать макрокоманду 1.
n=20; if(Event.SourceType == "CAM_IP_DETECTOR" && Event.SourceId=="1" && Event.Action == "DETECTED") { v=Event.GetParam("param0").split(";")[1]; if (parseInt(v.split(":")[1])==n) { DoReactStr("MACRO","1","RUN",""); } }
По макрокоманде 1 отправлять сообщение с приложенными файлами detected.png и found.jpg из папки C:\\Pictures\\ на адрес example@gmail.com. Сообщение должно быть отформатировано следующим образом:
Обнаружено лицо
Обнаруженное лицо | Лицо в базе данных |
файл detected.png | файл found.jpg |
if(Event.SourceType == "MACRO" && Event.SourceId=="1" &&Event.Action=="RUN") { var file1 = "detected.png"; var file2 = "found.jpg"; var file_folder = "C:\\Pictures\\"; var test_event = CreateMsg(); test_event.StringToMsg("MAIL_MESSAGE|1|SEND_RAW|cc<>,to<danil@itv.ru>,objname<Почтовое сообщение 1>,subject<>,parent_id<1>,flags<>,pack<>,name<Почтовое сообщение 1>,from<example@gmail.com>,_marker<>"); test_event.SetParam("body","<html><body>\r\n<h3>Face found</h3>\r\n<table><tr>\r\n<td>Detected</td><td>Found in DB</td>\r\n</tr><tr>\r\n<td><img width='200' alt='image1' src='cid:" + file1 + "'/></td>\r\n<td><img width='200' alt='image2' src='cid:" + file2 + "'/></td>\r\n</tr><tr>\r\n<td>Сообщение отправлено из ПК Интеллект</td>\r\n</tr></table>\r\n</body></html>"); test_event.SetParam("attachments",file_folder+file1+";" + file_folder+file2); test_event.SetParam("is_body_html", 1); DoReact(test_event); }