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");
socket.onopen = function(e) {
console.log("[open] Connection established, request configuration from server...");
socket.send(JSON.stringify({ "action": "config" }));
};
socket.onmessage = function(event) {
console.log("[message]", JSON.parse(event.data));
};
socket.onclose = function(event) {
if (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");
}
};
socket.onerror = function(error) {
console.log(`[error]`);
};Посмотреть этот пример на BitBucket.
Подробнее о программировании JavaScript Web Socket на MDN Web docs.
Для запуска этого примера, вероятно вам придется установить пакеты:
pip install websocket-clientpip install relimport 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")
ws.send("{ \"action\": \"config\" }")
if __name__ == "__main__":
websocket.enableTrace(True)
ws = websocket.WebSocketApp("ws://x.x.x.x:8888/data",
on_open=on_open,
on_message=on_message,
on_error=on_error,
on_close=on_close)
ws.run_forever(dispatcher=rel, reconnect=5)
rel.signal(2, rel.abort)
rel.dispatch() Посмотреть этот пример на BitBucket.
Подробнее о программировании Python Web Socket в документации websocket-client.