Интеграция роутеров Микротик и устройств мониторинга среды и управления электропитанием Netping

Здесь выкладываем скрипты
Правила форума
Уважаемые Пользователи форума, обратите внимание!
Ни при каких обстоятельствах, Администрация форума, не несёт ответственности за какой-либо, прямой или косвенный, ущерб причиненный в результате использования материалов, взятых на этом Сайте или на любом другом сайте, на который имеется гиперссылка с данного Сайта. Возникновение неисправностей, потерю программ или данных в Ваших устройствах, даже если Администрация будет явно поставлена в известность о возможности такого ущерба.
Просим Вас быть предельно осторожными и внимательными, в использовании материалов раздела. Учитывать не только Ваши пожелания, но и границы возможностей вашего оборудования.
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Хочу представить Вашему вниманию небольшую библиотеку скриптов, позволяющих непосредственно из Роутер Ос маршрутизатора Микротик управлять устройствами компании "Алентис Электроникс" Netping (www.netping.ru).
В частности можно включать/выключать управляемые реле, получать отчет о состоянии реле, датчиков температуры и влажности. Учитывая функционал Роутер Ос, безусловно перекрывающий своими возможностями функционал логики самих устройств Нетпинг, применение может быть самое разное. Кроме того, для обладателей роутера Микротик и этой библиотеки становится не нужным SMS-шлюз компании, все оповещение берет на себя Микротик.
Итак вот функции:

:global NPuser "visor";
:global NPpass "ping";
:global NPadr "192.168.0.100"; # адрес устройства НЕТПИНГ в Вашей сети;

################ FuncNPSetrele ###############
# Функция установки состояния реле PDU Netping
# by Sergej Serkov 25.09.2017
#############################################

# Применение:
# В качестве параметров функции в Nrele нужно передавать номер реле
# в Rstatus - совершаемое действие (0-выключить; 1-включить)
# Вызов функции
# [$FuncNPSetrele Nrele="2" Rstatus="1"]
# ответ исполнения возвращается в $NPanawer


# определяем функцию, устанавливающую реле Нетпинг
:global FuncNPSetrele do={:global NPuser; :global NPpass; : global NPadr; :local StrFetchRele; :set StrFetchRele ("http://"."$NPadr"."/relay.cgi\?r"."$Nrele"."="."$Rstatus"); [/tool fetch url=$StrFetchRele mode=http user=$NPuser password=$NPpass dst-path="NPanswer.txt";];
:delay 2s;
:local NPanswer [/file get NPanswer.txt contents];
/file remove NPanswer.txt;
:return $NPanswer}

############## FuncNPGetrele ###############
# Функия опроса состояния реле PDU Netping
# by Sergej Serkov 22.09.2017
###########################################

# Применение:
# В качестве параметра функции Nrele нужно передавать номер реле
# Например опрашиваем второе реле:
# [$FuncNPGetrele Nrele="2"]

# возвращает ответ Нетпинг в $NPanswer

# также возвращает в глобальных переменных:
# -----------------------------------------------------------------------------
# relechannel - канал управления реле
# 0 - выключено в ручную
# 1- включено в ручную
# 2 - работает от канала "Сторож"
# 3 - работает по расписанию
# 4 - расписание + сторож
# 5 - управляется модулем "Логика"
# 6 - расписание + логика

# relestatus - состояние реле
# 0 - выключено;
# 1 - включено;



# определяем функцию, возвращающую ответ от реле Нетпинг
:global FuncNPGetrele do={:global NPuser; :global NPpass; global NPadr; :local StrFetchRele; :set StrFetchRele ("http://"."$NPadr"."/relay.cgi\?r"."$Nrele"); [/tool fetch url=$StrFetchRele mode=http user=$NPuser password=$NPpass dst-path="NPanswer.txt";];
:delay 2s;
:local NPanswer [/file get NPanswer.txt contents];
/file remove NPanswer.txt;
:local endLoc;
:set $endLoc [:find $NPanswer ","];
:global relechannel [:pick $NPanswer ($endLoc+2) ($endLoc+3)]; # канал управления реле;
:global relestatus [:pick $NPanswer ($endLoc+5) ($endLoc+6)]; # состояние реле;
:return $NPanswer
}

