UPS Assistant+MDM

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

UPS Assistant+MDM

Сообщение Jager » Сб фев 28, 2015 8:37 pm

Давно пользуюсь UPS Ippon SmartWinner 2000 и все руки не доходили привязать его к MDM. Как раз попалась тема про NUT http://smartliving.ru/forum/viewtopic.p ... &hilit=ups, но мои попытки запустить NUT под Windows завершились безрезультатно, поэтому пришлось искать другой вариант.
В результате нашлась программа UPS Assistants, которая поддерживает массу UPS работающих по протоколу Megatec/Centralion (Ippon, Mustek, Sven, Inelt).

Изображение

UPS подцепился автоматом.
В программе есть встроенный сервер, выдающий данные в таком виде

Изображение

так что осталось только парсить данные, накарябал такой скрипт
СпойлерПоказать
$state = file_get_contents('http://192.168.2.200:8080');
$value = explode('</br>',$state);
sg('UPS.inVoltage',substr($value[2],16,5));
sg('UPS.faultVoltage',substr($value[3],22,5));
sg('UPS.outVoltage',substr($value[4],16,5));
sg('UPS.load',substr($value[5],16,3));
sg('UPS.Frequency',substr($value[6],18,5));
sg('UPS.batVoltage',substr($value[7],20,5));
sg('UPS.inTemp',substr($value[8],16,5));
sg('UPS.status',substr($value[9],15,8));
sg("UPS.updatedTime",date("H:i",time()));
запуская его через необходимый промежуток времени имеем все данные в MDM

Изображение

программа так же может запускать bat файл при критическом уровне заряда батарей, через который можно вызвать нужный скрипт в MDM

Изображение
За это сообщение автора Jager поблагодарили (всего 4):
Bagir (Вс мар 01, 2015 3:33 pm) • kozsv (Сб авг 27, 2016 6:31 am) • mazahaka7sk (Пт ноя 18, 2016 10:01 am) • Goshar777 (Сб сен 05, 2020 8:42 am)
Рейтинг: 4.71%
Аватара пользователя
Bagir
Сообщения: 1487
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: UPS Assistant+MDM

Сообщение Bagir » Вс мар 01, 2015 3:51 pm

Вот спасибо! Такое решение мне очень даже нравится. 5 копеек от меня. Добавил ограничение ожидания ответа в 1 секунду чтобы не подтормаживало циклы если сервак неживой. Есть задумка сделать частые опросы только если свойство Alive=1. Иначе только раз в минуту.
И еще у мня были пробелы на конце у Frequency, batVoltage и inTemp. Уменьшил длину до четырех. Но на счет температуры даже и не знаю что будет, если юпс будет холодный и температура ниже 10 градусов.

Код: Выделить всё

$cmdUrl = 'http://10.10.3.43:8080';
$ctx = stream_context_create(array(
    'http' => array('timeout'=>1)
    )
);
$state = file_get_contents($cmdUrl, 0, $ctx);
$value = explode('</br>',$state);


// Report - 04.01.2015 14:02:18
$value[0] = substr($value[0],17,18);
// I/P Voltage = 217.5 V
$value[2] = substr($value[2],16,5);
// I/P Fault Voltage = 217.5 V
$value[3] = substr($value[3],22,5);
// O/P Voltage = 217.5 V
$value[4] = substr($value[4],16,5);
// O/P Current = 015 %
$value[5] = substr($value[5],16,3);
// I/P Frequency = 50.0 Hz
$value[6] = substr($value[6],18,4);
// Battery Voltage = 0108 V
$value[7] = substr($value[7],20,4);
// Temperature = 53.2 °C
$value[8] = trim(substr($value[8],16,4));
// UPS Status = 00001001
$value[9] = substr($value[9],15,8);


/*
                      battery.voltage - battery.voltage.low
battery.charge =  ------------------------------------------ x 100 %
                  battery.voltage.high - battery.voltage.low
*/
$bh = gg('UPS.batVoltHigh');
$bl = gg('UPS.batVoltLow');
$bc = round( ($value[7] - $bl) / ($bh - $bl) *100 );


