Управление NetPing B+ 2/PWR-220 ярлыком с рабочего стола

Простая задача.
В офисе есть вентилятор. Когда кому-то жарко он его включает, когда вентилятор не нужен его выключают. Соответсвенно и для той и для другой процедуры надо подойти к вентилятору и нажать на нем кнопку. Вставать с рабочего места и отвлекаться от процесса лениво Надо сделать чтобы вентилятор включался/выключался щелчком по ярлыку на "рабочем столе" Windows

Берем NetPing B+ 2PWR/220. Почему не NetPing B+ /PWR-220 ? А не умеет одноканальное устройство с SNMP работать да и вообще не умеет розеткой управлять в статическом режиме т.е. включил/выключил.
На корпусе устройства "компьютерная" розетка для подключения питания, вилка вентилятора к ней не подойдет. Ладно есть "Переходник для PWR-220" при помощи него подключение вентилятора сложности не представляет. См. фото.

Теперь само устройство
Подключаем устройство к сети Ethernet , запускаем утилиту NPCFG (1.4.10)

Так, наше устройство висит с ошибкой, оно и понятно, IP у него из другой подсети. Меняем IP на подходящий для нас 195.170.36.167

В общем то рекомендуется сменить еще и login, password и Community для того чтобы устройству по ошибке не поменял параметры кто-либо другой. Сменить Community можно только по telnet. Собственно соединяемся по telnet с устройством:
telnet 195.170.36.167

Все, выходим из telnet, конфигурирование устройства закончено.
Для того чтобы повесить команду на ярлык запускаемый с рабочего стола, нам нужен небольшой скрипт, который отправит нужную команду по SNMP в устройство.
В качестве скрипта воспользуемся VBScript, потому что он уже есть встроенным в ОС Windows 2003/XP/Vista И все что нужно для его написания, это только создать текстовый файл в Блокноте, дать ему расширение .vbs и все, можно выполнять.
К сожелаению есть одно ограничение VBScipt, это невозможность работать его встроенными средствами с SNMP OID (Ну или я о такой возможности не знаю J , кто знает подскажите ! ).
Воспользуемся внешней бесплатной утилитой из библиотеки Net-SNMP.
http://net-snmp.sourceforge.net/
Вообще все приведенный ниже скрипт написан на основании статьи
http://www.naterice.com/blog/template_p ... k.asp?id=4, за что авторам большое спасибо !
И так, качаем с сайта
http://net-snmp.sourceforge.net/download.html версию под win32 и устанавливаем в какую-то локальную директорию:

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

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

Const NET_SMNMP_PATH="D:\Long_Temp\VBS\NetSNMP\bin" ' Путь по которому лежит файл snmpset.exe


Call SNMPSet("195.170.36.167","ADMIN",".1.3.6.1.4.1.25728.18.4241","0xC0")


Function SNMPSet(vServer, vCommunityString, vOID, strValue)
On Error Resume Next

Set WshShell = CreateObject("WScript.Shell") 'Create filesystem objects

'Run the SNMPSet command and save results to tmp file
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " x " & strValue, 0, True

SNMPSet=""

End Function

Обязательно подкорректируйте в этом файле NET_SMNMP_PATH в соответствии с путем к файлу snmpset.exe на вашем компьютере! А так-же IP адрес вашего устройства!
Сохраните файл со скриптом с именем: fan_control_on.vbs
Все что делает этот скрипт, это посылает команду по SNMP включить питание на первом канале устройства NetPing B+ 2/PWR-220.
Для того чтобы выключить питание создадим второй скрипт с тексом:

Const NET_SMNMP_PATH="D:\Long_Temp\VBS\NetSNMP\bin" ' Путь по которому лежит файл snmpset.exe


Call SNMPSet("195.170.36.167","ADMIN",".1.3.6.1.4.1.25728.18.4241","0x80")


Function SNMPSet(vServer, vCommunityString, vOID, strValue)
On Error Resume Next

Set WshShell = CreateObject("WScript.Shell") 'Create filesystem objects

'Run the SNMPSet command and save results to tmp file
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " x " & strValue, 0, True

SNMPSet=""

End Function

Обязательно подкорректируйте в этом файле NET_SMNMP_PATH в соответствии с путем к файлу snmpset.exe на вашем компьютере! А так-же IP адрес вашего устройства!

И сохраним в файл fan_control_off.vbs
Итого у нас два скрипта, один включает питание на первом канала устройства NetPing, второй выключает.
Для проверки их работоспособности, запустите скрипты как обычные исполняемые файлы в системе.
Делаем ярлыки на рабочем столе:

И выбираем для них подходящие иконки. Ну вот как получилось у меня :

 

 

Дополнение Алексея Щеголева, по работе через SNMP с NetPing B+ 2/PWR-220

OID указанные в статье для первого канала соответствуют действительности, просто тип отдаваемых данных для всех ресурсов устройства задан как OCTET STRING, поскольку аппаратная платформа данного устройства была достаточно слабой для того чтобы реализовать полноценный SNMP агент. SNMP агент реализованный в устройстве предназначен больше для работы со скриптом нежели с человеком, тем не менее есть возможность управлять устройством и через MIB браузер , например IReasoning, Для того что бы включить первый канал необходимо по OID .1.3.6.1.4.1.25728.18.4241 отправить OCTET STRING 0xС0, что бы выключить канал необходимо на этот же OID отправить OCTET STRING 0x80. Для второго канала производятся те же действия только с OID .1.3.6.1.4.1.25728.18.4265.

 

Добавление:

Для управления питанием NetPing B+ /PWR v2 (версия встроенного ПО DKSF 50.4 !!!) :
OID .1.3.6.1.4.1.25728.50.4.411, тип integer (community по умолчанию SWITCH), при записи 0 канал выключается, при записи 1 включается

Соответственно файле fan_control_on.vbs строка должна выглядеть как:
Call SNMPSet("195.170.36.167","SWITCH",".1.3.6.1.4.1.25728.50.4.411","1")
в строке вызова snmpset необходимо изменить тип, ключ "x" надо поменять на ключ "i" должно получится вот так:
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " i " & strValue, 0, True

А в файле fan_control_off.vbs :
Call SNMPSet("195.170.36.167","SWITCH",".1.3.6.1.4.1.25728.50.4.411","0")
в строке вызова snmpset необходимо изменить тип, ключ "x" надо поменять на ключ "i" должно получится вот так:
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " i " & strValue, 0, True



Для управления питанием NetPing v2 B+ /2PWR (версия встроенного ПО DKSF 50.4 !!!) :
Для первого канала OID .1.3.6.1.4.1.25728.50.5.411, тип integer (community по умолчанию SWITCH), при записи 0 канал выключается, при записи 1 включается

Соответственно файле fan_control_on.vbs строка должна выглядеть как:
Call SNMPSet("195.170.36.167","SWITCH",".1.3.6.1.4.1.25728.50.5.411","1")
в строке вызова скрипта необходимо изменить тип, ключ "x" надо поменять на ключ "i" должно получится вот так:
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " i " & strValue, 0, True

А в файле fan_control_off.vbs :
Call SNMPSet("195.170.36.167","SWITCH",".1.3.6.1.4.1.25728.50.5.411","0")
в строке вызова скрипта необходимо изменить тип, ключ "x" надо поменять на ключ "i" должно получится вот так:
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " i " & strValue, 0, True


Для второго канала OID .1.3.6.1.4.1.25728.50.5.461, тип integer (community по умолчанию SWITCH), при записи 0 канал выключается, при записи 1 включается

Соответственно файле fan_control_on.vbs строка должна выглядеть как:
Call SNMPSet("195.170.36.167","SWITCH",".1.3.6.1.4.1.25728.50.5.461","1")
в строке вызова скрипта необходимо изменить тип, ключ "x" надо поменять на ключ "i" должно получится вот так:
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " i " & strValue, 0, True

А в файле fan_control_off.vbs :
Call SNMPSet("195.170.36.167","SWITCH",".1.3.6.1.4.1.25728.50.5.461","0")
в строке вызова скрипта необходимо изменить тип, ключ "x" надо поменять на ключ "i" должно получится вот так:
WshShell.Run "%comspec% /C " & NET_SMNMP_PATH & "\snmpset -c " & _
vCommunityString & " -v 1 " & vServer & " " & vOID & " i " & strValue, 0, True