################ FuncNPTermo ##################
# Функия опроса термодатчика PDU Netping
# by Sergej Serkov 25.09.2017
#############################################
# Применение:
# В качестве параметра функции NPtr нужно передавать номер термодатчика
# Например опрашиваем второй термодатчик:
# [$FuncNPTermo NPtr="2"]

# определяем функцию, опрашивающую термодатчик с номером NPtr устройства Нетпинг
:global FuncNPTermo do={:global NPuser; :global NPpass; :local StrFetchTermo; :global NPadr; :set StrFetchTermo ("http://"."$NPadr"."/thermo.cgi?t"."$NPtr"); [/tool fetch url=$StrFetchTermo mode=http user=$NPuser password=$NPpass dst-path="NPanswer.txt";];
:delay 2s;
:local NPanswer [/file get NPanswer.txt contents];
/file remove NPanswer.txt;
# блок вычисления из ответа Нетпинг температуры на датчике и статус датчика

:global Termotemp;
:global Termostatus;
:local string $NPanswer;
:local resultlen [:len $string];
:local startloc 0
:local endloc ($resultlen-1)
:set string [:pick $string $startloc $endloc];
:local endloc [:find $string ","]
:set string [:pick $string ($endloc+1) $resultlen];
:set startloc [:pick $string ($endloc+1) $resultlen];
:local endloc2 [:find [:pick $string $startloc $resultlen] ","]
:set Termotemp [:pick $string ($startloc+1) $endloc2];
:set string [:pick $string ($endloc2+1) $resultlen];
:set startloc [:pick $string ($endloc2+1) $resultlen];
:local endloc3 [:find [:pick $string $startloc $resultlen] ")"]
:set Termostatus [:pick $string ($startloc+1) $endloc3];

:if ($Termostatus !="0") do={} else={:set NPanswer "ThermoERROR";}

:return $NPanswer;}

################ FuncNPhumidity ###############
# Функии опроса датчика влажности PDU Netping
# by Sergej Serkov 25.09.2017
##############################################

# нужно указывать номер датчика Nhd "0"
#
# объявить глобальные переменные $Hamydtemp, $Hamydtempstatus, $HamydHD, $Hamydstatus
# Возвращают ответ:
# $NPhd - влажность датчика
# $NPtr - температура датчика
# ответ возвращает в виде "relhum_result('ok', t, s)" и "relhum_result('ok', h, s)"
# если s ($Hamydtempstatus) = 0 - $NPtr ="HamidityThermoERROR" (Датчик не подключен или отказ датчика);
# аналогично $NPhd = "HamidityERROR"


# определяем функцию, возвращающую ответ температуры от датчика Нетпинг
:global FuncNPHtr do={:global NPuser; :global NPpass; :global NPadr; :local StrFetchTR; :set StrFetchTR ("http://"."$NPadr"."/relhum.cgi?t"."$Nhd"); [/tool fetch url=$StrFetchTR mode=http user=$NPuser password=$NPpass dst-path="NPanswer.txt";];
:delay 2s;
:local NPtr [/file get NPanswer.txt contents];
/file remove NPanswer.txt;

:global Hamydtemp;
:global Hamydtempstatus;
:local string $NPtr;
:local resultlen [:len $string];
:local startloc 0
:local endloc ($resultlen-1)
:set string [:pick $string $startloc $endloc];
:local endloc [:find $string ","]
:set string [:pick $string ($endloc+1) $resultlen];
:set startloc [:pick $string ($endloc+1) $resultlen];
:local endloc2 [:find [:pick $string $startloc $resultlen] ","]
:set Hamydtemp [:pick $string ($startloc+1) $endloc2];
:set string [:pick $string ($endloc2+1) $resultlen];
:set startloc [:pick $string ($endloc2+1) $resultlen];
:local endloc3 [:find [:pick $string $startloc $resultlen] ")"]
:set Hamydtempstatus [:pick $string ($startloc+1) $endloc3];

:if ($Hamydtempstatus !="0") do={} else={:set NPtr "HamidityThermoERROR";}

:return $NPtr}

