партнерский раздел
ФорумЭксплуатацияИспользование модуля интеграции

Эксплуатация » Использование модуля интеграции

Здравствуйте.

Использую метод GetEvents(...)
TOperationResult GetEvents(beginTime, endTime, eventTypes, offset,
count, persons, entryPoints, sections, sectionsGroups, token) - получение событий,
согласно переданному фильтру.
В результатах иногда получаю TEvent в свойствах которого DevAddress (Адрес устройства) представлены значения которых нет в результатах метода GetDevices(...) (получение списка устройств) также их не видно и в АРМ.
Иногда адрес находится и проблем с привязкой нет.
Как правильно из события TEvent получить устройство на котором оно произошло?
 

6 месяцев 21 день назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

4 ответа

Здравствуйте. Если "ИНОГДА" получается всё правильно, так как ожидалось, значит, где-то в коде, которым вы обрабатываете полученные результаты скорее всего что-то не так. Циклы проверьте.

6 месяцев 21 день назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

как и что проверить? если в ответе TEvent.DevAddress пришло значение по которому не возможно определить TDevice на котором произошло событие. Устойства получаю методом GetDevices. ищу устройство на котором произошло событие по условию TEvent.DevAddress = TDevice.Address. 
Давайте может так поставлю вопрос как по событию определить устройство на котором оно произошло?
 

6 месяцев 20 дней назад

avatar
Сопоставлять устройства надо не по адресу, а по его Id.

Оффтоп: ранее у нас было разработано ПО для интеграции с Орионом, которое также опералось на адреса, но с выходом Ориона с поддержкой Сириуса вся идеология адреса пошла по бороде. 
 

Налетов Константин 6 месяцев 20 дней назад

TEvent.DevAddress=TDevice.Id

Трунова Людмила Геннадьевна 6 месяцев 20 дней назад

это не так. сделал выдачу всех Tdevice id в диапазоне с 1-35. TEvent,DevAddress=229 может прийти

Николай Ганевич 6 месяцев 20 дней назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

В документации на модуль интеграции на стр.7 расписаны свойства TEvent. Не подскажите как из них выйти на Id TDevice?
Свойство Тип Описание
EventId string Уникальный идентификатор записи (GUID) в журнале событий
EventTypeId int Идентификатор типа события (TEventType.Id)
EventDate DateTime Дата и время события
Description string Описание события (комментарий)
ComputerId int Идентификатор компьютера
ComPortNumber int Номер последовательного порта
PKUAddress int Адрес сетевого контроллера
DevAddress int Адрес устройства
ZoneAddress int Адрес зоны
ItemId int Идентификатор элемента, по которому произошло событие
ItemType string Тип элемента, по которому произошло событие
”SECTION” - раздел;
“LOOP” - вход (шлейф);
“DEVICE” - устройство;
“READER” - считыватель;
“RELAY” - выход (реле);
“ACCESSZONE” - зона доступа;
“ACCESSPOINT” - точка доступа (дверь);
“SECTIONGROUP” - группа разделов.
AccessPointId int Идентификатор точки доступа (двери)
AccessPointName string Наименование точки доступа (двери)
AccessZoneId int Идентификатор зоны доступа
SectionId int Идентификатор раздела/группы разделов в зависимости от значения
поля ItemType:
идентификатор группы разделов, если свойство ItemType имеет
значение «SECTIONGROUP”, в противном случае — идентификатор
раздела.
PassMode int Режим прохода (0 – не определен, 1 – вход, 2 – выход)
CardNo string Номер карты доступа
PersonId int Идентификатор сотрудника
LastName string Фамилия владельца ключа
FirstName string Имя владельца ключа
MiddleName string Отчество владельца ключа
BirthData DateTime Дата рождения владельца ключа
TabNum string Табельный номер владельца ключа
AccessFlags TEvetAccess
Flags
Флаги доступа

6 месяцев 20 дней назад

avatar
Не проверено, но алгоритм примерно такой: смотрим TEvent.ItemType, если он DEVICE, то выбираем устройство по условию TEvent.ItemId = TDevice.Id.

Налетов Константин 6 месяцев 20 дней назад

может получится, но пока событий TEvent.ItemType = DEVICE не приходило. Через ItemType и ItemId выйти на элементы TDeviceItem а от них на TDevice.
Но как то сложновато получается.

Николай Ганевич 6 месяцев 20 дней назад

В принципе ничего сложного и даже логически правильно, но соглашусь с тем, что такой подход не рационален в плане расходования памяти.  Для работы придётся хранить в памяти все элементы, вместо того чтобы динамически подгружать нужное. Например, не понятно почему в модуле нет метода аля GetDeviceItemById(id) и GetDeviceById(id)? 

Налетов Константин 6 месяцев 18 дней назад

Реализацию нужных методов можно попросить у разработчиков. Они очень быстро отзываются.
Вот поэтому чтение я произвожу запросами SQL напрямую из базы.
 

Трунова Людмила Геннадьевна 6 месяцев 18 дней назад

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

С определением устройства по событию в целом разобрался, По TEvent.ItemType и TEvent.ItemId можно выйти на TDevice если ItemType соответсвующий.
Не подскажите в докуметации TEvent.ZoneAddress int Адрес зоны. Как получить наименование этой зоны? Это точно не зона доступа. В Болид журнале событий это колонка с названием "Зона".

6 месяцев 17 дней назад

avatar
Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

Добавить ответ

Для добавления сообщений на форуме вам необходимо зарегистрироваться и указать мобильный телефон в своем профиле (зачем?)

ПОКАЗАН

746 раз

ЗАДАН

6 месяцев 21 день назад

ПРОДУКТЫ

Орион Про

По каждому вопросу/ответу можно добавлять комментарии. Комментарии предназначены для уточнения вопроса/ответа.