MANUAL: Mikrotik, colección de scripting

Voy a sumar algo con el script de Control de cambio de IP publica.

La variable devicename estan dentro del If si la IP Publica es diferente a la ultima controlada.

Por lo cual cuando sale por el ELSE, osea que son las mismas, el aviso via telegram llega sin el nombre del router.
Adjunto una imagen, antes de hacer el cambio y luego subiendo la variable fuera del IF

Ver el adjunto 88068
Cambia la declaración de la variable "DeviceName" a esta posición:

:if ($NewIP != $CurrentIP) do={
# Variables
:local Time [/system clock get time];
:local Date [/system clock get date];
:local DeviceName [/system identity get name];
:local Text "Nueva IP: $NewIP\r\nAnterior IP: $CurrentIP";

S@lu2.
 
Buenas tardes estimados. Alguno se le ocurre una manera de controlar por script una ruta?

Tengo ruta recursiva con 2 WAN.

1 WAN esta active y la otra esta dinamic static, y cuando se cae la WAN1 se activa la WAN2. Quisiera armar algo que me indique cuando la ruta pasa Active.

Otra cosa que no pude resolver, por ejemplo el script de temperatura que es interesante, solo funciona 1 vez.

Lo cree, lo modifique para que envie mail sin usar el modulo de mail, y lo mando el mail OK.
puse run script de nuevo y nada.
reinicie el mkt, arranco, run script, mando OK, aprete de nuevo y no lo mando mas.
Prueba este script que he visto por ahí y lo he adaptado: le he añadido los módulos de Telegram y Email.

** Editado 10/dic/2021 para compatibilidad con v6.x y v7.x

Bash:
:if ($bound=1) do={
/ip route set [ find comment="PrimaryRecursive" gateway!=$gw ] gateway=$gw
    /ip route set [ find comment="SecondaryRecursive" gateway!=$gw ] gateway=$gw

    # START Send Telegram Module
    :local MessageText "\E2\84\B9 $DeviceName: New gateway IP: $gw";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
    # END Send Telegram Module

    # START Send Email
    /tool e-mail send to="destinatario@gmail.com" subject="\E2\84\B9 $DeviceName: New gateway IP: $gw" body="---" file="";
    # END Send Email

    :log info "Notification sent Gateway IP Changed to $gw"
}

Lo pones en el campo script de cada Cliente DHCP (en pestaña Advanced) y lo pruebas (solo trabajo con un ISP).
Ya me cuentas.

S@lu2.
 
Última edición:
Y, si trabajas con PPPoE, creas un perfil y tienes dos tipos de eventos que puedes controlar el “on up” y “on down” para ese tipo de cosas.

Saludos!
 
Cambia la declaración de la variable "DeviceName" a esta posición:

:if ($NewIP != $CurrentIP) do={
# Variables
:local Time [/system clock get time];
:local Date [/system clock get date];
:local DeviceName [/system identity get name];
:local Text "Nueva IP: $NewIP\r\nAnterior IP: $CurrentIP";

S@lu2.
Hola Diamuxin, si es lo que hice, lo aclare, por si alguien le pasaba lo mismo jaaja. gracias!

Prueba este script que he visto por ahí y lo he adaptado: le he añadido los módulos de Telegram y Email.

Bash:
:if ($bound=1) do={
 
    :local DeviceName [ /system identity get name ]
    :local iface $interface
    :local gw [ /ip dhcp-client get [ find interface=$"iface" ] gateway ]

    /ip route set [ find comment="PrimaryRecursive" gateway!=$gw ] gateway=$gw
    /ip route set [ find comment="SecondaryRecursive" gateway!=$gw ] gateway=$gw

    # START Send Telegram Module
    :local MessageText "\E2\84\B9 $DeviceName: New gateway IP: $gw";
    :local SendTelegramMessage [:parse [/system script  get MyTGBotSendMessage source]];
    $SendTelegramMessage MessageText=$MessageText;
    # END Send Telegram Module

    # START Send Email Module
    :local SendTo "youremail@gmail.com";
    :local Subject "\E2\84\B9 $DeviceName: New gateway IP: $gw";
    :local MessageText "";
    :local FileName "";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
    # END Send Email Module

    :log info "Notification sent Gateway IP Changed to $gw"
}

Lo pones en el campo script de cada Cliente DHCP (en pestaña Advanced) y lo pruebas (solo trabajo con un ISP).
Ya me cuentas.

S@lu2.
voy a leerlo y veo la implementacion.

Y, si trabajas con PPPoE, creas un perfil y tienes dos tipos de eventos que puedes controlar el “on up” y “on down” para ese tipo de cosas.

Saludos!

Buenisimo gracias por sus sugerencias, lo bueno que tengo 2 ambientes donde lo voy aplicar y son escenarios diferentes.

Escenario 1)
Wan principal Static IP
Wan Failover DHCP Client

Escenario 2)
Wan principal PPPoE
Wan Failover DHCP Client.

