Configuración de Hotspot MikroTik para Venta de Pines y Vouchers
Video
Objetivo: ¿Qué vas a conseguir?
¿Qué necesitamos?
1. Trabajamos con base a https://jcts.com.co/configuracion-hotspot-mikrotik-routeros-v7 donde previamente realizamos la configuración inicial básica del hotspot en mikrotik versión 7.
Importación de perfiles para tiempo y velocidad
/ip hotspot user profile
add mac-cookie-timeout=1h name=Plan_1h on-login="{\r\
\n:local tdias 0\r\
\n:local atime [ /system clock get time ]\r\
\n:local adate [ /system clock get date ]\r\
\n:local mes1 [:pick \$adate 5 7]\r\
\n:local dia1 [:pick \$adate 8 10]\r\
\n:local horaminutos [:pick \$atime 0 5]\r\
\n:local thoras 1\r\
\n:local comentariouser (\"Mes: \" . \$mes1 . \" D\EDa: \" . \$dia1 . \" Hora: \" . \$horaminutos . \" Horas: \" . \$thoras);\r\
\n:if ([ /ip hotspot user get \$user comment ]=\"\") do={ [ /ip hotspot user set \$user comment=\$comentariouser ] }\r\
\n\r\
\n# Agrego un registro en el LOG del usuario\r\
\n/log info \"Usuario= \$user \$adate \$atime Dias: \$tdias \";\r\
\n:local monthtxt [:pick \$adate 5 7]\r\
\n:local mesarray (\"01\",\"02\",\"03\",\"04\",\"05\",\"06\",\"07\",\"08\",\"09\",\"10\",\"11\",\"12\")\r\
\n:local diaarray (\"31\",\"28\",\"31\",\"30\",\"31\",\"30\",\"31\",\"31\",\"30\",\"31\",\"30\",\"31\")\r\
\n:local day [:pick \$adate 8 10]\r\
\n:local months ([:find \$mesarray \$monthtxt])\r\
\n:local year [:pick \$adate 0 4]\r\
\n:local dia ([:pick \$diaarray \$months])\r\
\n:local fhora [:pick \$atime 0 2]\r\
\n:local fminutos [:pick \$atime 3 5]\r\
\n:local fsegundos [:pick \$atime 6 9]\r\
\n:local mayorhora ((\$fhora+\$thoras)-24)\r\
\n\r\
\n:if ((\$fhora+\$thoras)>23) do={\r\
\n:set atime (\"0\".\$mayorhora.\":\".\$fminutos.\":\".fsegundos);\r\
\n:set \$tdias (\$tdias+1);\r\
\n} else={\r\
\n:set atime ((\$fhora+\$thoras).\":\".\$fminutos.\":\".fsegundos) ;\r\
\n}\r\
\n\r\
\n:log info \$atime;\r\
\n\r\
\n:if ((\$day+\$tdias)>\$dia) do={\r\
\n:if (\$months=11) do={\r\
\n:set months 0;\r\
\n:set year (\$year+1);\r\
\n:set day ((\$day+\$tdias)-\$dia);\r\
\n:local mes ([:pick \$mesarray \$months]);\r\
\n:set adate (\$year.\"-\".\$mes.\"-\".\$day);\r\
\n} else={\r\
\n:set months (\$months+1);\r\
\n:set day ((\$day+\$tdias)-\$dia);\r\
\n:local mes ([:pick \$mesarray \$months]);\r\
\n:set adate (\$year.\"-\".\$mes.\"-\".\$day);\r\
\n}\r\
\n} else={\r\
\n:set day (\$day+\$tdias);\r\
\n:local mes ([:pick \$mesarray \$months]);\r\
\n:set adate (\$year.\"-\".\$mes.\"-\".\$day);\r\
\n}\r\
\n:log info \$adate;\r\
\n[/system scheduler add name=\$user on-event=\"/ip hotspot user remove \\\"\
\$user\\\" \\r\\\r\
\n \\n/system scheduler remove [find name=\\\"\$user\\\"] \\r\\\r\
\n \\n/ip hotspot active remove [find user=\\\"\$user\\\"] \\r\\\r\
\n \\n/\\r\\\r\
\n\" start-date=\$adate start-time=\$atime]\r\
\n \r\
\n} \r\
\n\r\
\n\r\
\n}\r\
\n}\r\
\n" rate-limit=800k/800k transparent-proxy=yes
/ip hotspot user profile
add mac-cookie-timeout=1d name=Plan_1d on-login="{\r\
\n:local tdias 1\r\
\n:local atime [ /system clock get time ]\r\
\n:local adate [ /system clock get date ]\r\
\n:local mes1 [:pick \$adate 5 7]\r\
\n:local dia1 [:pick \$adate 8 10]\r\
\n:local horaminutos [:pick \$atime 0 5]\r\
\n:local comentariouser (\"Mes: \" . \$mes1 . \" D\EDa: \" . \$dia1 . \" Hora: \" . \$horaminutos . \" Dias: \" . \$tdias);\r\
\n:if ([ /ip hotspot user get \$user comment ]=\"\") do={ [ /ip hotspot user set \$user comment=\$comentariouser ] }\r\
\n\r\
\n# Agrego un registro en el LOG del usuario\r\
\n/log info \"Usuario= \$user \$adate \$atime Dias: \$tdias \";\r\
\n:local mesarray (\"01\",\"02\",\"03\",\"04\",\"05\",\"06\",\"07\",\"08\",\"09\",\"10\",\"11\",\"12\")\r\
\n\r\
\n:local diaarray (\"31\",\"28\",\"31\",\"30\",\"31\",\"30\",\"31\",\"31\",\"30\",\"31\",\"30\",\"31\")\r\
\n:local day [:pick \$adate 8 10]\r\
\n:local monthtxt [:pick \$adate 5 7]\r\
\n:local year [:pick \$adate 0 4]\r\
\n:local months ([:find \$mesarray \$monthtxt])\r\
\n:local dia ([:pick \$diaarray \$months])\r\
\n\r\
\n:log info \$atime;\r\
\n\r\
\n:if ((\$day+\$tdias)>\$dia) do={\r\
\n:if (\$months=11) do={\r\
\n:set months 0\r\
\n:set year (\$year+1)\r\
\n:set day ((\$day+\$tdias)-\$dia)\r\
\n:local mes ([:pick \$mesarray \$months])\r\
\n:set adate (\$year.\"-\".\$mes.\"-\".\$day)\r\
\n} else={\r\
\n:set months (\$months+1)\r\
\n:set day ((\$day+\$tdias)-\$dia)\r\
\n:local mes ([:pick \$mesarray \$months])\r\
\n:set adate (\$year.\"-\".\$mes.\"-\".\$day)\r\
\n}\r\
\n} else={\r\
\n:set day (\$day+\$tdias)\r\
\n:local mes ([:pick \$mesarray \$months])\r\
\n:set adate (\$year.\"-\".\$mes.\"-\".\$day)\r\
\n}\r\
\n:log info \$adate;\r\
\n[/system scheduler add name=\$user on-event=\"/ip hotspot user remove \\\"\$user\\\" \\r\\\r\
\n \\n/system scheduler remove [find name=\\\"\$user\\\"] \\r\\\r\
\n \\n/ip hotspot active remove [find user=\\\"\$user\\\"] \\r\\\r\
\n \\n/\\r\\\r\
\n\" start-date=\$adate start-time=\$atime]\r\
\n \r\
\n} \r\
\n\r\
\n\r\
\n}\r\
\n}\r\
\n" rate-limit=800k/800k transparent-proxy=yes
Creación de usuario asignado a un perfil para pruebas
Hacemos la creación del nuevo usuario, solo con pin, sin contraseña y le asignamos uno de los perfiles creados, yo usare el de 1 hora. Lo dejamos disponible para uso mas adelante.
Reemplazo de plantilla por defecto para usar solo pin
Descarga de la plantilla, tenemos dos opciones, las vamos a descargar
Usuario y contaseña: https://media.jctsoluciones.com.co/kHgFpHvzF3zC7/password/login.html
Solo Pin: https://media.jctsoluciones.com.co/kHgFpHvzF3zC7/pin/login.html
Para ambas, adicional vamos a descargar el siguiente archivo, que es el logo: https://media.jctsoluciones.com.co/kHgFpHvzF3zC7/hotspot-icon.svg
Hacemos copiado al mikrotik dentro de la carpeta hotspot, solo una de las plantillas según se requiera y el archivo de logo.
Confirmar que la plantilla se muestra correctamente al conectarse a la red y hacer prueba de conexión.
Posibles problemas
1. No se elimina los pines automáticamente: Si el router no estaba prendido a la hora que se debía eliminar, este no se eliminara posteriormente, por lo que se debería hacer revisión periodica para eliminarlos, esto posiblemente lo veamos en un video mas adelante.
2. Los pines duran mas o menos tiempo del que deberían: Es posible que se creen pines con un perfil incorrecto, que el perfil este mal o que se esta usando una versión mas vieja de mikrotik o mas nueva si a futuro mikrotik hace cambios que afecten el script actual, si esto se llega a dar, se deben eliminar todos los pines y volverlos a crear una vez corregido el origen del problema.