J'ai été plus tenté par le fait que le programme prend en charge le contrôle API, qui vous permet de contrôler entièrement à distance la lecture de la musique sur un ordinateur avec RadioBoss installé. J'ai longtemps rêvé de pouvoir lire des fichiers multimédias à distance sans me connecter au bureau d'un PC distant et sans ordinateur du tout. Laissez-le faire pour moi, par exemple, ... mon routeur Mikrotik!
Comme vous le savez, Router OS Mikrotik dispose d'un puissant langage de script intégré qui vous permet d'écrire des scripts et des programmes pour automatiser le fonctionnement du routeur. Mais pas seulement un routeur! Commande de script / extraction d'outilvous permet d'organiser des requêtes GET et POST externes vers l'URL spécifiée et ainsi d'accéder à tout matériel ou programme avec des API ouvertes. Par exemple, des scripts et des bibliothèques de commandes pour contrôler les modules de relais Internet de Mikrotik et surveiller l'environnement ( peuvent être consultés et téléchargés ici ), obtenir des informations sur la météo , des notifications sur les événements dans Telegram et contrôler le routeur via Telegram , déterminer l'heure de lever / coucher du soleil avec l'organisation de l'astronomie relais etc ...
Pourquoi l'avons-nous? En utilisant le manuel de l'API RadioBoss, nous écrivons quelques fonctions simples pour le routeur OS Mikrotik, qui permettront au routeur d'effectuer des actions sur RadioBoss pour effectuer tous les événements sur le routeur:
#---------------------------------------------------------#
# 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;
}
Nous insérons le code de script donné ci-dessus dans le référentiel du routeur, n'oubliez pas de l'appeler au début du morceau de fer (ou si nécessaire) pour "définir" les fonctions écrites dans l'environnement des variables. Ensuite, les fonctions de contrôle de RadioBoss seront disponibles depuis tous vos scripts, vous pouvez les appeler, par exemple:
# ():
: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]
L'ensemble minimum de fonctions fournies dans le script vous permet de démarrer la lecture de la piste spécifiée à partir de la liste de lecture principale, de lire les pistes dans un ordre aléatoire, d'arrêter la lecture, de lire les pistes suivantes et précédentes, de régler le volume de lecture. L'API RadioBoss est beaucoup plus étendue et vous permet de gérer presque toutes les fonctions du programme, y compris l'ajout, la suppression de pistes et de flux à la playlist, l'insertion de jingles, etc.
Naturellement, je n'allais pas ouvrir ma propre station de radio Internet, mais utiliser le programme à des fins utilitaires m'attirait encore plus. En particulier, les capacités des routeurs Mikrotik pour faire sonner des scripts via le haut-parleur intégré sont très modestes. Et puis il devient possible d'enregistrer des messages vocaux, de les insérer dans la liste de lecture au lieu de pistes et de les lancer à partir du Microtic OS Router si nécessaire, et cela n'est pas fait par moi, mais par le routeur lui-même!
Sur le PC sur lequel RadioBoss est installé, activez l'accès à distance et configurez le port et le mot de passe d'accès correspondant:
Accueil quand le PC, roulé au plateau windose programme RadioBoss me dit maintenant la voix des événements requis dans le réseau local (connexion des foyers en wifi, fils dépasse la limite de trafic, disponibilité d'une nouvelle version du logiciel, tentatives d'obtenir un accès non autorisé au routeur, etc ...)
Dans le pays , avec lequel un réseau VPN MESH multicanal est naturellement organisé depuis longtemps, il est possible, par exemple, lors de la détection de mouvement avec une caméra vidéo, automatiquement via un amplificateur et des haut-parleurs de rue d'avertir les hooligans et les voleurs qu'ils sont vus, enregistrés et bientôt pilonnés dans le cou.
L'administrateur système a la possibilité d'installer RadioBoss sur les PC de bureau et d'avertir automatiquement les contrevenants à la discipline par la voix qu'il est nécessaire de travailler au travail, et de ne pas surfer sur Internet ou jouer à des "tanks", etc. ... des messages sur des réunions, des conférences, etc. ...
C'est ainsi, par exemple, que vous pouvez saluer le patron (et en même temps avertir les employés!) lorsqu'il se présente au bureau le matin (ajoutez l'adresse MAC du smartphone du patron à la variable MAC (l'idée est tirée d'ici ).
: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; }}
Nous mettons l'exécution du script dans le planificateur de Mikrotik avec une exécution, disons, toutes les 15 secondes.
Lorsque le boss apparaît au bureau (c'est la première apparition de la journée qui est suivie) sur le PC avec l'adresse passée dans la fonction $ FuncRadioInit, la première piste de la Playlist du programme sera lancée.
Bien sûr, il existe de nombreux autres programmes d'automatisation de la diffusion, par exemple RadioPlayerPro de RadioSoft , DJin Lite de Trakt et TraktSoft, etc., mais étant donné les capacités de RadioBoss et son prix, le programme n'a pratiquement pas de concurrents.
Peut-être que l'API peut être utilisée pour contrôler le lecteur Windows Media habituel, mais je n'ai trouvé nulle part d'instructions pour contrôler le lecteur multimédia via des requêtes http.
À propos, l'API RadioBoss vous permet d'exécuter tous les fichiers de batte et les applications Windows, ainsi que de redémarrer et d'arrêter votre ordinateur. Ainsi, si la carte réseau de votre ordinateur personnel ou de votre ordinateur portable est équipée de la fonction Wake on Lan, Mikrotik peut démarrer le PC avec RadioBoss et, à son tour, après avoir calculé le temps requis, éteindre l'ordinateur.
Profitez de vos expériences!