Voy a implementar y les acerco novedades, gracias a los 2!
 

Script para informar sobre intentos fallidos de Login y bloquea la IP (2/2)​

Como continuación al anterior script, el siguiente informa por correo electrónico sobre los intentos fallidos de Login (configurable, en este caso con más de 2 intentos) y acto seguido mete las IPs "atacantes" en una lista de direcciones y se bloquea el acceso al router a través de una regla de firewall.

Creamos una regla específica de Logging que recopila los topics "critical,system,error" que provocan cada evento de fallo de login.

Bash:
/system logging action
add name=failedauth target=memory
/system logging
add action=failedauth topics=critical,system,error

Creamos un script con el nombre: CheckFailureLoginUser

Bash:
# By PhallaCCMT (phallaccmt.blogsport.com)
# Modified by @diamuxin

:local logBuffer "failedauth"
:local failthreshold 2
:local blocklist "Lst_AttemptLoginIP"
:local GTime [:pick [/system clock get time] 0 8]
:local DeviceName [/system identity get name];

# ----------------------------------------------------------------------------------------

:local attackiparray {0}
:local attackcountarray {0}
:local logEntryTopics
:local logEntryTime
:local logEntryMessage
:local clearedbuf
:local lines
:local datetime [/system clock get date]
:set clearedbuf 0

:local i 0
:foreach rule in=[/log print as-value where buffer=($logBuffer)] do={
# Now all data is collected in memory..

# Clear log buffer right away so new entries come in
   :if ($clearedbuf = 0) do={
      /system logging action {
         :set lines [get ($logBuffer) memory-lines]
         set ($logBuffer) memory-lines 1
         set ($logBuffer) memory-lines $lines
      }
      :set clearedbuf 1
   }
# End clear log buffer

   :set logEntryTime ""
   :set logEntryTopics ""
   :set logEntryMessage ""

:set logEntryTime ($rule->"time")
:set logEntryTopics ($rule->"topics")
:set logEntryMessage ($rule->"message")

:if ($logEntryMessage~"login failure") do={

:local attackip [:pick $logEntryMessage ([:find $logEntryMessage "from "]+5) ([:find $logEntryMessage " via"])]

:local x 0
:foreach ip in=$attackiparray do={
  :if ($ip = $attackip) do={
    :set ($attackcountarray->$x) (($attackcountarray->$x)+1)
  } else={
    :set ($attackiparray->$i) $attackip
    :set ($attackcountarray->$i) 1
  }
:set x ($x+1)
}
}
:set i ($i+1)
# end foreach rule
}
:local z 0
:foreach ip in=$attackiparray do={
  :if ($attackcountarray->$z > $failthreshold) do={
    :set ($attackcountarray->$z) 0
    /ip firewall address-list add address=($attackiparray->$z) list=$blocklist

    # START Send Email Module
    :local SendTo "destinatario@gmail.com";
    :local Subject "\E2\9A\A0 MikroTik alert on $datetime";
    :local MessageText "Your Router ($DeviceName) is attempt login by: $attackiparray at $GTime. Now it has been add to block list.";
    :local FileName "";
    :local SendEmail [:parse [/system script get SendEmailFunction source]];
    $SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
    # END Send Email Module

  }
:set ($attackcountarray->$z) 0
:set z ($z+1)
}

Creamos la tarea de programación del script con el mismo nombre: CheckFailureLoginUser (aunque puedes llamarlo como quieras)

Bash:
/system scheduler
add interval=20s name=CheckFailureLoginUser on-event=CheckFailureLoginUser \
policy=ftp,reboot,read,write,policy,test,password,sniff,sensitive,romon \
start-date=aug/18/2021 start-time=12:00:00

Por último la regla de firewall que bloquea los accesos de la address list: Lst_AttemptLoginIP