# определяем функцию, возвращающую ответ влажность от датчика Нетпинг
:global FuncNPHhd do={:global NPuser; :global NPpass; :global NPadr; :local StrFetchHD; :set StrFetchHD ("http://"."$NPadr"."/relhum.cgi?h"."$Nhd"); [/tool fetch url=$StrFetchHD mode=http user=$NPuser password=$NPpass dst-path="NPanswer.txt";];
:delay 2s;
:local NPhd [/file get NPanswer.txt contents];
/file remove NPanswer.txt;

:global HamydHD;
:global Hamydstatus;
:local string $NPhd;
:local resultlen [:len $string];
:local startloc 0
:local endloc ($resultlen-1)
:set string [:pick $string $startloc $endloc];
:local endloc [:find $string ","]
:set string [:pick $string ($endloc+1) $resultlen];
:set startloc [:pick $string ($endloc+1) $resultlen];
:local endloc2 [:find [:pick $string $startloc $resultlen] ","]
:set HamydHD [:pick $string ($startloc+1) $endloc2];
:set string [:pick $string ($endloc2+1) $resultlen];
:set startloc [:pick $string ($endloc2+1) $resultlen];
:local endloc3 [:find [:pick $string $startloc $resultlen] ")"]
:set Hamydstatus [:pick $string ($startloc+1) $endloc3];

:if ($Hamydstatus !="0") do={} else={:set NPhd "HamidityERROR";}

:return $NPhd}

Компания Нетпинг подарила мне за эту разработку одну маленькую свою железочку. И на том спасибо.
Удачи Всем !


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
gmx
Модератор
Сообщения: 3290
Зарегистрирован: 01 окт 2012, 14:48

Да, спасибо...

У меня много устройств NetPing.


Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Вот еще к моим функциям примеры их вызовов из других скриптов:


# script_call_FUNC_NP_Setrele oct/12/2017 09:27:32


# Применение:
# Nrele нужно передавать номер реле
# Rstatus - действие

:global NPadr
:global FuncNPSetrele;

:local NPanswer [$FuncNPSetrele Nrele="2" Rstatus="0"]
:log info $NPanswer;



# script_call_FUNC_NP_Getrele oct/12/2017 09:28:55


:log error "________ОТЧЕТ РЕЛЕ _________";
:local Rele "3";
:global NPadr;
:global relechannel;
:global relestatus;
:global FuncNPGetrele;
:local NPanswer [$FuncNPGetrele Nrele=$Rele]
:log info $NPanswer;

:log info "";
:log info "------------------------------";
:log warning ("Реле №"."$Rele")
:log info ("Канал управления реле ". "$relechannel");
:if ($relestatus=0) do={:log info "Реле выключено"} else={:log info "Реле включено"}
:log info "------------------------------";
:log info "";



# script_call_FUNC_NP_Termo oct/12/2017 09:28:11


# Применение:
# В NPtr нужно передавать номер термодатчика

:global FuncNPTermo;
:global Termotemp;
:global Termostatus;

# опрашиваем термодатчик №1
:local NPtr "4";

# Вызываем функцию опроса термодатчика
:local NPanswer [$FuncNPTermo NPtr=$NPtr];

:log info "";
:if ($NPanswer != "ThermoERROR") do={
:log warning ("Термодатчик_№:"."$NPtr"." $Termotemp"." С");
:log warning ("Статус датчика:"." $Termostatus");
} else= {:log info ""; log error ("ТЕРМОДАТЧИК №"." $NPtr"." НЕ ПОДКЛЮЧЕН"); :log info "";}




# script_call_FUNC_NP_Hamidity oct/12/2017 09:26:20


# номер датчика влажности Nhd должен быть "0"

:global NPadr;

:global Hamydtemp;
:global Hamydtempstatus;
:global FuncNPHtr;

:global HamydHD;
:global Hamydstatus;
:global FuncNPHhd;

:local NPtr [$FuncNPHtr Nhd="0"];
:delay 5s;
:local NPhd [$FuncNPHhd Nhd="0"];
:log info "";
:log info $NPtr;
:log warning ("Комбинированный датчик - Температура:". " $Hamydtemp"." С");
#:log info $Hamydtempstatus;