sg('UPS.measurTime',$value[0]);
sg('UPS.inVoltage',$value[2]);
sg('UPS.faultVoltage',$value[3]);
sg('UPS.outVoltage',$value[4]);
sg('UPS.load',$value[5]);
sg('UPS.Frequency',$value[6]);
sg('UPS.batVoltage',$value[7]);
sg('UPS.inTemp',$value[8]);
sg('UPS.status',$value[9]);
sg('UPS.batCharge',$bc);
sg("UPS.updatedTime",date("H:i",time()));
Пробовал на регулярных выражениях. Работает, но я в них пока мало чего понимаю.
примерПоказать
  • <b>Report</b> - 04.01.2015 5:01:13</br>
    VID: 0x06DA PID: 0x0003 Product: USB UPS</br>
    I/P Voltage = 218.7 V</br>
    I/P Fault Voltage = 218.7 V</br>
    O/P Voltage = 218.7 V</br>
    O/P Current = 020 %</br>
    I/P Frequency = 50.0 Hz</br>
    Battery Voltage = 0108 V</br>
    Temperature = 53.2 °C</br>
    UPS Status = 00001001</br>

Код: Выделить всё

preg_match('|<b>Report</b> - (.*)</br>|', $state, $matches);
sg('UPS.measurTime',$matches[1]);

preg_match('|I?P Fault Voltage = (.*) |', $state, $matches);
sg('UPS.inVoltage',$matches[1]);

preg_match('|I?P Fault Voltage = (.*) |', $state, $matches);
sg('UPS.faultVoltage',$matches[1]);

preg_match('|O?P Voltage = (.*) |', $state, $matches);
sg('UPS.outVoltage',$matches[1]);

preg_match('|O?P Current = (.*) |', $state, $matches);
sg('UPS.load',$matches[1]);

preg_match('|I?P Frequency = (.*) |', $state, $matches);
sg('UPS.Frequency',$matches[1]);

preg_match('|Battery Voltage = (.*) |', $state, $matches);
sg('UPS.batVoltage',$matches[1]);

preg_match('|Temperature = (.*) |', $state, $matches);
sg('UPS.inTemp',$matches[1]);

preg_match('|UPS Status = (.*)</br>|', $state, $matches);
sg('UPS.status',$matches[1]); 
Осталось все таки придумать, как прицепить свой Ippon к серверу. Ippon в гараже, а сервер на втором этаже. Между ними есть LAN, 1-Wire и две запасные витые пары например для RS485. У Ippon есть USB и Rs232.
Вижу три варианта:
1. TCP/IP Ethernet to Serial DB9 RS232. Весьма удобно и должно работать, но цена сильно кусучая. Даже на Али больше четырех килорублей. Можно конечно собрать что то подобное самому на базе бюджетного роутера.
2. На стороне Ippon перевести Rs232 to RS485, а на стороне сервера RS485 to USB. Весьма бюджетно, но вот будет ли работать.
3. Собрать комп из утиля и поставить рядом с Ippon. Работать будет полюбому, но это как из пушки по воробьям.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

Re: UPS Assistant+MDM

Сообщение Jager » Вс мар 01, 2015 5:31 pm

Bagir писал(а):Осталось все таки придумать, как прицепить свой Ippon к серверу. Ippon в гараже, а сервер на втором этаже. Между ними есть LAN, 1-Wire и две запасные витые пары например для RS485. У Ippon есть USB и Rs232.
Так не проблема, берите что то типа этого http://www.yotamagaz.ru/omix/
Аватара пользователя
Bagir
Сообщения: 1487
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: UPS Assistant+MDM

Сообщение Bagir » Вс мар 01, 2015 6:22 pm

