NetPing в домашнем хозяйстве

NetPing в домашнем хозяйстве

Два года назад я приобрел на дачу NetPing 2/PWR-220 v3/ETH – устройство удаленного управления розетками питания 220В по сети Ethernet. Устройство понравилось простотой настройки и многофункциональностью. 


Этакий на все руки мастер (картинка для привлечения внимания).


Итак, встречайте. Герой сегодняшнего обзора 
NetPing 2/PWR-220 v3/ETH




  • 2 независимые управляемые электрические розетки 220 вольт.
  • Суммарная мощность нагрузки до 1000 ватт, с произвольным распределением мощности нагрузки по двум каналам.
  • Управление через собственный web-интерфейс, и по протоколу SNMP.
  • Функция «сторожевого таймера» (watchdog), позволяющая автоматически производить перезагрузку подключенного оборудования по питанию в случае его «зависания» или по заранее составленному расписанию.
  • К устройству можно подключить ряд датчиков для удаленного мониторинга: датчики температуры, наличия напряжения в сети 220 вольт, открывания двери, протечки, задымления и т.п.
  • Встроенный Ethernet switch на 2 порта


На Хабре уже был обзор похожего устройства UniPing RS-232. Поскольку принципы и интерфейсы у них практически идентичны, сосредоточусь на практических примерах применения устройства. 

1. Internet watchdog


Изначально NetPing приобретался для перезагрузки роутера со вставленным в него и регулярно зависающим модемом от SkyLink. С поставленной задачей устройство справилось прекрасно. Работает по принципу «поставил и забыл».
Настраивается вполне не сложно. Сначала в разделе «Сторож» выставляем:


Потом в разделе «Управление 220V» выбираем режим «Сторож».
<<скриншот>>
После чего NetPing регулярно пингует указанные в найстройках ip-адреса и, в случае их недоступности, на секунду снимает напряжение с розетки. 
Факт перезапуска, что приятно, фиксируется в логе NetPing.

2. Включение нагрузки по расписанию


Весной и вначале лета приводил в порядок дренажную систему вокруг подвала. Проблема заключалась в малом объеме накопительного колодца и слишком длинной отводящей трубе, из которой после выключения насоса часть воды возвращалась обратно в колодец. В результате классическая система с поплавком практически не давала насосу остановиться. Ставить обратный клапан или еще как переделывать трубу не хотелось, т.к. система была временной. Тем не менее, нужно было дать возможность насосу отдыхать, но при этом не слишком долго, чтобы подвал не затопило. 
Мне казалось, что расписание вида «включить на 10 минут в начале каждого часа» будет в самый раз. Но подключив насос к NetPing, и зайдя в веб-интерфейс понял, что количество включений/выключений по таймеру в день весьма ограничено.
<<скриншот>>
В розетках-таймерах, которые продают в окрестных магазинах, количество включений/выключений в день побольше, но тоже не 24. Что же делать?..
Подождите, но ведь менять режим розеток в NetPing можно по сети с другого устройства… Берем следующий perl-скрипт.


Запускаем его на сервере с помощью cron: в 00 минут каждого часа включаем, через 10 минут выключаем. Готово! 
Теперь розетку можно включать по любому, даже самому хитрому расписанию! В качестве сервера использовался NAS Synology DS411slim.
В логах NetPing отражает такую ситуацию как ручное включение/выключение нагрузки.
Особо порадовал запас по коммутируемой NetPing мощности. Все-таки насос потребляет 600Вт. За несколько месяцев работы проблем с этим не возникло. 

3. Включение нагрузки по условию


На зиму поставил греющий кабель в трубу, идущую от колодца к дому. Первое время включал ее просто по таймеру на ночь, т.к. ночью, как правило, холоднее, плюс нет расхода воды, а значит замерзание наиболее вероятно. 
Несколько раз приходили в голову мысли, что хорошо бы автоматически корректировать расписание исходя из температуры на улице, например, если мороз под -30, то пусть подогрев работает круглосуточно, а если оттепель, то подогрев можно и на ночь не включать. Правда, до реализации дело пока не дошло, но думаю, по аналогии с предыдущим примером все должно быть не сложно.
Зато дошли руки протянуть датчик температуры в подвал. Теперь можно настроить включение обогрева в зависимости от значения датчика температуры…
Такой подход в теории выглядит идеально – греет только когда есть угроза замерзания. Однако меня терзают сомнения. Чтобы это гарантированно работало, датчик должен быть установлен в самом холодном (потенциально замерзающем) месте трубы. Однако, учитывая, что большая часть трубы лежит в земле, и к ней доступа уже нет, определить «самое холодное место» и установить туда датчик несколько проблематично. Так что окончательно перейти на автоматическое включение я пока не решился.

