Интеграция роутеров Микротик и устройств мониторинга среды и управления электропитанием Netping
Добавлено: 11 окт 2017, 22:53
Хочу представить Вашему вниманию небольшую библиотеку скриптов, позволяющих непосредственно из Роутер Ос маршрутизатора Микротик управлять устройствами компании "Алентис Электроникс" 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}
Компания Нетпинг подарила мне за эту разработку одну маленькую свою железочку. И на том спасибо.
Удачи Всем !
В частности можно включать/выключать управляемые реле, получать отчет о состоянии реле, датчиков температуры и влажности. Учитывая функционал Роутер Ос, безусловно перекрывающий своими возможностями функционал логики самих устройств Нетпинг, применение может быть самое разное. Кроме того, для обладателей роутера Микротик и этой библиотеки становится не нужным 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}
Компания Нетпинг подарила мне за эту разработку одну маленькую свою железочку. И на том спасибо.
Удачи Всем !