Интересный вариант! Принцип работы весьма схож с моим вторым способом. У меня есть Rs232 to RS485, но нет RS485 to USB чтобы попробовать. Заказал за 80р на Али. Идти будет пару месяцев. Попробуем что получится. Если ничего не выйдет, буду пробовать такой usb удлинитель. А пока чтобы все настроить, собираю тухлый комп из хлама на чердаке :D
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

Re: UPS Assistant+MDM

Сообщение Jager » Вс мар 01, 2015 6:46 pm

Bagir писал(а):но нет RS485 to USB чтобы попробовать.
У меня такой

Изображение

снимает данные со эл.счетчика по rs-485
Аватара пользователя
Bagir
Сообщения: 1487
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: UPS Assistant+MDM

Сообщение Bagir » Вс мар 01, 2015 7:01 pm

Точно! Такой же и я заказал. Если не пригодится для юпса, то все равно будет на один интерфейс у сервера больше ))
Мало ли еще какое железо приволоку. А на пока собрал комп. Вроде жужжит нормально. Сейчас буду дружиться с программой.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1487
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: UPS Assistant+MDM

Сообщение Bagir » Пн мар 02, 2015 1:05 am

Все получилось :!:
Данные с ИБП получаю. Столько всего интересного, теперь надо думать, как это все использовать. На этом ИБП у меня еще и весь свет в доме сидит. Так что его статус весьма нужная штука. В данных похоже есть все, даже пожелать больше нечего, а управлять ИБП я не планировал.
Хорошая программа, лишь бы только работала надежно. Посмотрим как она себя покажет.
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Jager
Сообщения: 708
Зарегистрирован: Сб авг 18, 2012 10:21 am
Благодарил (а): 26 раз
Поблагодарили: 180 раз

Re: UPS Assistant+MDM

Сообщение Jager » Пн мар 02, 2015 7:55 am

Bagir писал(а):Но на счет температуры даже и не знаю что будет, если юпс будет холодный и температура ниже 10 градусов.
У меня 2 MegaD пережили зиму в железных ящиках на улице без проблем. По внутреннему датчику температура опускалась до -7 когда на улице было -28.
В UPS конечно аккумуляторы есть, но такого же типа у меня стоит на генераторе который так же расположен в холодном помещении.
Аватара пользователя
Bagir
Сообщения: 1487
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: UPS Assistant+MDM

Сообщение Bagir » Пн мар 02, 2015 1:05 pm

Да, акб на генераторе у меня тоже на улице. Правда в морозы ни разу не пришлось его заводить. Меги у меня тоже есть в щитах на чердаке. Ставил недавно и сильных морозов тоже еще не хватили. Их температура ниже ноля не опускалась.
Я про минус имел виду, что число может быть уже не ##.# а #.# Тогда потащится лишний пробел. Наверное добавлю еще trim перед записью значения в свойство. Может кто потом и подскажет изящное решение на регулярках. Вообще весьма печально, что сервер не отвечает в xml или jcon. Было бы очень красиво.
Для рисования элемента понадобится высчитать процент заряда батареи. Вот полезная формула.

Код: Выделить всё

                     battery.voltage - battery.voltage.low
battery.charge =  ------------------------------------------ x 100 %
                  battery.voltage.high - battery.voltage.low
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Аватара пользователя
Bagir
Сообщения: 1487
Зарегистрирован: Вт сен 17, 2013 6:46 pm
Откуда: Ярославская область город Углич
Благодарил (а): 187 раз
Поблагодарили: 338 раз

Re: UPS Assistant+MDM

Сообщение Bagir » Вт мар 03, 2015 4:25 am

Вот такой элемент получился для показа мощности. Сейчас совсем маленько нагрузки на юпсе висит. Хочу еще в этот же элемент добавить индикатор заряд а батареи в виде круга. Данные о напряжении и температуре юпса просто написать текстом.
Изображение
За это сообщение автора Bagir поблагодарили (всего 2):
Jager (Вт мар 03, 2015 8:41 am) • Vit (Вт мар 03, 2015 11:28 am)
Рейтинг: 2.35%
Windows 7, HTTP, MegaD, Z-Wave, 1-Wire
Ответить