Мониторинг состояния системы

4. Азбука Комментариев нет

Важным аспектом функционирования системы управления Умным Домом является контроль состояния компонентов, её составляющих. В этой статье я покажу, каким образом можно организовать наглядный и эффективный контроль работы системы.

(Ремарка: ниже описывается процесс создания необходимых классов и методов, но, начиная с некоторой версии системы, эти данные уже созданы и готовы к использованию/модификации.)

Для вышеописанной задачи нам потребуется создать класс объектов systemStates. В этом классе мы будем создавать объекты "уровней состояния" (название условное, дальше будет понятней). Объектов будет несколько, т.к. они будут служить разным целям.

Уровень состояния это простая оценка качества состояния системы с той или иной точки зрения. Я выделил три основные показателя и добавил их как объекты созданного выше класса:

Comminication -- состояние систем связи

Security -- состояние систем безопасности

System -- состояние целостности функционирования системы

Для созданного выше класса systemStates добавляем следующие свойства:

stateColor -- условный цвет уровня

stateTitle -- название уровня

stateDetails -- детали текущего уровня состояния

Кроме того, добавляем следующие методы класса:

checkState -- метод проверки состояния системы по выбранному параметру

stateChanged -- метод, который будет вызываться в случае изменения состояния

Таким образом, мы создали три объекта и у каждого есть выше перечисленные свойства и методы. Для того, чтобы система могла за собой следить необходимо наполнить необходимым кодом методы checkState каждого из объектов, а так же организовать постоянный запуск этих методов. Последнее, кстати, уже встроено в систему в виде цикла/scripts/cycle_states.php, который автоматически запускается со стартом системы и ежесекундно запускает метод checkState для всех объектов класса systemStates, так что нам остаётся написать код метода checkState для каждого из созданных объектов.

Назначение кода checkState -- проверить какие-то показатели, принять решение о том, в каком состоянии находится система и установить соответствующий уровень.

Для начала реализуем проверку состояния коммуникаций. Считаем, что с ними всё в порядке, если есть соединение с интернетом и "пингуется" шлюз -- зелёный уровень. Если интернета нет, но шлюз доступен, то ставим жёлтый уровень. Если недоступен шлюз, то красный.

Для метода Communication.checkState установим следующий код:

Нажмите для отображения кода

Дальше сделаем код для проверки уровня безопасности (Security.checkState)

Нажмите для отображения кода

И, наконец, код для контроля целостности системы (System.checkState)

Нажмите для отображения кода

Следующим шагом нам нужно сделать вывод состояния системы. Можем для этого использовать "Меню управления". Добавим новый элемент типа HTML-блок:

В поле Data необходимо поместить следующий код

В итоге в меню мы будем видеть подобную картину:

Таким образом, получаем наглядную и оперативную сводку по состоянию системы.

Важное замечание: в виду того, что методы checkState вызываются каждую секунду, необходимо исключить использование "медленных" операций при опросе состояния систем, т.е. статусы подсистем (датчиков, модулей и т.п.) должны обновляться отдельно, а checkState их только проверяет и делает вывод об общем статусе.

 

Обсуждение статьи на форуме.

 

Поделитесь в соц сетях

Теги: