Настройка программных модулей контроллера

Настройка программных компонентов контроллера выполняется с использованием следующих конфигурационных файлов:

Файл Содержимое Размещение
vmon.conf Конфигурация контроллера (параметры монитора) /etc/
vplan.json Расписание (параметры планировщика) /etc/
bridge.conf Конфигурация моста сервера очередей /etc/mosquitto/conf.d
bridge.tmpl Шаблон конфигурации моста сервера очередей /opt/vmon/
bridge.ini Конфигурация моста сервера очередей для начальной инициализации контроллера /opt/vmon/
persistmon.dat Переменные состояния контроллера /opt/vmon/
Замечание. В процессе подготовки контроллера для установки на объект в него должны быть загружены только файлы bridge.tmpl и bridge.ini.

Файл bridge.conf определяет параметры установки моста между контроллером и сервером сбора. Типовой файл bridge.conf должен обязательно содержать следующие строки:

connection ISS.AGAU7K3C
local_clientid ISS.AGAU7K3C

address  collector:8883
remote_username user
remote_password password

persistent_client_expiration 15m
cleansession  false
notifications true
bridge_protocol_version mqttv311

topic Measure out 1 /Controller/Out/ /user1/Controller/345/In/
topic Signal out 2 /Controller/Out/ /user1/Controller/345/In/
topic Event out 2 /Controller/Out/ /user1/Controller/345/In/
topic Command in 2 /Controller/In/ /user1/Controller/345/Out/
topic SetValue in 2 /Controller/In/ /user1/Controller/345/Out/

bridge_cafile /etc/mosquitto/ca_certificates/root.pem
bridge_certfile /etc/mosquitto/certs/client.pem
bridge_keyfile  /etc/mosquitto/certs/client.key

где, collector - адрес сервера сбора,
user,password - логин и пароль пользователя, для установки сессии моста
root.pem - корневой сертификат сервера
client.* - сертификаты клиента для установки защищенной сессии с сервером сбора

Логин и пароль пользователя контроллер получит от сервера сбора при инициализации. Маппирование топиков также построится автоматически с использованием файлов bridge.tmp.
Обязательным условием корректной работы являются наличие сертификатов для установки защищенной сессии.

В некоторых случаях, желательно изменить режим mosquitto по сбросу данных на диск. По умолчанию это сервис это делает каждые 30 мин. При большом количестве параметров и частоте опроса могут возникать проблемы с доступной оперативной памятью. В этом случае требуется выставить в файле mosquitto.conf следующие параметры:

autosave_on_changes true
autosave_interval 5000   

В примере указано, что при достижении 5000 измерений, mosquitto сбрасывает БД на диск.

Конфигурация контроллера описывает параметры, которые используются монитором, и содержится в XML файле vmon.conf. М Файл конфигурации контроллера формируется на сервере приложений и отправляется в контроллер по инициативе сервера приложений:
- при изменении параметров контроллера;
- при получении события из контроллера об отсутствии или невалидности файла конфигурации.
Конфигурация контроллера представлена следующими элементами:

Обозначение Название
Controller Атрибуты контроллера
ParamList Список параметров датчиков контроллера
Paramt Описание параметра датчика контроллера

Элемент Controller

Данный элемент содержит описание атрибутов контроллера:

Обозначение Название Примечание
Id Идентификатор контроллера
URL Адрес для подключения сервера очередей. Значение по умолчанию - localhost необязательный
Port Номер порта для подключения сервера очередей. Значение по умолчанию - 1883 необязательный
IsDebug Признак необходимости логирования отладочной информации работы монитора (1-да, 0-нет). Значение по умолчанию - 0 необязательный
MaxLogSize Максимальный размер файла журнала монитора на контроллере (в Mб). Значение по умолчанию - 50 необязательный
HelthTimeOut Интервал подтверждения работоспособности контроллера (в сек). Значение по умолчанию - 300. необязательный
Comment Примечание необязательный

Элемент ParamList