Bash:
/ip firewall filter
add action=drop chain=input comment="Drop Attempt Login User" disabled=yes src-address-list=Lst_AttemptLoginIP

Cuando el script detecta (se ejecuta cada 20s) que hay varios intentos fallidos de Login (>2) bloquea la IP y nos informa con un correo electrónico como este:

Ver el adjunto 85374

Efectivamente, desde esa IP ya no se puede acceder, ni vía Winbox ni por SSH.

S@lu2.

Buenas, he estado viendo de implementar esto y tal como está falla. Me he leído en diagonal todo el hilo y he visto alguna otra persona que le falla también.

El problema por lo que he visto, es que en la parte de envío de mails el script está tirando de otro script llamado SendEmailFunction, que si no lo tienes no enviará emails claro. El resto de funciones funcionan, mete las ips en la lista negra, lee los logs propios y luego limpia el contenido, etc...

Total que me he googleado y me he encontrado un script, que si no es el mismo será parecido al que ha puesto @diamuxin. Le he dado unas cuantas vueltas y no sé que huevos que no hay manera de que mande los mails, o errores TLS o errores AUTH o nada, nada de nada, parece que los manda pero no aparecen por ningún lado.

Al final he acabado tuneando el script así que lo dejo por aquí, por si alguien le sirve, este script tira del email definido en el propio routeros, así que debe estar configurado y funcionando en la ventana de tools -> email y luego lo probáis con:
Código:
/tool e-mail send to="pepito@gmail.com" start-tls=yes subject="MikroTik prueba" body="Hola ke ase."

Si os llega el mail es que está ok, ahora el script:

Código:
:local logBuffer "failedauth"
:local failthreshold 2
:local blocklist "Lst_AttemptLoginIP"
:local GTime [:pick [/system clock get time] 0 8]
:local DeviceName [/system identity get name];

# ----------------------------------------------------------------------------------------

:local attackiparray {0}
:local attackcountarray {0}
:local logEntryTopics
:local logEntryTime
:local logEntryMessage
:local clearedbuf
:local lines
:local datetime [/system clock get date]
:set clearedbuf 0

:local i 0
:foreach rule in=[/log print as-value where buffer=($logBuffer)] do={
# Now all data is collected in memory..

# Clear log buffer right away so new entries come in
   :if ($clearedbuf = 0) do={
      /system logging action {
         :set lines [get ($logBuffer) memory-lines]
         set ($logBuffer) memory-lines 1
         set ($logBuffer) memory-lines $lines
      }
      :set clearedbuf 1
   }
# End clear log buffer

   :set logEntryTime ""
   :set logEntryTopics ""
   :set logEntryMessage ""

:set logEntryTime ($rule->"time")
:set logEntryTopics ($rule->"topics")
:set logEntryMessage ($rule->"message")

:if ($logEntryMessage~"login failure") do={

:local attackip [:pick $logEntryMessage ([:find $logEntryMessage "from "]+5) ([:find $logEntryMessage " via"])]

:local x 0
:foreach ip in=$attackiparray do={
  :if ($ip = $attackip) do={
    :set ($attackcountarray->$x) (($attackcountarray->$x)+1)
  } else={
    :set ($attackiparray->$i) $attackip
    :set ($attackcountarray->$i) 1
  }
:set x ($x+1)
}
}
:set i ($i+1)
# end foreach rule
}
:local z 0
:foreach ip in=$attackiparray do={
  :if ($attackcountarray->$z > $failthreshold) do={
    :set ($attackcountarray->$z) 0
    /ip firewall address-list add address=($attackiparray->$z) list=$blocklist timeout=86400
    # START Send Email Module
    /tool e-mail send to="EMAILDESTINO@gmail.com" start-tls=yes subject="MikroTik alerta $datetime" body="Router ($DeviceName) intento de login por: $attackiparray a las $GTime. IP baneada 24 horas. $logEntryMessage"
    # END Send Email Module

  }
:set ($attackcountarray->$z) 0
:set z ($z+1)
}

La diferencia está al final en dos temas, la parte mail ya veis que usa directamente el comando /tool e-mail send al destinatario que pongáis. Ojo que al menos gmail sin el TLS bien puesto no funciona.

