js-miio-simple v1.2.2
js-miio-simple
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;
Описание префиксов отладочных сообщений
Префикс | Описание
--------|--------
cmdSend1 | Вывод команды, переданной для отправки до установки случного id
cmdSend2 | Вывод команды, подготовленной для отправки с установленным случайным id
cmdSend3 | Вывод заголовка и данных пакета, подготовленного к отправке
discover()
const [res, msg] = await miIO.discover();Функция discover позволяет проверить доступность устройства (отправляет HELLO-пакет устройству и ожидает ответ). Функция возвращает массив из двух элементов:
res (boolean) Если устройство доступно и ответило (и не возникло какой либо другой ошибки) примет значение true, иначе false;
msg (string или Error) Если res == true, то msg вернёт ответ устройства (заголовок, данные). Если res == false, то msg вернёт экземпляр ошибки (new Error())
cmdSend(cmd)
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);Команды CLI
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":[]}' - отправить команду устройству.