NetPing в качестве блока ротаций кондиционеров в серверной комнате

Блок ротации кондиционеров предназначен для обеспечения режима чередования работы двух кондиционеров с заданным периодом времени и обеспечения нормального температурного режима помещения при различных климатических условиях.

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

Как правило, резервирование и ротация применяются в помещениях, где необходимо поддерживать максимально допустимую температуру, например, в серверных комнатах с большим количеством дорогостоящего оборудования. Необходимым условием реализации схемы резервирования является достаточность мощности одного из двух кондиционеров для поддержания рабочих климатических условий. То есть один кондиционер работает, другой находится в резерве. 

Применение блока ротации кондиционеров позволит Вам обеспечить уверенность в работе системы кондиционирования Вашей инфраструктуры!

В этой статье мы рассмотрим пример создания блока ротации кондиционеров для серверной комнаты на базе устройств NetPing.

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

  1. Штатный режим работы кондиционеров. В этом режиме кондиционеры работают по схеме чередования (два кондиционера автоматически включаются поочередно: первые сутки работает первый кондиционер, вторые сутки работает второй кондиционер, третьи сутки работает первый кондиционер и так далее);
  2. Аварийный режим работы кондиционеров. Если один из кондиционеров выходит из строя, и температура поднимается выше 35°C, следует задействовать резервный кондиционер, который должен работать до тех пор, пока не будет исправлен основной кондиционер.

Для реализации блока ротации нам потребуется следующий комплект оборудования:

Считаем, что устройства UniPing server solution v3 настроены на работу в вашей локальной сети, и ИК-модули IRC-TR v2датчики воздушного потока и датчики температуры 1-wire подключены. Подробнее с настройками устройства можно ознакомиться здесь. Также считаем, что устройства UniPing server solution v3 настроены на управление кондиционером. Правила настройки можно прочитать здесь и здесь.

В нашей статье будем использовать следующие параметры устройств:

Параметр

Устройство UniPing server solution v3 №1

Устройство UniPing server solution v3 №2

IP адрес

192.168.1.200

192.168.1.208

Логин

visor

visor

Пароль

ping

ping

Подключенный термодатчик

1

1

IO линия с подключенным датчиком потока воздуха

IO 1

IO 1

Номер команды включения кондиционера

2

2

Номер команды выключения кондиционера

3

3

Для реализации программной составляющей нашего блока ротации кондиционеров напишем скрипт на скриптовом языке программирования BASH. Скрипт будет выполняться в консоли на ПК/сервере с OS Ubuntu. ПК/сервер может быть как виртуальный, так и физический, подключённый к одной локальной сети с устройствами UniPing server solution v3. Управляющий скрипт также можно запустить и на компьютере за пределами локальной сети, в таком случае, устройства UniPing server solution v3 должны быть доступны через Интернет. О том, как это сделать, можно прочитать здесь.  

Для работы скрипта нужно установить утилиту Curl командой «sudo apt install curl»)

Установка CURL

Затем создаём файл скрипта split_rotation.sh командой «nano split_rotation.sh»

Создание файла скрипта

Далее пишем текст скрипта, как в примере (ниже будет ссылка на готовый файл скрипта):

#!/bin/bash

error_t=$»thermo_result(‘error’);»
error_io=$»io_result(‘error’);»
error_ir=$»ir_result(‘error’);»
split1_status=0 #Переменная, в которую записывается статус работы кондиционера №1. 0- ок, 1 — сбой
split2_status=0 #Переменная, в которую записывается статус работы кондиционера №2. 0- ок, 1 — сбой

while [ $split1_status -eq 0 ] || [ $split2_status -eq 0 ]
do
count1=0 # Счетчик часов работы кондиционера 1
count2=0 # Счетчик часов работы кондиционера 2

