Router Mikrotik controla la transmisión de radio y da voz a Smart Home

Recientemente, me familiaricé accidentalmente con el programa RadioBoss de la compañía DJSoft.Net www.radioboss.ru y me encantó el diseño y las capacidades de esta estación de software de automatización de transmisión de radio. Por supuesto, no soy un usuario profesional ni un amante de la música sofisticado, pero, sin embargo, la interfaz bien pensada, el soporte total del idioma ruso, los controles de programación de reproducción y transmisión más ricos, así como el bajo precio, sorprenden gratamente. La versión completa gratuita está diseñada para 150 ejecuciones de 5 horas de trabajo, lo que es más que suficiente para dominar las capacidades del programa. Se pueden encontrar más detalles sobre RadioBoss en el sitio web oficial y en el foro .







Me sedujo más el hecho de que el programa admite el control de API, lo que le permite controlar de forma remota la reproducción de música en una computadora con RadioBoss instalado. Durante mucho tiempo he soñado con poder reproducir medios de forma remota sin conectarme al escritorio de una PC remota y sin una computadora en absoluto. Deje que lo haga por mí, por ejemplo, ... ¡mi enrutador Mikrotik!



Como sabe, Router OS Mikrotik tiene un poderoso lenguaje de scripting incorporado que le permite escribir cualquier scripts y programas para automatizar el funcionamiento del enrutador. ¡Pero no solo un enrutador! Recuperación de comando / herramienta de script le permite organizar solicitudes GET y POST externas a la URL especificada y así acceder a cualquier hardware o programa con API abiertas. Por ejemplo, scripts y bibliotecas de comandos para controlar los módulos de relé de Internet de Mikrotik y monitorear el entorno ( se pueden ver y descargar aquí ), obtener información sobre el clima , notificaciones sobre eventos en Telegram y controlar el enrutador a través de Telegram , determinando la hora de salida / puesta del sol con la organización de astronómicos. relé, etc ...



¿Por qué tenemos un caso? Usando el manual para la API de RadioBoss, escribimos algunas funciones simples para el sistema operativo del enrutador Mikrotik, que permitirán que el enrutador realice acciones en el RadioBoss para realizar cualquier evento en el enrutador:



#---------------------------------------------------------#
#   RadioBoss                                
#          by Sertik 18/12/2020                                       
#---------------------------------------------------------#

# - FuncRadioBossInit
#   ,      RadioBoss    
#     

:global FuncRadioBossInit do={
:if ([:len $0]!=0) do={
:if ([:len $1]!=0) do={
:if ([:len $2]!=0) do={
:if ([:len $3]!=0) do={
:global FuncPing
:if ([$FuncPing PingAdr=$1]="OK") do={
:global RBaddr $1
:global RBport $2
:global RBpass $3
:return "OK";
             } else={:return "ERROR PC RadioBoss not responded"}
          } else={:return "ERROR parametr password"}
     } else={:return "ERROR parametr port"}
   } else={:return "ERROR parametr address"}
  }
}


# - FuncRadioBossPlay
#     ,   ,    
#   "next"/"prev"   / 