4. Датчики температуры


Помимо управления розетками NetPing также может работать с целым набором датчиков. На пробу я заказал несколько датчиков температуры. 
Тут не обошлось без минусов: 
  • Все датчики подключаются в одну колодку параллельно. Выглядит это как паук из проводов – никакой эстетики и удобства подключения.
  • Сама колодка требует специальной тонкой отвертки (некоторые производители в таких случаях включают отвертку в комплект поставки).
  • Датчики температуры подключаются с помощью четырех тоненьких проводов без разъема на конце. Если хочется нарастить кабель, нужно доставать паяльник.
  • NetPing хранит значение температуры как целое число, поэтому не зависимо от точности датчиков, получить можно только целые градусы. По большому счету в этом нет ничего страшного, просто графики часто получаются зигзагообразные: «19-20-19-20-19-20…»


Значения термо-датчиков можно увидеть на специальной странице в веб-интерфейсе NetPing.



Программно можно получить значения датчиков по HTTP простым GET запросом или с помощью SNMP. Для примера ниже perl-скрипт для сохранения значения датчика температуры на cosm.com (ранее Pachube).

#!/usr/bin/perl 

use strict;

use warnings;

use Net::SNMP;

use Net::Pachube;

my $snmp_host = '192.168.0.130';

my $snmp_community1 = 'SWITCH';

my $snmp_oid1 = '1.3.6.1.4.1.25728.8800.1.1.2.1'; # температура в котельной

# Устанавливаем соединение

my $snmp_session;

my $snmp_error;

($snmp_session, $snmp_error) = Net::SNMP->session(

-hostname => $snmp_host,

-port => 162,

-community => $snmp_community1,

-version => 1,

) or die('Connect failed! Не удалось соединиться!');

# Для краткости не приведен код обработки нештатных ситуаций

my $result = $snmp_session->get_request(-varbindlist => [ $snmp_oid1],);

my $TempSensor1 =$result->{$snmp_oid1}; # В $result будет ссылка на хэш вида: OID => Значение

$snmp_session->close();

# Теперь полученное значение сохраняем в cosm.com

my $feed_id = "<<your ID>>";

my $APIkey ="<<your API key>>";

my $pachube = Net::Pachube->new(key=>$APIkey);

my $feed = $pachube->feed($feed_id);

$feed->update(data => [$TempSensor1]);

Результат работы аналогичного скрипта, вызываемого раз в минуту, можно посмотреть тут: https://cosm.com/feeds/83996


Обратите внимание! Зарегистрировавшись на cosm.com и написав несколько десятков строк кода мы:
— получили вполне удобный внешний интерфейс для NetPing в режиме «только для чтения» с графиками
— храним историю с интересующей нас частотой 
— и самое главное(!) При аварии или пропадании связи мы знаем точное время аварии и значения датчиков на момент аварии! Как черный ящик у самолета! 

5. Интеграция с системами домашней автоматизации


В данный момент NetPing скорее заточен под системы мониторинга серверной, чем под системы домашней автоматизации (нестандартные датчики, малое количество одновременно подключаемых датчиков, мало поддерживаемых типов датчиков). Однако сама идеология NetPing, когда датчики подключаются не напрямую к серверу, а к некому промежуточному устройству, которое в свою очередь подключается в общую Ethernet-сеть, мне кажется весьма правильной:
  • Датчики остаются простыми и дешевыми (как в 1-wire), но при этом в сети может быть более 1 мастера
  • Можно расположить устройство или несколько устройств поближе к датчикам – более простая топология сети, меньше ограничений на длину провода от датчика до устройства.
  • Выше отказоустойчивость и легче диагностика (каждый куст работает независимо).
  • Простую логику (если холодно, то включить обогрев) можно опустить на уровень контроллера и не занимать этим сервер домашней автоматизации, но при этом сохраняется возможность интеграции в общую систему.
  • За исключением датчиков температуры, мало какие датчики выдают непосредственно измеряемое значение. Как правило, они выдают напряжение или силу тока. Конвертация измеренного значения в нужные единицы, как раз работа для контроллера (устройства наподобие NetPing).
  • Еще одной хорошей идеей, реализованной в NetPing, мне кажется встроенный Ethernet switch. Что позволяет воткнуть устройство в любую Ethernet –розетку, даже если она занята. Ведь сколько ни закладывай запасных проводов, а в нужном месте все равно одного порта не хватит.

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