La segunda al añadir la IP a la lista de bloqueos le he metido un timeout de 24 horas, pasado el tiempo se borrará de la lista y podrá volver a acceder.
Si fallas 3 veces la contraseña te baneará 24 horas, el tiempo de fallo será el que defináis en la programación de la tarea.
 
Buenas, he estado viendo de implementar esto y tal como está falla. Me he leído en diagonal todo el hilo y he visto alguna otra persona que le falla también.

El problema por lo que he visto, es que en la parte de envío de mails el script está tirando de otro script llamado SendEmailFunction, que si no lo tienes no enviará emails claro. El resto de funciones funcionan, mete las ips en la lista negra, lee los logs propios y luego limpia el contenido, etc...

Total que me he googleado y me he encontrado un script, que si no es el mismo será parecido al que ha puesto @diamuxin. Le he dado unas cuantas vueltas y no sé que huevos que no hay manera de que mande los mails, o errores TLS o errores AUTH o nada, nada de nada, parece que los manda pero no aparecen por ningún lado.

Al final he acabado tuneando el script así que lo dejo por aquí, por si alguien le sirve, este script tira del email definido en el propio routeros, así que debe estar configurado y funcionando en la ventana de tools -> email y luego lo probáis con:
Código:
/tool e-mail send to="pepito@gmail.com" start-tls=yes subject="MikroTik prueba" body="Hola ke ase."

Si os llega el mail es que está ok, ahora el script:

Código:
:local logBuffer "failedauth"
:local failthreshold 2
:local blocklist "Lst_AttemptLoginIP"
:local GTime [:pick [/system clock get time] 0 8]
:local DeviceName [/system identity get name];

# ----------------------------------------------------------------------------------------

:local attackiparray {0}
:local attackcountarray {0}
:local logEntryTopics
:local logEntryTime
:local logEntryMessage
:local clearedbuf
:local lines
:local datetime [/system clock get date]
:set clearedbuf 0

:local i 0
:foreach rule in=[/log print as-value where buffer=($logBuffer)] do={
# Now all data is collected in memory..

# Clear log buffer right away so new entries come in
   :if ($clearedbuf = 0) do={
      /system logging action {
         :set lines [get ($logBuffer) memory-lines]
         set ($logBuffer) memory-lines 1
         set ($logBuffer) memory-lines $lines
      }
      :set clearedbuf 1
   }
# End clear log buffer

   :set logEntryTime ""
   :set logEntryTopics ""
   :set logEntryMessage ""

:set logEntryTime ($rule->"time")
:set logEntryTopics ($rule->"topics")
:set logEntryMessage ($rule->"message")

:if ($logEntryMessage~"login failure") do={

:local attackip [:pick $logEntryMessage ([:find $logEntryMessage "from "]+5) ([:find $logEntryMessage " via"])]

:local x 0
:foreach ip in=$attackiparray do={
  :if ($ip = $attackip) do={
    :set ($attackcountarray->$x) (($attackcountarray->$x)+1)
  } else={
    :set ($attackiparray->$i) $attackip
    :set ($attackcountarray->$i) 1
  }
:set x ($x+1)
}
}
:set i ($i+1)
# end foreach rule
}
:local z 0
:foreach ip in=$attackiparray do={
  :if ($attackcountarray->$z > $failthreshold) do={
    :set ($attackcountarray->$z) 0
    /ip firewall address-list add address=($attackiparray->$z) list=$blocklist timeout=86400
    # START Send Email Module
    /tool e-mail send to="EMAILDESTINO@gmail.com" start-tls=yes subject="MikroTik alerta $datetime" body="Router ($DeviceName) intento de login por: $attackiparray a las $GTime. IP baneada 24 horas. $logEntryMessage"
    # END Send Email Module

  }
:set ($attackcountarray->$z) 0
:set z ($z+1)
}

La diferencia está al final en dos temas, la parte mail ya veis que usa directamente el comando /tool e-mail send al destinatario que pongáis. Ojo que al menos gmail sin el TLS bien puesto no funciona.

La segunda al añadir la IP a la lista de bloqueos le he metido un timeout de 24 horas, pasado el tiempo se borrará de la lista y podrá volver a acceder.
Si fallas 3 veces la contraseña te baneará 24 horas, el tiempo de fallo será el que defináis en la programación de la tarea.
En los primeros Scripts de este hilo hago referencia del uso de los módulos SendEmailFunction (para Email) y MyTGBotSendMessage (para Telegram) para simplificar y ordenar el código.

