Документация для версии Мониторинг 11.0. Документация на другие версии также доступна.

Предыдущая страница Пример скрипта для настройки взаимодействия ПК Мониторинг с ОПС Rovalant (A6, A16)  Пример скрипта для определения текущего состояния реле на стороне Агента Контроля Следующая страница

Данный скрипт определяет текущее состояние зон на стороне Агента Контроля со сконфигрурированной ОПС 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);
}
  • No labels