Страница 1 из 2

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

Добавлено: 11 окт 2017, 22:53
Sertik
Хочу представить Вашему вниманию небольшую библиотеку скриптов, позволяющих непосредственно из Роутер Ос маршрутизатора Микротик управлять устройствами компании "Алентис Электроникс" 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}

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

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

Добавлено: 12 окт 2017, 08:18
gmx
Да, спасибо...

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

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

Добавлено: 12 окт 2017, 09:34
Sertik
Вот еще к моим функциям примеры их вызовов из других скриптов:


# 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 "";

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

Добавлено: 12 окт 2017, 16:01
podarok66
Спасибо огромное автору за щедрость и широту души. Перенес в готовые скрипты. Пусть будет под рукой.

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

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

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

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

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

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

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

Добавлено: 13 окт 2017, 18:27
podarok66
Народу много на MUM пришло?

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

Добавлено: 13 окт 2017, 19:08
Dragon_Knight
Блин, хотел сходить на MUM, но одному скучно, а тут забыл спросить :*(

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

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

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

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