#Включаем кондиционер1:
ir1=$(curl —silent —user visor:ping http://192.168.1.200/ir.cgi?play=2) #Подставьте свои значения login:password, IP адрес устройства 1 и номер команды включения кондиционера №1
ir2=$(curl —silent —user visor:ping http://192.168.1.208/ir.cgi?play=3) #Подставьте свои значения login:password, IP адрес устройства 2 и номер команды выключения кондиционера №2
#Проверка правильности синтаксиса URL-encoded команды от сервера к устройству UniPing Server Solution v3/SMS
if [ «$ir1» = «$error_ir» ] || [ «$ir2» = «$error_ir» ]
then
echo «Ошибка в URL-encoded команде включения кондиционера №1»
exit
else
echo «Включен кондиционер №1»
sleep 5m #Пауза для получения термодатчиком данных о температуре
while [ $count1 -lt 23 ]
do
#Url-encoded запросы к устройству UniPing Server Solution v3/SMS 1 для получения информации о температуре и наличии потока воздуха:
thermo1=$(curl —silent —user visor:ping http://192.168.1.200/thermo.cgi?t1) #Подставьте свои значения login:password, IP адрес устройства 1 и номер термодатчика
io1=$(curl —silent —user visor:ping http://192.168.1.200/io.cgi?io1) #Подставьте свои значения login:password, IP адрес устройства 2 и номер IO линии, к которой подключен датчик потока воздуха.
#Проверка правильности синтаксиса URL-encoded запроса от сервера к устройству UniPing Server Solution v3/SMS
if [ «$thermo1» = «$error_t» ]||[ «$io1» = «$error_io» ]
then
echo «Ошибка в URL-encoded запросе состояния кондиционера №1»
exit
else #Проверка условия штатной работы кондиционера 1
thermo1_value=${thermo1:20:2} #Получение информации о температуре возле кондиционера 1
io1_value=${io1:20:1} #Получение информации о наличии потока воздуха от кондиционера 1
if [ $thermo1_value -le 35 ] && [ $io1_value -eq 1 ]
then #Штатный режим
sleep 1h #Пауза между проверками 1 час
((count1 ++ ))
split1_status=0
else #Аварийный режим
echo «Кондиционер 1 Аварийный режим!»
echo «Температура выше нормы или нет потока воздуха»
count1=25
split1_status=1
fi
fi
done
fi

#Включаем кондиционер2:
ir1=$(curl —silent —user visor:ping http://192.168.1.200/ir.cgi?play=3) #Подставьте свои значения login:password, IP адрес устройства и номер команды
ir2=$(curl —silent —user visor:ping http://192.168.1.208/ir.cgi?play=2) #Подставьте свои значения login:password, IP адрес устройства и номер команды
#Проверка правильности синтаксиса URL-encoded команды от сервера к устройству UniPing Server Solution v3/SMS
if [ «$ir1» = «$error_ir» ] || [ «$ir2» = «$error_ir» ]
then
echo «Ошибка в URL-encoded команде включения кондиционера №2»
exit
else
echo «Включен кондиционер №2»
sleep 5m #Пауза для получения термодатчиком данных о температуре
while [ $count2 -lt 23 ]
do
#Url-encoded запросы к устройству UniPing Server Solution v3/SMS 2 для получения информации о температуре и наличии потока воздуха:
thermo2=$(curl —silent —user visor:ping http://192.168.1.208/thermo.cgi?t1) #Подставьте свои значения login:password, IP адрес устройства и номер термодатчика
io2=$(curl —silent —user visor:ping http://192.168.1.208/io.cgi?io1) #Подставьте свои значения login:password, IP адрес устройства и номер IO линии, к которой подключен датчик потока воздуха.
#Проверка правильности синтаксиса URL-encoded запроса от сервера к устройству UniPing Server Solution v3/SMS
if [ «$thermo2» = «$error_t» ]||[ «$io2» = «$error_io» ]
then
echo «Ошибка в URL-encoded запросе состояния кондиционера №2»
exit
else #Проверка условия штатной работы кондиционера 2
thermo2_value=${thermo2:20:2} #Получение информации о температуре возле кондиционера 2
io2_value=${io2:20:1} #Получение информации о наличии потока воздуха от кондиционера 2
if [ $thermo2_value -le 35 ] && [ $io2_value -eq 1 ]
then #Штатный режим
sleep 1h #Пауза между проверками 1 час
((count2 ++ ))
split2_status=0
else #Аварийный режим
echo «Кондиционер 2 Аварийный режим!»
echo «Температура выше нормы или нет потока воздуха»
count2=25
split2_status=1
fi
fi
done
fi
done
echo «Кондиционеры в серверной не работают»

Сохраняем и делаем файл исполняемым при помощи команды «sudo chmod +x split_rotation.sh»:

Смена прав на скрипт

Затем запускаем наш скрипт командой «./split_rotation.sh»:

Запуск скрипта

И, если исходный код скрипта не содержит синтаксических ошибок, то в консоли будет отображено сообщение о включении кондиционера №1:

Включен кондиционер 1

Через 24 часа после запуска скрипта, кондиционер №1 будет выключен и включён кондиционер №2:

Включен кондиционер 2

Еще через 24 часа – кондиционер №2 будет выключен и снова включён кондиционер №1. В штатном режиме скрипт будет выполняться бесконечно (при условии работы сервера). Прервать выполнение можно нажатием кнопок «CTRL+C»:

Ручная остановка скрипта

Контроль температуры возле кондиционеров происходит 1 раз в час. Если при очередном опросе датчиков у работающего в текущий момент кондиционера температура превышает 35°C, и/или датчик воздушного потока воздуха не фиксирует наличие потока воздуха – то скрипт активирует «Аварийный режим» и включает другой кондиционер. При этом в консоль выдается следующее сообщение:

Кондиционер 1 Аварийный режим

Или

Кондиционер 2 Аварийный режим

При этом скрипт, через 24 часа после переключения на другой кондиционер снова попробует включить аварийный кондиционер и запросить значения температуры и состояние датчика воздушного потока. Если проверка этих значений пройдет успешно, то скрипт переходит в штатный режим работы.

В случае, если оба кондиционера окажутся неисправны, скрипт выдаст в консоль сообщение об этом и завершится:

Не исправны оба кондиционера

После устранения неполадок кондиционеров скрипт следует запустить вручную.

В скрипт встроена проверка корректности URL-encoded запросов к устройствам UniPing server solution v3.

В случае некорректных запросов выводится сообщение об ошибке в URL-encoded команде, и выполнение скрипта прекращается. После исправления команд в исходном коде скрипта, скрипт нужно запустить повторно:

Пример сообщений об ошибке в URL encoded командах

Для того, чтобы наш скрипт автоматически запускался при запуске ПК/сервера, нужно прописать его в автозагрузку. Для этого откройте файл rc.local командой: «sudo nano /etc/rc.local»:

Открытие файл rc.local

Пропишите скрипт перед строчкой «exit 0» и сохраните файл:

Общий вид файла rc.local

Скрипт выполнится после загрузки системы.

Готовый файл скрипта можно скачать здесь: split_rotation.sh.

В результате всех вышеперечисленных действий мы получим блок ротации кондиционеров, реализованный на основе устройств и датчиков компании NetPing.

?
×

    Получите бесплатную консультацию по выбору оптимального оборудования

    Наши операторы свяжутся с вами при первой возможности

    ×

      Обращение в техническую поддержку

      Сформулируйте, пожалуйста, тему и текст вашего обращения. Вам ответят в течении рабочего дня.

      ×
      Ваша заявка отправлена. Мы свяжемся с вами при первой возможности.