Перейти в хранилище документации
Обратиться в техническую поддержку
Данный скрипт определяет текущее состояние зон на стороне Агента Контроля со сконфигрурированной ОПС ROVALANT (A6, A16) и при получении события GET_OBJECT_STATE генерирует событие OBJECT_STATE_INFO. Настройка зон и привязка к соответствующим шлейфам осуществляется при настройке модуля интеграции ROVALANT (A6, A16).
Примечание
function GetStateByCounts(armedCount, disarmedCount) { /* Если имеются зоны на охране и не на охране, то считаем что постановка на охрану выполнена частично */ if(armedCount > 0 && disarmedCount > 0) { return "PART_ARMED"; } /* Если имеются только зоны на охране, то считаем что контроллер на охране */ else if(armedCount > 0) { return "ARMED"; } /* Считаем, что контроллер не на охране */ return "DISARMED" } function ZoneIsUsed(params, id) { var count = params.GetParam("TABLE.zone.count"); var number = GetObjectParam("ROVALANT_ZONE", id, "number"); var i; for(i=0; i < count; ++i) { if(params.GetParam("TABLE.zone." + i) == number) { return "true"; } } return "false"; } function GetControllerState(id, zones) { /* Получаем настройки контроллера*/ var params = CreateMsg(); params.StringToMsg(GetObjectParams("ROVALANT_DEVICE", id)); /* Получаем количество зон используемых контроллером */ var count = params.GetParam("TABLE.zone.count"); /* Если контроллер использует зоны */ if(count > 0) { /* Количество зон на охране и не на охране */ var armedCount = 0; var disarmedCount = 0; var zoneCount = zones.GetParam("id.count"); var j; for(j = 0; j < zoneCount; ++j) { /* Определяем является ли зона принадлежной к текущему контроллеру и определяем используется ли данная зона текущим контроллером */ var zone = zones.GetParam("id."+j); if(GetObjectParentId("ROVALANT_ZONE", zone, "ROVALANT_DEVICE") == id && ZoneIsUsed(params, zone) == "true") { /* Проверяем состояние зоны */ var state = GetObjectState("ROVALANT_ZONE", zone); switch(state) { case "ARMED": case "ALARM_ARMED": case "TROUBLE_ARMED": armedCount++; break; case "DISARMED": case "TROUBLE_DISARMED": disarmedCount++; break; } } } } /* Определяем состояние объекта */ return GetStateByCounts(armedCount, disarmedCount, msg); } function GetSkdStateMsg(type, id, action) { var devices = CreateMsg(); devices.StringToMsg(GetObjectIds("ROVALANT_DEVICE")); var count = devices.GetParam("id.count"); var zones = CreateMsg(); zones.StringToMsg(GetObjectIds("ROVALANT_ZONE")); /* Количество зон на охране и не на охране */ var armedCount = 0; var disarmedCount = 0; var i; for(i = 0; i < count; ++i) { var device = devices.GetParam("id."+i); var state = GetControllerState(device, zones); switch(state) { case "PART_ARMED": disarmedCount++; case "ARMED": armedCount++; break; case "DISARMED": disarmedCount++; break; } } var msg = CreateMsg(); msg.SourceType = type; msg.SourceId = id; msg.Action = action; msg.SetParam("state", GetStateByCounts(armedCount, disarmedCount)); msg.SetParam("card", ""); return msg; } if(Event.SourceType == "VIDEOSRV_C" && Event.Action == "GET_OBJECT_STATE") { NotifyEvent(GetSkdStateMsg(Event.SourceType, Event.SourceId, "OBJECT_STATE_INFO")); } else if(Event.SourceType == "ROVALANT_DEVICE" && (Event.Action == "A06_CLOSE" || Event.Action == "A16_CLOSE" || Event.Action == "A06_OPEN" || Event.Action == "A16_OPEN" || Event.Action == "A06_POLICE" || Event.Action == "A16_POLICE" || Event.Action == "A06_ELECTRIC" || Event.Action == "A16_ELECTRIC" || Event.Action == "A06_ENTRY" || Event.Action == "A16_ENTRY")) { var card = Event.GetParam("key_code"); var msg = GetSkdStateMsg("VIDEOSRV_C", "1", "OBJECT_STATE_INFO"); msg.SetParam("card", card); NotifyEvent(msg); }