Перейдем от теории к практике. Недавно тестировал систему домашней автоматизации openhab. В ней заявлена поддержка SNMP, но только с помощью TRAP (GET и SET не поддерживаются). Для датчиков температуры этого оказалось достаточно.
a) В разделе «Настройки» указываем «сервер для посылки Trap сообщений»…

b) А в разделе Термодатчики -> «посылка trap сообщений» указываем «период посылки» 60 сек. 


c) В openhab заполняем конфигурационные файлы.
NetPing раз в минуту отправляет TRAP — openhab принимает и отображает. Все работает. 
С другими датчиками такой фокус пока что не возможен. Управлять розетками тоже пока нельзя. 

6. Оповещение о нештатных ситуациях


Если температура выходит за пределы указанного диапазона, устройство делает соответствующую запись в лог, который также может дублироваться на внешний Syslog-сервер.
В последней прошивке NetPing-а разработчики добавили возможность использовать их Syslog-сервер, который в свою очередь может отправлять уведомления по электронной почте. 
Когда я настраивал свою систему, такой опции еще не было, поэтому в качестве сервера на даче я использовал крошку Synology DS 411slim, для которого есть штатный сервер Syslog, который и присылает мне письмо в случае, если температура вышла за пределы указанного диапазона. 
К сожалению, о пропадании/восстановлении интернета письмом узнать не удастся, так как запись в Syslog генерируется только в момент пропадания интернета, но не после восстановления связи. 

Вместо Syslog-сервера, можно использовать SNMP Trap server. NetPing может, при выходе температуры за пределы указанного диапазона, отправлять TRAP, который можно обработать на сервере и запрограммировать соответствующую реакцию. Возможно, позднее попробую этот вариант, тогда вместо письма можно будет отправлять SMS (или и то и другое вместе). 

7. Счетчик импульсов


На закуску расскажу об одной недокументированной возможности NetPing.
Предыстория: Расход воды на даче не очень регулярен, а фильтры в системе водоподготовки требуют плановой замены. Для того чтобы точно знать момент, когда пора менять фильтры, я установил счетчик холодной воды. А раз счетчик оснащен импульсным выходом, сразу зачесались руки его к чему-нибудь подключить… 
Сначала я искал специализированные устройства, но те которые используются в ЖКХ, имеют закрытые протоколы и, как правило, стоят не разумных денег. Я уже было забросил затею подключить счетчик, как в голову пришла мысль: «А ведь у датчиков открытия/закрытия двери и у импульсного счетчика похожий принцип работы… Интересно, а NetPing запоминает количество открытий двери?»


«Разъединились половинки – уровень сигнала перешел из «0» в «1», соединились – снова вернулся в «0».»

Берем MIB Browser и смотрим, какие значения выдает NetPing:



Параметр «.1.3.6.1.4.1.25728.8900.1.1.9.1» подозрительно похож на то, что нужно! 
Подключаем счетчик воды по схеме датчика открытия двери…


Ура! На каждый литр воды, счетчик действительно увеличивается на единицу! 
Получить значение счетчика можно с помощью того же perl-скрипта, только делаем запрос сразу по нескольким oid:


my $snmp_oid1 = '1.3.6.1.4.1.25728.8800.1.1.2.1'; # температура в котельной
my $snmp_oid2 = '1.3.6.1.4.1.25728.8900.1.1.9.1'; # счетчик воды
my $result = $snmp_session->get_request(-varbindlist => [ $snmp_oid1, $snmp_oid2],);


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

Заключение


Подведем итоги.
Плюсы:
  1. Стабильная работа 24/7 в течении 2 лет (гарантия)
  2. Отлично работающий режим «Сторож» для интернет-канала
  3. Две независимые розетки
  4. Коммутируемая нагрузка до 1кВт
  5. Встроенный Ethernet switch на 2 порта
  6. Возможность подключения различных датчиков
  7. Легкая интеграция с другими устройствами и системами

Минусы
  1. Неудобное подключение датчиков
  2. Низкая точность датчиков
  3. Немного путаная документация



В заключение хочу сказать, что доволен покупкой NetPing. Свою основную работу (перезагрузку роутера) он выполняет отлично. Ну а то, что удалось еще и как следует поразвлечься, находя ему дополнительные применения, я считаю прекрасным бесплатным приложением.