Блок ротации кондиционеров предназначен для обеспечения режима чередования работы двух кондиционеров с заданным периодом времени и обеспечения нормального температурного режима помещения при различных климатических условиях.
Применение блока управления кондиционерами позволяет равномерно расходовать ресурс основного и резервного кондиционеров, периодически меняя их роли, а также автоматически вводит резервный кондиционер при отказе или недостатке мощности основного.
Как правило, резервирование и ротация применяются в помещениях, где необходимо поддерживать максимально допустимую температуру, например, в серверных комнатах с большим количеством дорогостоящего оборудования. Необходимым условием реализации схемы резервирования является достаточность мощности одного из двух кондиционеров для поддержания рабочих климатических условий. То есть один кондиционер работает, другой находится в резерве.
Применение блока ротации кондиционеров позволит Вам обеспечить уверенность в работе системы кондиционирования Вашей инфраструктуры!
В этой статье мы рассмотрим пример создания блока ротации кондиционеров для серверной комнаты на базе устройств NetPing.
Серверная комната оборудована двумя кондиционерами. Необходимо реализовать следующий алгоритм работы:
- Штатный режим работы кондиционеров. В этом режиме кондиционеры работают по схеме чередования (два кондиционера автоматически включаются поочередно: первые сутки работает первый кондиционер, вторые сутки работает второй кондиционер, третьи сутки работает первый кондиционер и так далее);
- Аварийный режим работы кондиционеров. Если один из кондиционеров выходит из строя, и температура поднимается выше 35°C, следует задействовать резервный кондиционер, который должен работать до тех пор, пока не будет исправлен основной кондиционер.
Для реализации блока ротации нам потребуется следующий комплект оборудования:
- UniPing server solution v3 — 2 шт.;
- ИК-модуль IRC-TR v2 — 2 шт.;
- Датчик температуры 1-wire — 2 шт.;
- Датчик воздушного потока – 2 шт.;
- ПК/сервер с OC Ubuntu – 1 шт.;
- Локальная сеть
Считаем, что устройства 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»)
Затем создаём файл скрипта 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:
Через 24 часа после запуска скрипта, кондиционер №1 будет выключен и включён кондиционер №2:
Еще через 24 часа – кондиционер №2 будет выключен и снова включён кондиционер №1. В штатном режиме скрипт будет выполняться бесконечно (при условии работы сервера). Прервать выполнение можно нажатием кнопок «CTRL+C»:
Контроль температуры возле кондиционеров происходит 1 раз в час. Если при очередном опросе датчиков у работающего в текущий момент кондиционера температура превышает 35°C, и/или датчик воздушного потока воздуха не фиксирует наличие потока воздуха – то скрипт активирует «Аварийный режим» и включает другой кондиционер. При этом в консоль выдается следующее сообщение:
Или
При этом скрипт, через 24 часа после переключения на другой кондиционер снова попробует включить аварийный кондиционер и запросить значения температуры и состояние датчика воздушного потока. Если проверка этих значений пройдет успешно, то скрипт переходит в штатный режим работы.
В случае, если оба кондиционера окажутся неисправны, скрипт выдаст в консоль сообщение об этом и завершится:
После устранения неполадок кондиционеров скрипт следует запустить вручную.
В скрипт встроена проверка корректности URL-encoded запросов к устройствам UniPing server solution v3.
В случае некорректных запросов выводится сообщение об ошибке в URL-encoded команде, и выполнение скрипта прекращается. После исправления команд в исходном коде скрипта, скрипт нужно запустить повторно:
Для того, чтобы наш скрипт автоматически запускался при запуске ПК/сервера, нужно прописать его в автозагрузку. Для этого откройте файл rc.local командой: «sudo nano /etc/rc.local»:
Пропишите скрипт перед строчкой «exit 0» и сохраните файл:
Скрипт выполнится после загрузки системы.
Готовый файл скрипта можно скачать здесь: split_rotation.sh.
В результате всех вышеперечисленных действий мы получим блок ротации кондиционеров, реализованный на основе устройств и датчиков компании NetPing.