Simple javascript miIO protocol implementation. Простая реализация протокола miIO на javascript.
Файл | Описание |
---|---|
miio-packet.js | Класс с реализацией пакета miIO. Обеспечивает хранение необходимых полей, шифрование и дешифрование, сборку и разборку пакета. |
miio-protocol.js | Класс с реализацией сетевого взаимодействия по протоколу miIO. Отправка сообщений (в том числе HELLO) и приём ответов от устройства. |
miio-cli.js | Простой CLI с минимальным набором команд. |
npm i js-miio-simple
const miioProtocol = require('js-miio-simple');
const miIO = new miioProtocol(ip, token, [logger], [timeout]);
Создаём экземпляр класса для сетевого взаимодействия.
В качестве обязательных параметров передаётся ip
-адрес и token
устройства. Необязательный параметр timeout
(время ожидания ответа от устройства) и logger
(функция логирования).
timeout
- по умолчания равен 5000 мс
.
logger
- по умолчанию вывод в консоль msg => console.dir(msg, {depth: null})
. Для "отключения" лога можно передать функцию без вывода, например () => true
;
Описание префиксов отладочных сообщений
Префикс | Описание |
---|---|
cmdSend_1_ | Вывод команды, переданной для отправки до установки случного id |
cmdSend_2_ | Вывод команды, подготовленной для отправки с установленным случайным id |
cmdSend_3_ | Вывод заголовка и данных пакета, подготовленного к отправке |
const [res, msg] = await miIO.discover();
Функция discover
позволяет проверить доступность устройства (отправляет HELLO-пакет устройству и ожидает ответ). Функция возвращает массив из двух элементов:
res (boolean) Если устройство доступно и ответило (и не возникло какой либо другой ошибки) примет значение true
, иначе false
;
msg (string или Error) Если res == true
, то msg
вернёт ответ устройства ([заголовок
, данные
]). Если res == false
, то msg
вернёт экземпляр ошибки (new Error()
)
const [res, msg] = await miIO.cmdSend(cmd);
Функция cmdSend(cmd)
позволяет отправить устройству команду и получить ответ. Функция возвращает массив из двух элементов:
res (boolean) Если устройство доступно и ответило (и не возникло какой либо другой ошибки) примет значение true
, иначе false
;
msg (string или Error) Если res == true
, то msg
вернёт ответ устройства ([заголовок
, данные
]). Если res == false
, то msg
вернёт экземпляр ошибки (new Error()
)
В качестве команды в параметре cmd
должен быть передан JSON-объект {id, method, params}
(например, {"id":0,"method":"get_status","params":[]}
). В id
команды можно указать любое число, оно будет заменено на случайное при отправке команды.
Перед отправкой команды необходимо получить devicetype
, deviceid
и uptime
(для расчёта смещения времени) устройства. Для этого необходимо перед вызовом функции cmdSend(cmd)
выполнить discover()
. Например,
const miIO = new miioProtocol(ip, token);
await miIO.discover();
const [res, msg] = await miIO.cmdSend(cmd);
node miio-cli.js --ip "x.x.x.x"
- выполнить проверку доступности устройства.
node miio-cli.js --ip "x.x.x.x" --token "ffffffffffffffffffffffffffffffff" --cmd '{"id":0,"method":"get_status","params":[]}'
- отправить команду устройству.