MIDI-MT Документация на Русском языке
Вы можете самостоятельно использовать «API» модуля
дистанционного управления в сценариях в различных средах выполнения.
Транспортом взаимодействия с «MIDI-MT» является
Web Socket
, команды и ответы имеют формат
Json
. Связь реализована только по протоколу
HTTP
, то есть поддерживается только стандартный префикс
ws://
. Решение рассчитано на работу в локальной сети. При
необходимости, для доступа по протоколу HTTPS
, можно
поставить любой фронт-енд с поддержкой HTTPS Web Socket
,
например nginx
.
Конечной точкой в URL
сервера, всегда является тег
/data
.
"action": "config"
- запрос конфигурации у сервера.
Подразумевает ответ в виде структуры секции «units» из текущей
конфигурации сервера.
{
"action": "config"
}
"action": "change"
- отправка изменений параметров
контрола. Отсылаемые параметры контрола, как то: scene
,
id
, type
, target
,
longtarget
- должны соответствовать параметрам в
конфигурации сервера.
{
"action": "change",
"unit": {
"scene":xxx, // сцена контрола
"id":xx, // номер контрола
"type":x, // тип контрола
"target":xxx, // группа | назначение
"longtarget":xxx, // назначение
"onoff": true | false, // новое значение
"value": 0-127 // новое значение
}
}
"action": "wakeup"
- запрос на выход компьютера из
«спящего режима». В некоторых случаях, в Windows 10/11
, в
«спящем режиме» отключаются часть аудио источников и USB
устройств.
{
"action": "wakeup"
}
"action": "windowtotop"
- отправка имени файла
приложения, которое необходимо поместить на передний план. Необходимо
для использования мультимеда кнопок управления воспроизведением.
{
"action": "windowtotop",
"name": "application-file-name.exe"
}
"action": "getlog"
- запрос на получение актуального
лог файла в формате Base64
.
{
"action": "getlog"
}
Все ответы сервера, так же как и запросы упаковываются в
Json
контейнер.
при «отправке измененых параметров», «запросе на выход сервера из спящего режима» и «отправке имени файла приложения» ответы со стороны сервера не предусмотрены.
на «запрос конфигурации у сервера» - отправляется содержимое
секции units
из загруженного файла конфигурации.
{
"action": "config",
"units":[
{"scene":177,"id":22,"type":0,"target":0,"longtarget":255,"onoff":false,"value":64},
{"scene":177,"id":13,"type":1,"target":1,"longtarget":255,"onoff":true,"value":107,"app":["App1","App2"]},
...
]
}
на «запрос отправки лог файла» - отправляется актуальный на
текущий момент лог файл в формате Base64
>
UTF-8
.
{
"action": "getlog",
"log": "BASE64-content"
}
"action": "changed"
- отправляется в случае
изменения параметров элемента управления unit
, из секции
конфигурации units
. Генерируется сервером в момент
изменения параметров элементов управления, а также, добавления новых,
или удаления старых элементов.
{
"action": "changed",
"unit": {
"scene":177,
"id":22,
"type":0,
"target":0,
"longtarget":255,
"onoff": true,
"value": 127
}
}
«IP адрес» и «Порт» в приложении должны соответствовать текущей рабочей конфигурации запущенного сервера.
"remote": {
"port": 8888,
"host": "x.x.x.x",
...
},
let socket = new WebSocket("ws://x.x.x.x:8888/data");
.onopen = function(e) {
socketconsole.log("[open] Connection established, request configuration from server...");
.send(JSON.stringify({ "action": "config" }));
socket;
}
.onmessage = function(event) {
socketconsole.log("[message]", JSON.parse(event.data));
;
}
.onclose = function(event) {
socketif (event.wasClean) {
alert(`[close] Connection closed cleanly, code=${event.code} reason=${event.reason}`);
else {
} // server process killed or network down
// event.code is usually 1006 in this case
console.log("[close] Connection died");
};
}
.onerror = function(error) {
socketconsole.log(`[error]`);
; }
Посмотреть этот пример на BitBucket.
Подробнее о программировании JavaScript Web Socket на MDN Web docs.
Для запуска этого примера, вероятно вам придется установить пакеты:
pip install websocket-client
pip install rel
import websocket
import _thread
import time
import rel
def on_message(ws, message):
print(message)
def on_error(ws, error):
print(error)
def on_close(ws, close_status_code, close_msg):
print("### closed ###")
def on_open(ws):
print("Opened connection")
"{ \"action\": \"config\" }")
ws.send(
if __name__ == "__main__":
True)
websocket.enableTrace(= websocket.WebSocketApp("ws://x.x.x.x:8888/data",
ws =on_open,
on_open=on_message,
on_message=on_error,
on_error=on_close)
on_close
=rel, reconnect=5)
ws.run_forever(dispatcher2, rel.abort)
rel.signal( rel.dispatch()
Посмотреть этот пример на BitBucket.
Подробнее о программировании Python Web Socket в документации websocket-client.