El que comentas de SendEmailFunction tal como está funciona correctamente:

Bash:
# Variables
:local SendFrom "Mikrotik Despacho";
:local PasswordMail "micontrasenagmail";
:local SmtpServer 173.194.76.108;
:local UserName "miusuariogmail";
:local SmtpPort 587;
:local UseTLS "yes";

# Main script code
/tool e-mail send to=$SendTo server=$SmtpServer port=$SmtpPort \
    start-tls=$UseTLS user=$UserName password=$PasswordMail \
    from=$SendFrom subject=$Subject body=$TextMail file=$FileName;

!OJO! En los módulos descritos hay que tener marcado "Don't Require Permissions" para que funcione correctamente, a ver si ese ha sido tu problema.

Por lo demás, aplaudo que hayas intentado solucionarlo por tus medios, eso es lo divertido del scripting.
Como dice mi firma: Pruébalo de nuevo, Falla otra vez, Falla mejor...

S@lu2.
 
Última edición:
En los primeros Scripts de este hilo hago referencia del uso de los módulos SendEmailFunction (para Email) y MyTGBotSendMessage (para Telegram) para simplificar y ordenar el código.

El que comentas de SendEmailFunction tal como está funciona correctamente:
!OJO! En los módulos descritos hay que tener marcado "Don't Require Permissions" para que funcione correctamente, a ver si ese ha sido tu problema.

Por lo demás, aplaudo que hayas intentado solucionarlo por tus medios, eso es lo divertido del scripting.
Como dice mi firma: Pruébalo de nuevo, Falla otra vez, Falla mejor...

No vi en el hilo esos módulos, pero ya te digo que leí el hilo en diagonal.
Lo encontré aquí: https://mhelp.pro/mikrotik-scripts-sending-notifications-and-files-to-email/ y ya especifica lo de "Dont require permissions", no sé si es igual que el que pegas línea por línea pero tiene pinta.

Lo único que no probé es a poner la ip del smtp en lugar del nombre o o la resolución que hace :)local SmtpServer [:resolve "smtp.mail.com"];) pero da igual, porque si el servidor responde con errores es que resuelve y que llega.

La otra diferencia es lo del TLS, en la config interna funciona con "tls-only" y solo así.
Pero lo cachondo es que si envías el mail con el comando largo especificando servidores, puertos, etc... y usas el start-tls=tls-only, da error de tls ¿?¿? debes poner start-tls=yes y no da error, pero como digo, no envía.
Y usando la forma corta para que tire del smtp predefinido este envía con tls-only...

Yo creo que esto pasa por una diferente implementación entre modelos, con la cantidad de cifradores que hay ahora que no extrañe que uno esté en un lado y otro no.
O lo más probable que gmail esté dando por culo, que es de lejos el smtp más pijotero que te puedes encontrar.
 
Muy buenas.

Una vez actualizado a la versión 7.1, el script SendEmailFunction no funciona correctamente y, en mi caso, todos los scripts que lo utilizan se rompen y no terminan su ejecución.

Al ejecutarlo de manera indepedndiente en un terminal, da como resultado un error que no sé corregir:
sys script run SendEmailFunction
expected end of command (line 11 column 64)

Agradecería cualquier ayuda que pudierais prestarme para solucionarlo. Muchas gracias.
 
Investiga qué ha cambiado en la sintaxis, y actualiza la misma.

Saludos!
 
Muy buenas.

Una vez actualizado a la versión 7.1, el script SendEmailFunction no funciona correctamente y, en mi caso, todos los scripts que lo utilizan se rompen y no terminan su ejecución.

Al ejecutarlo de manera indepedndiente en un terminal, da como resultado un error que no sé corregir:
sys script run SendEmailFunction
expected end of command (line 11 column 64)

Agradecería cualquier ayuda que pudierais prestarme para solucionarlo. Muchas gracias.
Muy buenas,

Efectivamente me ha pasado como a ti, en las versiones 6.4X funciona bien pero al instalar la 7.1 he tenido que eliminar ese módulo y utilizar la herramienta Email que proporciona RouterOS, te explico:

Dentro de cada script para enviar los correos electrónicos, utilizaba un módulo como este, que llamaba a la función que comentas "SendEmailFunction".

Ejemplo:

Bash:
# START Send Email Module
:local SendTo "destino@gmail.com";
:local Subject "\E2\84\B9 MyRouter: IP WAN ha cambiado.";
:local MessageText "Nueva IP: $NewIP\nAnterior IP: $CurrentIP";
:local FileName "";
:local SendEmail [:parse [/system script get SendEmailFunction source]];
$SendEmail SendTo=$SendTo TextMail=$MessageText Subject=$Subject FileName=$FileName;
# END Send Email Module

Ese módulo lo he sustituido por:

Bash:
# START Send Email
/tool e-mail send to="destino@gmail.com" subject="\E2\84\B9 MyRouter: \
    IP WAN ha cambiado" body="Nueva IP: $NewIP\nAnterior IP: $CurrentIP";
# END Send Email

Naturalmente para que funcione debes tener configurado la utilidad E-mail dentro del menú [Tools]

Bash:
/tool e-mail
set address=173.194.76.108 from="MyRouter" port=587 tls=starttls user=usuariogmail
# user= es el usuario de tu cuenta gmail que utilizas para los envíos.

Toca revisarlos y hacer los cambios a mano. Ha habido también algún cambio en la sintaxis de la v7.1.

S@lu2.
 
Última edición:
Muy buenas,

Efectivamente me ha pasado como a ti, en las versiones 6.4X funciona bien pero al instalar la 7.1 he tenido que eliminar ese módulo y utilizar la herramienta Email que proporciona RouterOS, te explico:

Dentro de cada script para enviar los correos electrónicos, utilizaba un módulo como este, que llamaba a la función que comentas "SendEmailFunctio
Muchísimas gracias, diamuxin. Estaba buscando por internet si había algún cambio en la sintaxis de start-tls en la v7.1, como me decía pokoyo, pero no había encontrado nada útil. Lo dicho, muchísimas gracias.
 
Toca revisarlos y hacer los cambios a mano. Ha habido también algún cambio en la sintaxis de la v7.1.
Los de Mikrotik podían habernos regalado un conversor de scripts de v6 a v7. ;-)
Intento leerme la wiki (sobre los scripts) y acabo saturado de tantos datos.
Yo la verdad que le estoy sacando mucho partido a los scripts via Telegram y email, pero la verdad que la conversión a v7 se me hace cuesta arriba.
 
Los de Mikrotik podían habernos regalado un conversor de scripts de v6 a v7. ;-)
Intento leerme la wiki (sobre los scripts) y acabo saturado de tantos datos.
Yo la verdad que le estoy sacando mucho partido a los scripts via Telegram y email, pero la verdad que la conversión a v7 se me hace cuesta arriba.
A mi me tocó corregir algunos, no todos, pero al final ya están funcionando. Si se te resiste alguno, coméntalo por aquí y lo vemos.

S@lu2.
 
A mi me tocó corregir algunos, no todos, pero al final ya están funcionando. Si se te resiste alguno, coméntalo por aquí y lo vemos.
Pues sería buena idea volverlos poner con las correcciones para la v7, ya que podía ser de utilidad para muchos foreros ya que con el tiempo acabaremos todos en v7. Gracias.
Yo sigo en v6 pero tengo un equipo con v7 para ir haciendo pruebas y dar el salto pronto. Precisamente lo que me frena son los scripts.

Captura de pantalla_2021-12-09_20-14-52.png
 
Última edición:
Pues sería buena idea volverlos poner con las correcciones para la v7, ya que podía ser de utilidad para muchos foreros ya que con el tiempo acabaremos todos en v7. Gracias.
Yo sigo en v6 pero tengo un equipo con v7 para ir haciendo pruebas y dar el salto pronto. Precisamente lo que me frena son los scripts.
Si, había pensado ir editando algunos scripts y añadir anotaciones para la v7, pero el 80% de los fallos de ejecución es el módulo de Email, ya se resuelve siguiendo el hilo anterior https://www.adslzone.net/foro/mikro...oleccion-scripting.575217/page-6#post-3622779

S@lu2
 
Si, había pensado ir editando algunos scripts y añadir anotaciones para la v7, pero el 80% de los fallos de ejecución es el módulo de Email, ya se resuelve siguiendo el hilo anterior https://www.adslzone.net/foro/mikro...oleccion-scripting.575217/page-6#post-3622779