:log info $NPhd;
:log warning ("Комбинированный датчик - Влажность:". " $HamydHD"." %");
#:log info $Hamydstatus;

:log info "";


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Спасибо огромное автору за щедрость и широту души. Перенес в готовые скрипты. Пусть будет под рукой.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

Спасибо за теплые слова.
Сегодня посетил МУМ 2017 ! Завтра еще один день конференции. В качестве подарков всем участникам компания дарит wifi-точку Сap lite !


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
Vlad-2
Модератор
Сообщения: 2531
Зарегистрирован: 08 апр 2016, 19:19
Откуда: Петропавловск-Камчатский (п-ов Камчатка)
Контактная информация:

Sertik писал(а):Спасибо за теплые слова.
Сегодня посетил МУМ 2017 ! Завтра еще один день конференции. В качестве подарков всем участникам компания дарит wifi-точку Сap lite !

По-ОФФтопчу (заранее сорри)

МУМ - круто! Браво!
Увидите Олега и Ирину (известные тренеры) - привет им передайте с Камчатки.
Если будет возможность или просто Вы будете делать пару неформальных фотографий для себя - выложите куда-то,
хочется ощутить/увидеть обстановку МУМа (не постановочную, как делают фотографы...а обычную,жизненную)!



На работе(ах): 2xCCR1016-12G, RB3011UiAS и hAP lite (RB941)
Дома: CCR1016-12G, RBcAP2n (standalone), RB wAP LTE kit
Для тестов(под рукой): RB3011UiAS, hAP mini (RB931) и что-то ещё по мелочи
MTCNA
MTCRE
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Народу много на MUM пришло?


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Аватара пользователя
Dragon_Knight
Сообщения: 1724
Зарегистрирован: 26 мар 2012, 18:21
Откуда: МО, Мытищи
Контактная информация:

Блин, хотел сходить на MUM, но одному скучно, а тут забыл спросить :*(


Небольшой свод правил логики и ссылок:
  1. Если устройство имеет Ethernet порт, то оно обязано быть подключено через него. Компьютер, Ноутбук, Телевизор, Принтер, Камера видеонаблюдения, и т.д.
  2. Если нет возможности протянуть кабель, то найдите её, или страдайте со своими проблемами Wi-Fi дальше.
  3. Wi-Fi это сеть для мобильных устройств. Если Вы подключили свой шикарный 50" телевизор не кабелем, то без фотоотчёта, когда он лежит у Вас в кармане дальнейшего разговора не получиться. Это относится и ко всем остальным устройствам.
  4. Если Ваше устройство вызывает вопросы в работе, первое что необходимо делать: NetInstall + дальнейшая настройка вручную.
  5. Не используйте WebFig или QuickSet - это пути к глюкам и ошибкам. Только SSH или WinBox, и да, - WinBox есть под Android.
  6. name.rsc - это текстовый файл, и Вы можете его открыть блокнотом.
  7. Если Вы хотите связаться со мной для ремонта или настройки, то: Telegram ( Не благотворительность ).
  8. Мой сайт по Mikrotik: Global Zone >> MikroTik.
Sertik
Сообщения: 1598
Зарегистрирован: 15 сен 2017, 09:03

На Мум в этот раз зарегистрировалось 3000 человек ! Пришло вроде как больше 1000. В зале не хватило мест, стояли и сидели в проходах.


фрагменты скриптов, готовые работы, статьи, полезные приемы, ссылки
viewtopic.php?f=14&t=13947
Аватара пользователя
podarok66
Модератор
Сообщения: 4355
Зарегистрирован: 11 фев 2012, 18:49
Откуда: МО

Вот-вот, люди в проходах!!!Во мне сразу встает в полный рост интроверт, и мне становится очень неуютно в этой толпе. Не комфортно , душно ( причем в большей степени психологически) , и сразу забываю об интересе.


Мануалы изучил и нигде не ошибся? Фаервол отключил? Очереди погасил? Витая пара проверена? ... Тогда Netinstal'ом железку прошей и настрой ее заново. Что, все равно не фурычит? Тогда к нам. Если не подскажем, хоть посочувствуем...
Ответить