Saya lebih tergoda oleh fakta bahwa program ini mendukung kontrol API, yang memungkinkan Anda mengontrol pemutaran musik dari jarak jauh di komputer dengan RadioBoss terpasang. Saya sudah lama memiliki impian untuk dapat memutar media dari jarak jauh tanpa terhubung ke desktop PC jarak jauh dan tanpa komputer sama sekali. Biarkan saja yang melakukannya untuk saya, misalnya, ... Mikrotik router saya!
Seperti yang Anda ketahui, Router OS Mikrotik memiliki bahasa skrip bawaan yang kuat yang memungkinkan Anda untuk menulis skrip dan program apa pun untuk mengotomatiskan pengoperasian router. Tapi bukan hanya router! Pengambilan perintah / alat skrip memungkinkan Anda untuk mengatur permintaan GET dan POST eksternal ke URL yang ditentukan dan dengan demikian mengakses perangkat keras atau program apa pun dengan API terbuka. Misalnya skrip dan pustaka perintah untuk mengontrol modul relai Internet dan memantau lingkungan dari Mikrotik ( dapat dilihat dan diunduh di sini ), memperoleh informasi tentang cuaca , pemberitahuan tentang peristiwa di Telegram dan mengendalikan router melalui Telegram , menentukan waktu matahari terbit / terbenam dengan organisasi astronomi menyampaikan dll ...
Mengapa kita mendapatkannya? Dengan menggunakan manual untuk RadioBoss API, kami menulis beberapa fungsi sederhana untuk Router OS Mikrotik, yang akan memungkinkan router untuk melakukan tindakan di RadioBoss untuk melakukan acara apa pun di router:
#---------------------------------------------------------#
# 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;
}
Kami memasukkan kode skrip yang diberikan di atas ke dalam repositori router, jangan lupa untuk memanggilnya di awal potongan besi (atau bila diperlukan) untuk "mendefinisikan" fungsi-fungsi tertulis di lingkungan variabel. Kemudian fungsi kontrol RadioBoss akan tersedia dari semua skrip Anda, Anda dapat memanggilnya, misalnya:
# ():
: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]
Set fungsi minimum yang disediakan dalam skrip memungkinkan Anda untuk memulai pemutaran trek tertentu dari daftar putar utama, memutar trek dalam urutan acak, menghentikan pemutaran, memutar trek berikutnya, sebelumnya, mengatur volume pemutaran. API RadioBoss jauh lebih luas dan memungkinkan Anda untuk mengelola hampir semua fungsi program, termasuk menambah, menghapus trek dan aliran ke daftar putar, memasukkan jingle, dll.
Secara alami, saya tidak akan membuka stasiun radio Internet saya sendiri, tetapi menggunakan program untuk tujuan yang bermanfaat bahkan lebih menarik bagi saya. Secara khusus, kemampuan router Mikrotik untuk membunyikan skrip melalui speaker internal sangat sederhana. Dan kemudian menjadi mungkin untuk merekam pesan suara, memasukkannya ke dalam playlist alih-alih trek dan meluncurkannya dari Microtic OS Router sesuai kebutuhan, dan ini dilakukan bukan oleh saya, tetapi oleh router itu sendiri!
Pada PC dengan RadioBoss terinstal, aktifkan akses jarak jauh dan konfigurasikan port dan kata sandi akses untuk itu:
Rumah ketika PC, digulung ke baki windose Program RadioBoss sekarang memberi tahu saya suara acara yang diperlukan di jaringan area lokal (menghubungkan rumah tangga di wifi, anak melebihi batas lalu lintas, ketersediaan versi baru perangkat lunak, upaya untuk mendapatkan akses tidak sah ke router, dll ...)
Di negara itu , dengan jaringan VPN multichannel MESH yang secara alami telah diatur untuk waktu yang lama, hal ini dimungkinkan, misalnya, ketika mendeteksi gerakan dengan kamera video, secara otomatis melalui amplifier dan pengeras suara untuk memperingatkan para perusuh dan pencuri bahwa mereka sedang dilihat, direkam, dan segera digempur di leher.
Administrator sistem memiliki kesempatan untuk menginstal RadioBoss di PC kantor dan secara otomatis memperingatkan pelanggar disiplin dengan suara bahwa perlu bekerja di tempat kerja, dan tidak menjelajahi Internet atau bermain "tank", dll ... Sekarang juga memungkinkan untuk memulai pesan-pesan tentang rapat, konferensi, dll ...
Beginilah, misalnya, Anda dapat menyapa bos (dan sekaligus memperingatkan karyawan!) ketika dia muncul di kantor di pagi hari (tambahkan alamat MAC smartphone bos ke variabel MAC (idenya diambil dari sini ).
: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; }}
Kami menempatkan eksekusi skrip di Penjadwal Mikrotika dengan eksekusi, katakanlah, setiap 15 detik.
Ketika bos muncul di kantor (ini adalah penampilan pertama hari yang dilacak) di PC dengan alamat yang diteruskan dalam fungsi $ FuncRadioInit, trek pertama dari Daftar Putar program akan diluncurkan.
Tentu saja, ada banyak program otomasi penyiaran lainnya, misalnya RadioPlayerPro dari RadioSoft , DJin Lite dari Trakt dan TraktSoft, dll., Tetapi mengingat kemampuan RadioBoss dan harganya, program ini praktis tidak memiliki pesaing.
Mungkin API dapat digunakan untuk mengontrol Windows Media Player biasa, tetapi saya belum menemukan petunjuk di mana pun untuk mengontrol Media Player melalui permintaan http.
Omong-omong, RadioBoss API memungkinkan Anda untuk menjalankan file bat dan aplikasi Windows, serta merestart dan mematikan komputer Anda. Jadi, jika kartu jaringan komputer pribadi atau laptop Anda dilengkapi dengan fungsi Wake on Lan, Mikrotik dapat memulai PC dengan RadioBoss, dan selanjutnya, setelah bekerja dalam waktu yang diperlukan, matikan komputer.
Selamat menikmati eksperimen Anda!