S@lu2
Hola, la pena que al quitar la función de Email como estaba antes ya no tiene el mismo juego, dado que antes podías tener varías con diferentes cuentas y ahora solo con una al tenerlo que hacer con la herramienta de Tool.

Saludos
 
A mi se me resisten los scripts en la v7.

Los utilizo para mandar la información a través de Telegram.
Uno me funciona y el otro no.

Script que sí funciona :

Captura de pantalla_2021-12-10_11-42-55.png

:local DeviceName [/system identity get name];
:local txtotal (([/interface get [find name=ether1] tx-byte])/1073741824);
:local rxtotal (([/interface get [find name=ether1] rx-byte])/1073741824);

# START Send Telegram Module
:local MessageText "\F0\9F\8F\81 <b>Traffic Monitor: $DeviceName</b>%0A%0AUpload : $txtotal GBs%0A%0ADownload : $rxtotal GBs%0A%0ATotal : $(txtotal+rxtotal) GBs";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module

:log info "Enviado a Telegram - Traffic Monitor"

Captura de pantalla_2021-12-10_11-40-15.png

Script que no me funciona (modificado por @diamuxin para v7) :

:local ipv4 [/ip cloud get public-address];
:local ipv6 [/ip cloud get public-address-ipv6];
:local uptime [/system resource get uptime];
:local CurrentTemp [/system health get [find name=temperature] value];
:local FreeMemory ([/system resource get free-memory] / 1024 / 1024);
:local TotalMemory ([/system resource get total-memory] / 1024 / 1024);
:local cpu [/system resource get cpu];
:local cpuCount [/system resource get cpu-count];
:local cpuFrequency [/system resource get cpu-frequency];
:local cpuLoad [/system resource get cpu-load];
:local freeHdd ([/system resource get free-hdd-space] / 1024 / 1024);
:local totalHdd ([/system resource get total-hdd-space] /1024 / 1024);
:local architectureName [/system resource get architecture-name];
:local boardName [/system resource get board-name];
:local version [/system resource get version];
:local DeviceName [/system identity get name];


# START Send Telegram Module
:local MessageText "\F0\9F\9A\80 $DeviceName System Status:%0AIPv4: $ipv4%0AIPv6: $ipv6%0ATemperature: $CurrentTemp %C2%B0 C%0AUptime: $uptime%0AFree Memory: $FreeMemory MB%0ATotal Memory: $TotalMemory MB%0ACPU Load: $cpuLoad %%0ACPU: $cpu%0ACPU Count: $cpuCount%0ACPU Frequency: $cpuFrequency MHz%0AArchitecture: $architectureName%0ABoard Name: $boardName%0ASoftware Version: $version%0AFree Disk: $freeHdd MB%0ATotal Disk: $totalHdd MB";
:local SendTelegramMessage [:parse [/system script get MyTGBotSendMessage source]];
$SendTelegramMessage MessageText=$MessageText;
#END Send Telegram Module

:log info "Enviado a Telegram - System Status"

Captura de pantalla_2021-12-10_11-39-52.png

Saludos y gracias.
 
A mi se me resisten los scripts en la v7.

Los utilizo para mandar la información a través de Telegram.
Uno me funciona y el otro no.

Script que sí funciona :

Ver el adjunto 89283



Ver el adjunto 89289

Script que no me funciona (modificado por @diamuxin para v7) :



Ver el adjunto 89292

Saludos y gracias.

Lo acabo de probar y me va perfectamente:

Enviado desde el terminal:
jje3qmHDES.png

1639135717712.png


Resultado en Telegram:
3Gy1uJQrgd.png


Pruébalo desde el terminal como lo ves en la primera imagen, si hay algún fallo te va a reportar en que columna, fila del código está el error. Desconozco si en el hEX-S es distinta la sintaxis a la hora de obtener datos.

S@lu2.
 
Última edición:
Pruébalo desde el terminal como lo ves en la primera imagen, si hay algún fallo te va a reportar en que columna, fila del código está el error. Desconozco si en el hEX-S es distinta la sintaxis a la hora de obtener datos.

Entiendo que el módulo MyTGBotSendMessage de Telegram te funciona bien con otros scripts, no?

Cuando pueda lo pruebo en terminal.
Sí Funciona el módulo de Telegram y muestra el resultado en la app del script que si me funciona.
Estoy probando en un hAP AC2 y un hAP AC antes de subir la v7 al hEX-S.
Gracias.
 
Última edición:
Arriba