:global FuncRadioBossPlay do={
:if ([:len $0]!=0) do={
:global RBaddr
:global RBport
:global RBpass
:if (([:len $RBaddr]!=0) and ([:len $RBport]!=0) and ([:len $RBpass]!=0)) do={
:local StrFetchRB;
:if (($1="next") or ($1="prev")) do={:set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd="."$1");} else={ 
:set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd=play%20"."$1");} 
do {
:global RBanswer [/tool fetch url=$StrFetchRB mode=http as-value output=user];
} on-error={:return "ERROR"}
:global RBanswer; 
:if (($RBanswer->"status")!="finished") do={:return "ERROR"}
:return ($RBanswer->"data");
   } else={:return "ERROR no define address, port or password"}
 }
}

# - FuncRadioBossStop
#  

:global FuncRadioBossStop do={
:if ([:len $0]!=0) do={
:global RBaddr
:global RBport
:global RBpass
:if (([:len $RBaddr]!=0) and ([:len $RBport]!=0) and ([:len $RBpass]!=0)) do={
:local StrFetchRB; :set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd=stop"); 
do {
:global RBanswer [/tool fetch url=$StrFetchRB mode=http as-value output=user];
} on-error={:return "ERROR"}
:global RBanswer; 
:if (($RBanswer->"status")!="finished") do={:return "ERROR"}
:return ($RBanswer->"data");
   } else={:return "ERROR no define address, port or password"}
 }
}


# - FuncRadioBossBreak
#      

:global FuncRadioBossBreak do={
:if ([:len $0]!=0) do={
:global RBaddr
:global RBport
:global RBpass
:if (([:len $RBaddr]!=0) and ([:len $RBport]!=0) and ([:len $RBpass]!=0)) do={
:local StrFetchRB; :set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd=set%20break");
do {
:global RBanswer [/tool fetch url=$StrFetchRB mode=http as-value output=user];
} on-error={:return "ERROR"}
:global RBanswer; 
:if (($RBanswer->"status")!="finished") do={:return "ERROR"}
:return ($RBanswer->"data");
   } else={:return "ERROR no define address, port or password"}
 }
}


# - FuncRadioBossVolume
#   0-100

:global FuncRadioBossVolume do={
:if ([:len $0]!=0) do={
:global RBaddr
:global RBport
:global RBpass
:if (([:len $RBaddr]!=0) and ([:len $RBport]!=0) and ([:len $RBpass]!=0)) do={
:local StrFetchRB; :set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd=setvol%20"."$1"); 
do {
:global RBanswer [/tool fetch url=$StrFetchRB mode=http as-value output=user];
} on-error={:return "ERROR"}
:global RBanswer; 
:if (($RBanswer->"status")!="finished") do={:return "ERROR"}
:return ($RBanswer->"data");
   } else={:return "ERROR no define address, port or password"}
 }
}

# - FuncRadioBossShuffle
# /  
#  [$FuncRadioBossShuffle "on/off"]


:global FuncRadioBossShuffle do={
:if ([:len $0]!=0) do={
:global RBaddr
:global RBport
:global RBpass
:if (([:len $RBaddr]!=0) and ([:len $RBport]!=0) and ([:len $RBpass]!=0)) do={
:local StrFetchRB; :set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd=set%20shuffle%20"."$1"); 
do {
:global RBanswer [/tool fetch url=$StrFetchRB mode=http as-value output=user];
} on-error={:return "ERROR"}
:global RBanswer; 
:if (($RBanswer->"status")!="finished") do={:return "ERROR"}
:return ($RBanswer->"data");
   } else={:return "ERROR no define address, port or password"}
 }
}


# - FuncRadioBossReset
#      

:global FuncRadioBossReset do={
:if ([:len $0]!=0) do={
:global RBaddr
:global RBport
:global RBpass
:if (([:len $RBaddr]!=0) and ([:len $RBport]!=0) and ([:len $RBpass]!=0)) do={
:local StrFetchRB; :set StrFetchRB ("http://"."$RBaddr".":"."$RBport"."/\?pass="."$RBpass"."&cmd=resetplayedstate"); 
do {
:global RBanswer [/tool fetch url=$StrFetchRB mode=http as-value output=user];
} on-error={:return "ERROR"}
:global RBanswer; 
:if (($RBanswer->"status")!="finished") do={:return "ERROR"}
:return ($RBanswer->"data");
   } else={:return "ERROR no define address, port or password"}
 }
}

:global FuncPing do={
:local PingCount 3; #  ;
:local Hadr;
:if ([:find $PingAdr ":"]>0) do={:set Hadr [:pick $PingAdr 0 [:find $PingAdr ":"]];} else={
:set Hadr $PingAdr}
:local Result [/ping $Hadr count=$PingCount];
:local PingAnswer "";
:local MainIfInetOk false;
:set MainIfInetOk ((3*$Result) >= (2 * $PingCount))
:put "MainIfInetOk=$MainIfInetOk"
if (!$MainIfInetOk) do={
:set PingAnswer "ERROR"
}
if ($MainIfInetOk) do={
:set PingAnswer "OK"
}
:return $PingAnswer;
}
      
      







Insertamos el código del script dado arriba en el repositorio del enrutador, no olvide llamarlo al comienzo del pedazo de hierro (o cuando sea necesario) para "definir" las funciones escritas en el entorno de variables. Entonces las funciones de control de RadioBoss estarán disponibles desde todos sus scripts, puede llamarlos, por ejemplo:



#  ():
:global FuncRadioBossInit; :global FuncRadioBossVolume; :global FuncRadioBossPlay;
:global FuncRadioBossReset; :global FuncRadioBossShuffle; :global FuncRadioBossBreak;
#      RadioBoss
[$FuncRadioBossInit "192.168.0.2" "9001" "your password"]
#  
[$FuncRadioBossVolume "30"]
#    
[$FuncRadioBossReset]
#     
[$FuncRadioBossShuffle "on"]
#   
:log info [$FuncRadioBossPlay "next"]
#     
[$FuncRadioBossBreak]
      
      





El conjunto mínimo de funciones proporcionadas en el guión le permite iniciar la reproducción de la pista especificada de la lista de reproducción principal, reproducir pistas en orden aleatorio, detener la reproducción, reproducir las pistas anteriores y siguientes, establecer el volumen de reproducción. La API de RadioBoss es mucho más extensa y le permite controlar casi todas las funciones del programa, incluyendo agregar, eliminar pistas y transmisiones a la lista de reproducción, insertar jingles, etc.



Naturalmente, no iba a abrir mi propia estación de radio por Internet, pero usar el programa con fines utilitarios me resultó aún más atractivo. En particular, las capacidades de los enrutadores Mikrotik para reproducir scripts a través del altavoz incorporado son muy modestas. Y luego es posible grabar mensajes de voz, insertarlos en la lista de reproducción en lugar de pistas y ejecutarlos desde el enrutador Microtic OS según sea necesario, ¡y esto no lo hago yo, sino el enrutador mismo!



En la PC con RadioBoss instalado, habilite el acceso remoto y configure el puerto y la contraseña de acceso para ello:







En casa cuando la PC, pasó a la bandeja windose El programa RadioBoss ahora me dice la voz de los eventos requeridos en la red de área local (conexión de hogares a través de wifi, límite de tráfico excesivo, disponibilidad de una nueva versión del software, intentos de obtener acceso no autorizado al enrutador, etc.)



en el país , con la que naturalmente se ha organizado una red VPN MESH multicanal desde hace mucho tiempo, es posible, por ejemplo, al detectar movimiento con una cámara de video, de forma automática a través de un amplificador y altavoces callejeros para advertir a los gamberros y ladrones que son vistos, grabados y luego golpeados en el cuello.



El administrador del sistema tiene la oportunidad de instalar RadioBoss en las PC de la oficina y advertir automáticamente a los infractores de la disciplina por voz que es necesario trabajar en el trabajo y no navegar por Internet o jugar "tanques", etc. ... Ahora también puede ejecutar transmisiones de radio sin comprar costosos sistemas de hardware mensajes sobre reuniones, conferencias, etc. ...



Así es como, por ejemplo, se puede saludar al jefe (¡y al mismo tiempo advertir a los empleados!) cuando aparece en la oficina por la mañana (agregue la dirección MAC del teléfono inteligente del jefe a la variable MAC (la idea se toma de aquí ).



:local MAC CC:CC:CC:CC:CC:CC;
:local MACdetect [interface wireless registration-table find mac-address=$MAC];
:if ([:len $MACdetect]>0) do {:do {:local nameADR [/ip firewall address-list get value-name=list [find address=123.123.123.123]];
:global FuncRadioBossInit; :[$FuncRadioBossInit «192.168.0.3» «9001» «PASSWORD»]
:global FuncRadioBossPlay
[$FuncRadioBossPlay «1»]
} on-error={/ip firewall address-list add dynamic=yes address=123.123.123.123 list=timer timeout=23:59:59; }}
      
      





Ponemos la ejecución del script en el Programador de Mikrotik con ejecución, digamos, una vez cada 15 segundos.



Cuando el jefe aparece en la oficina (es la primera aparición del día que se rastrea) en la PC con la dirección pasada en la función $ FuncRadioInit, se lanzará la primera pista de la lista de reproducción del programa.



Por supuesto, hay muchos otros programas de automatización de retransmisiones, por ejemplo, RadioPlayerPro de RadioSoft , DJin Lite de Trakt y TraktSoft, etc., pero dadas las capacidades de RadioBoss y su precio, el programa prácticamente no tiene competidores.



Quizás la API se pueda usar para controlar el Windows Media Player habitual, pero no he encontrado instrucciones en ningún lado para controlar el Media Player a través de solicitudes http.



Por cierto, la API de RadioBoss le permite ejecutar cualquier archivo bat y aplicaciones de Windows, así como reiniciar y apagar su computadora. Por lo tanto, si la tarjeta de red de su computadora personal o portátil está equipada con la función Wake on Lan, Mikrotik puede iniciar la PC con RadioBoss, y que, a su vez, después de calcular el tiempo requerido, apagar la computadora.



¡Disfruta tus experimentos!



All Articles