Roteador Mikrotik controla transmissão de rádio e vozes Smart Home

Recentemente, conheci acidentalmente o programa RadioBoss da empresa DJSoft.Net www.radioboss.ru e fiquei encantado com o design e as capacidades desta estação de software de automação de transmissão de rádio. Claro, eu não sou um profissional e não um usuário amante de música sofisticado, mas, no entanto, a interface bem pensada, suporte total para o idioma russo, os mais ricos controles de reprodução e programação de transmissão, bem como o baixo preço, surpreendem agradavelmente. A versão completa gratuita é projetada para 150 execuções de 5 horas de trabalho, o que é mais do que suficiente para dominar os recursos do programa. Mais detalhes sobre o RadioBoss podem ser encontrados no site oficial e no fórum .







Fiquei mais seduzido pelo fato de que o programa suporta controle de API, que permite controlar remotamente a reprodução de música em um computador com RadioBoss instalado. Há muito tempo eu sonhava ser capaz de reproduzir mídia remotamente sem me conectar à área de trabalho de um PC remoto e sem nenhum computador. Deixa fazer pra mim, por exemplo, ... meu roteador Mikrotik!



Como você sabe, o Router OS Mikrotik possui uma poderosa linguagem de script embutida que permite a você escrever qualquer script e programa para automatizar a operação do roteador. Mas não apenas um roteador! Comando de script / busca de ferramentapermite que você organize solicitações externas GET e POST para a URL especificada e, assim, acesse qualquer hardware ou programas com APIs abertas. Por exemplo, scripts e bibliotecas de comandos para controlar os módulos de retransmissão da Internet e monitorar o ambiente do Mikrotik ( podem ser visualizados e baixados aqui ), recebendo informações sobre o clima , notificações sobre eventos no Telegram e controlando o roteador através do Telegram , determinando o horário do nascer / pôr do sol com a organização do astronômico retransmitir etc ...



Por que temos isso? Utilizando o manual da API do RadioBoss, escrevemos algumas funções simples para o Router OS Mikrotik, que permitirão ao roteador realizar ações no RadioBoss para realizar quaisquer eventos no roteador:



#---------------------------------------------------------#
#   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;
}
      
      







Inserimos o código de script fornecido acima no repositório do roteador, não se esqueça de chamá-lo no início da peça de ferro (ou quando necessário) para "definir" as funções escritas no ambiente de variáveis. Então, as funções de controle do RadioBoss estarão disponíveis a partir de todos os seus scripts, você pode chamá-los, por exemplo:



#  ():
: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]
      
      





O conjunto mínimo de funções fornecidas no script permite que você inicie a reprodução da trilha especificada na lista de reprodução principal, reproduza as trilhas em ordem aleatória, pare a reprodução, reproduza as próximas trilhas anteriores e defina o volume da reprodução. A API RadioBoss é muito mais extensa e permite que você controle quase todas as funções do programa, incluindo adicionar, excluir faixas e fluxos da lista de reprodução, inserir jingles, etc.



Naturalmente, eu não iria abrir minha própria estação de rádio na Internet, mas usar o programa para fins utilitários era ainda mais atraente para mim. Em particular, os recursos dos roteadores Mikrotik para fazer soar scripts por meio do alto-falante embutido são muito modestos. E então é possível gravar mensagens de voz, inseri-las na lista de reprodução em vez de faixas e iniciá-las do Microtic OS Router conforme necessário, e isso não é feito por mim, mas pelo próprio roteador!



No PC com RadioBoss instalado, habilite o acesso remoto e configure a porta e a senha de acesso para ele:







Casa quando o PC, rolado para a bandeja windose O programa RadioBoss agora me diz a voz dos eventos necessários na rede local (conectando residências em wi-fi, filho excessos limite de tráfego, a disponibilidade de uma nova versão do software, tentativas de obter acesso não autorizado ao roteador, etc ...)



No país , com a qual uma rede VPN MESH multicanal foi naturalmente organizada por muito tempo, é possível, por exemplo, ao detectar movimento com uma câmera de vídeo, automaticamente através de um amplificador e alto-falantes de rua para avisar hooligans e ladrões que estão sendo vistos, gravados e logo esmurrados no pescoço.



O administrador do sistema tem a oportunidade de instalar o RadioBoss em PCs de escritório e avisar automaticamente os violadores da disciplina por voz que é necessário trabalhar no trabalho e não navegar na Internet ou jogar "tanques", etc. ... Agora também é possível executar sistemas de transmissão de rádio sem comprar sistemas de hardware caros. mensagens sobre reuniões, conferências, etc. ...



É assim que, por exemplo, você pode cumprimentar o chefe (e ao mesmo tempo avisar os funcionários!) quando ele aparece no escritório pela manhã (adicione o endereço MAC do smartphone do chefe à variável MAC (a ideia é tirada daqui ).



: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; }}
      
      





Colocamos a execução do script no Scheduler do Mikrotik com execução, digamos, uma vez a cada 15 segundos.



Quando o boss aparece no escritório (é a primeira aparição do dia que é rastreada) no PC com o endereço passado na função $ FuncRadioInit, será lançada a primeira faixa da Playlist do programa.



Claro, existem muitos outros programas de automação de transmissão, por exemplo, RadioPlayerPro da RadioSoft , DJin Lite da Trakt e TraktSoft, etc., mas dadas as capacidades do RadioBoss e seu preço, o programa praticamente não tem concorrentes.



Talvez a API possa ser usada para controlar o Windows Media Player normal, mas não encontrei em nenhum lugar instruções para controlar o Media Player por meio de solicitações http.



A propósito, a API RadioBoss permite que você execute qualquer arquivo bat e aplicativos do Windows, bem como reinicie e desligue o computador. Assim, se a placa de rede do seu computador pessoal ou laptop estiver equipado com a função Wake on Lan, o Mikrotik pode iniciar o PC com o RadioBoss, e que, por sua vez, após trabalhar o tempo necessário, desligue o computador.



Aproveite seus experimentos!



All Articles