Управление группой устройств NetPing /PWR-220 v2

Управление группой устройств NetPing /PWR-220 v2

Очень часто возникает необходимость управлять питанием большого количества устройств. Например в лабораториях или в дата-центрах. Для удалённого управления питанием можно использовать устройства NetPing PWR220 v2 или подобные им.

Каждое такое устройство имеет удобный web-интерфейс, однако при большом количестве точек управления придётся использовать большое количество устройств, для управлениям которыми хорошо было бы иметь единиый общий интерфейс. Далее будет показан вариант организации централизованного управления большим количеством устройств.

Решать задачу мы будем на примере большого количества устройств NetPing PWR220 v2. При решении задачи будем опираться на то, что выбранные устройства поддерживают управление по SNMP. Напишем несложный скрипт на PHP, который легко настраивается и может работать на любом веб-сервере с поддержкой PHP, и включенной в PHP поддержкой PCRE и SNMP.

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

/*

* Скрипт для управления устройствами NetPing Power220 (http://netping.com.ua)

* Для работы скрита требуется PHP версии не ниже 4.3, собранный с поддержкой PCRE и SNMP

*/

?>

NetPing Power220 Control Script

/*

* Массив ключей.

* В качестве ключа массива нужно указать уникальный идентификатор ключа внутри скрипта.

* Каждый элемент содержит следующие параметры:

* description - описание ключа

* host - адрес устройства

* community - SNMP Community

* oid - OID, используемый для управления этим сенсором

*/

$keys = array(

''sensor_01'' => array(

''description'' => ''Power 01_1'',

''host'' => ''192.168.3.9'',

''community'' => ''SWITCH'',

''oid'' => ''1.3.6.1.4.1.25728.52.1.5801.1.2'',

),

''sensor_02'' => array(

''description'' => ''Power 01_2'',

''host'' => ''192.168.3.9'',

''community'' => ''SWITCH'',

''oid'' => ''1.3.6.1.4.1.25728.52.1.5801.2.2'',

),

''sensor_03'' => array(

''description'' => ''Power 02_1'',

''host'' => ''192.168.3.10'',

''community'' => ''SWITCH'',

''oid'' => ''1.3.6.1.4.1.25728.52.1.5801.1.2'',

),

''sensor_04'' => array(

''description'' => ''Power 02_2'',

''host'' => ''192.168.3.10'',

''community'' => ''SWITCH'',

''oid'' => ''1.3.6.1.4.1.25728.52.1.5801.2.2'',

)

);

 

// Отключаем вывод сообщений об ошибках

error_reporting(0);

 

// Если нужно выполнить какое-то действие

if (isset($_POST[''action''])) {

// Получаем действие, которое нужно выполнить

$action = $_POST[''action''];

// Получаем идентификатор ключа

$key_id = $_POST[''key''];

// Детальная информация о ключе

$key = $keys[$key_id];

 

// Новое состояние ключа:

$new_status = $action == ''on'' ? 1 : 0;

 

// Устанавлием новое значение

snmpset($key[''host''], $key[''community''], $key[''oid''], ''i'', $new_status);

}

 

 

// Имя скрипта

$scriptname = $_SERVER[''PHP_SELF''];

 

// Перебираем ключи

foreach (array_keys($keys) as $key_id) {

// ПОлучаем детальную информацию о ключе

$key = $keys[$key_id];

 

// Получаем состояние Ключа

$status = snmpget($key[''host''], $key[''community''], $key[''oid'']);

 

// В $status содержится строка вида "INTEGER: 0". Нужно извлечь отсюда число

// Функция intval гарантируем что мы получим числовое значение в любом случае

$status = intval(preg_replace(''/^.+?(\\d+)$/'', "$1", $status));

 

 

 

// Отображаем строку таблицы для этого ключа

print "

\\n";

 

// Отображаем описание

print "\\t

\\n";

 

// Отображаем статус

print "\\t

\\n";

 

// Отображаем кнонку включения (или выключения) ключа

print "\\t

";

 

print "

\\n";

}

 

?>

Description Status Control
{$key[''description'']} " . ($status ? "On" : "Off") . " ";

print "";

print "";

print "";

print "

Copyright © 2010 Vadim V. Kalinnikov aka MooSE

E-Mail: moose@ylsoftware.com

Web: www.ylsoftware.com

 

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

 


Единственным существенным недостатком этого скрипта является отсутствие нормальной обработки ошибок. Это не критично если связь между сервером и всеми устройствами достаточно надёжна и сами устройства работают в штатном режиме.

Если всё же нужен контроль ошибок то можно закомментировать или вообще убрать строку:

error_reporting(0);

В этом случае при возникновении проблем на экран будут выдаваться стандартные ошибки PHP. Более сложный контроль ошибок читателю предлагается реализовать самому.

На этом всё. Приятной работы!

Автор: Вадим Калинников
E-mail: moose@ylsoftware.com
Web: http://ylsoftware.com