Данный элемент содержит список параметров датчиков контроллера

Элемент Param

Данный элемент содержит описание одного параметра датчика контроллера:

Обозначение Название Примечание
Id Уникальный идентификатор параметра
Name Наименование параметра
Topic Имя топика, в который помещаются измеренные значения параметра. Если параметр является управляемым, то для него имеется подтопик с названием «on», куда записываются значения, поступающие из сервера сбора
ValueType Тип значения параметра (1: сигнальный, 2: мгновенное значение, 3: счетчик (нарастающий итог), 4: счетчик (количество импульсов, 5 - строковый)
AvgPoints Количество отсчетов для усреднения текущего значения. Имеет смысл только для параметра типа 2 (мгновенное значение). Значение по умолчанию - 2 необязательный
CtrAbility Возможность управления значением параметра (1 - да, 0 - нет). Значение по умолчанию - 0. необязательный
Interval Период опроса значений параметра (в секундах). Значение по умолчанию - 60. необязательный
Sensitivity Погрешность измерения параметра (цена деления шкалы измеряемого параметра). Значение по умолчанию – 0 необязательный
Recovery Допустимый интервал восстановления работоспособности канала устройства (в секундах). Значение по умолчанию - 3600 необязательный
Urgent Признак срочности (1 -требуется немедленная доставка измененного значения, 0 - не требуется). Значение по умолчанию – 0 необязательный
Notify Идентификатор сообщения об изменении значения параметра необязательный
Locked Признак блокировки параметра - запрещены опрос значений параметра и изменение его значения (1 - параметр заблокирован, 0 - нормальная работа с параметром). Значение по умолчанию - 0 необязательный
Manually Признак ручного управления параметром (1 - разрешено, 0 - запрещено). Значение по умолчанию - 0 необязательный

Пример vmon.conf

<?xml version="1.0" encoding="UTF-8"?>
	<Id>String</Id>
	<URL>String</URL>
	<Port>String</Port>
	<IsDebug>true</IsDebug>
	<MaxLogSize>String</MaxLogSize>
	<HelthTimeOut>String</HelthTimeOut>
	<Comment>String</Comment>
	<ParamList>
		<Param>
			<Id>String</Id>
			<Name>String</Name>
			<Topic>String</Topic>
			<ValueType>String</ValueType>
			<AvgPoints>String</AvgPoints>
			<CtrAbility>String</CtrAbility>
			<Interval>String</Interval>
			<Sensitivity>String</Sensitivity>
			<Recovery>String</Recovery>
			<Urgent>String</Urgent>
			<Notify>String</Notify>
			<Locked>String</Locked>
			<Manually>String</Manually>
		</Param>
		<Param>
			<Id>String</Id>
			<Name>String</Name>
			<Topic>String</Topic>
			<ValueType>String</ValueType>
			<AvgPoints>String</AvgPoints>
			<CtrAbility>String</CtrAbility>
			<Interval>String</Interval>
			<Sensitivity>String</Sensitivity>
			<Recovery>String</Recovery>
			<Urgent>String</Urgent>
			<Notify>String</Notify>
			<Locked>String</Locked>
			<Manually>String</Manually>
		</Param>
	</ParamList>
</Controller>

Сценарии и команды управления содержится в XML файле vplan.conf.
Файл vplan.conf формируется на сервере приложений и отправляется в контроллер по инициативе сервера приложений:
- при изменении расписания;
- при получении события из контроллера об отсутствии или невалидности файла расписания.
Расписание описывается следующими элементами:

Обозначение Название
Schedule Расписание
ScheduleActionList Список действий, выполняемых по расписанию
RuleList Список правил, выполняемых по расписанию
ActionsParams Список параметров, участвующих в действиях
RulesParams Список параметров, используемых в условиях правил
ScheduleAction Описание действия, выполняемого по расписанию
Rule Описание одного правила, выполняемого по расписанию
ActionList Список действий, выполняемых при срабатывании правила
EventList Список событий, инициируемых при срабатывании правила
Action Описание действия, выполняемого при срабатывании правила
Event Описание события, инициируемого при срабатывании правила
Param Описание параметра

Элемент Schedule

Данный элемент содержит все расписание:

Обозначение Название Примечание
ScheduleId
URL Адрес для подключения сервера очередей. Значение по умолчанию - localhost необязательный
Port Номер порта для подключения сервера очередей. Значение по умолчанию - 1883 необязательный
IsDebug Признак логирования работы ПО на контроллере (1-да, 0-нет). Значение по умолчанию - 0 необязательный
MaxLogSize Максимальный размер файла журнала планировщика на контроллере (в Кб). Значение по умолчанию - 50 необязательный
Comment Примечание необязательный
Locked Признак блокировки расписания (0 - расписание разрешено, 1 - расписание запрещено). Значение по умолчанию - 0 необязательный
ScheduleActionList Список действий, выполняемых по расписанию необязательный
RuleList Список правил, выполняемых по расписанию необязательный
ActionsParams Список параметров, участвующих в действиях необязательный
RulesParams Список параметров, используемых в условиях правил необязательный

Элемент ScheduleActionList

Данный элемент содержит список действий, выполняемых по расписанию. Каждое действие описывается элементом ScheduleAction.

Элемент RuleList

Данный элемент содержит список правил, выполняемых по расписанию. Каждое правило описывается элементом Rule

Элемент ActionsParams

Данный элемент содержит список параметров, участвующих в действиях. Каждый такой параметр описывается элементом Param

Элемент RulesParams

Данный элемент содержит список параметров, используемых в условиях правил. Каждый такой параметр описывается элементом Param

ScheduleAction

Данный элемент содержит описание одного действия, выполняемого по расписанию:

Обозначение Название Примечание
ParamId Идентификатор параметра
CronOn Массив Cron-строк, определяющих включение устройства необязательный
CronOff Массив Cron-строк, определяющих выключение устройства необязательный

Элемент Rule

Данный элемент содержит описание одного правила, выполняемого по расписанию:

Обозначение Название Примечание
RuleId Идентификатор правила
Crons Массив Cron-строк, определяющих времена применения правила
CondRPN Условие выполнения правила в формате обратной польской записи
DelayTime Допустимая задержка прменения правила в минутах (по умолчанию 10)необязательный
Locked Признак блокировки правила (0 - правило разрешено, 1 - правило заблокировано). Значение по умолчанию - 0 необязательный
ActionList Список действий необязательный
EventList Список отправляемых событий необязательный

Элемент ActionList

Данный элемент содержит список действий, выполняемых при срабатывании правила. Каждое такое действие описывается элементом Action /

Элемент EventList

Данный элемент содержит список событий, инициируемых при срабатывании правила. Каждое такое событие описывается элементом Event/

Элемент Action

Данный элемент содержит описание действия, выполняемого при срабатывании правила:

Обозначение Название Примечание
ParamId Идентификатор параметра
Value Устанавливаемое значение (0 или 1)

Элемент Event

Данный элемент содержит описание события, инициируемого при срабатывании правила:

Обозначение Название Примечание
EventId Идентификатор события
Message Сообщение необязательный

Элемент Param

Данный элемент содержит описание параметра:

Обозначение Название Примечание
ParamId Идентификатор параметра
Topic Имя топика для параметра
Manually Признак ручного управления параметром (1 - разрешено, 0 - запрещено). Значение по умолчанию - 0 необязательный
Locked Признак блокировки параметра (1 -параметр заблокирован, 0 - нормальная работа с параметром). Значение по умолчанию - 0 необязательный

Формат элементов CronOn, CronOff и Crons

Каждый из перечисленных элементов содержит массив дат, определяющих расписание. Каждая дата записывается в виде строки, представленной в модифицированном формате Cron:

**M;H;D;S;Z**
где	M	-	минуты (диапазон 0 - 59);
	H	-	часы (диапазон 0 - 23);
	D	-	дни месяца (диапазон 1 - 31);
	S	-	месяцы (диапазон 1 - 12);
	Z	-	дни недели (диапазон 0 – 6, где 0 – воскресенье, …, 6 – суббота).

Каждое из пяти указанных полей может содержать следующие данные:

Представление данных Описание
* полный диапазон возможных значений (например, каждая минута, каждый час и т. д.)
N конкретное значение
N1,N2,… список значений
N1–N2 интервал значений
*/S значения из всего диапазона возможных значений с шагом S (например, через каждые 2 часа)

Кроме того, для дней недели используются два зарезервированных символа:
- «w» - все рабочие дни;
- «h» - все выходные и праздничные дни.

Пример vplan.conf

<?xml version="1.0" encoding="UTF-8"?>
<Schedule xsi:noNamespaceSchemaLocation="Schedule.xsd"
   xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
	<ScheduleId>0</ScheduleId>
	<URL>String</URL>
	<Port>String</Port>
	<IsDebug>true</IsDebug>
	<MaxLogSize>String</MaxLogSize>
	<Comment>String</Comment>
	<Locked>0</Locked>
	<ScheduleActionList>
		<ScheduleAction>
			<ParamId>0</ParamId>
			<CronOn>String</CronOn>
			<CronOn>String</CronOn>
			<CronOff>String</CronOff>
			<CronOff>String</CronOff>
		</ScheduleAction>
		<ScheduleAction>
			<ParamId>0</ParamId>
			<CronOn>String</CronOn>
			<CronOn>String</CronOn>
			<CronOff>String</CronOff>
			<CronOff>String</CronOff>
		</ScheduleAction>
	</ScheduleActionList>
	<RuleList>
		<Rule>
			<RuleId>0</RuleId>
			<Crons>String</Crons>
			<Crons>String</Crons>
			<CondRPN>String</CondRPN>
			<DelayTime>0</DelayTime>
			<Locked>0</Locked>
			<ActionList>
				<Action>
					<ParamId>0</ParamId>
					<Value>0</Value>
				</Action>
				<Action>
					<ParamId>0</ParamId>
					<Value>0</Value>
				</Action>
			</ActionList>
			<EventList>
				<Event>
					<EventId>0</EventId>
					<Message>String</Message>
				</Event>
				<Event>
					<EventId>0</EventId>
					<Message>String</Message>
				</Event>
			</EventList>
		</Rule>
		<Rule>
			<RuleId>0</RuleId>
			<Crons>String</Crons>
			<Crons>String</Crons>
			<CondRPN>String</CondRPN>
			<DelayTime>0</DelayTime>
			<Locked>0</Locked>
			<ActionList>
				<Action>
					<ParamId>0</ParamId>
					<Value>0</Value>
				</Action>
				<Action>
					<ParamId>0</ParamId>
					<Value>0</Value>
				</Action>
			</ActionList>
			<EventList>
				<Event>
					<EventId>0</EventId>
					<Message>String</Message>
				</Event>
				<Event>
					<EventId>0</EventId>
					<Message>String</Message>
				</Event>
			</EventList>
		</Rule>
	</RuleList>
	<ActionsParams>
		<Param>
			<ParamId>0</ParamId>
			<Topic>String</Topic>
			<Manually>String</Manually>
			<Locked>0</Locked>
		</Param>
		<Param>
			<ParamId>0</ParamId>
			<Topic>String</Topic>
			<Manually>String</Manually>
			<Locked>0</Locked>
		</Param>
	</ActionsParams>
	<RulesParams>
		<Param>
			<ParamId>0</ParamId>
			<Topic>String</Topic>
			<Manually>String</Manually>
			<Locked>0</Locked>
		</Param>
		<Param>
			<ParamId>0</ParamId>
			<Topic>String</Topic>
			<Manually>String</Manually>
			<Locked>0</Locked>
		</Param>
	</RulesParams>
</Schedule>