node-red-contrib-xmihome
Version:
Node-RED nodes for controlling Xiaomi Mi Home devices using the xmihome library.
95 lines (79 loc) • 7.86 kB
HTML
<script type="text/markdown" data-help-name="xmihome-device" data-lang="ru">
<!-- markdownlint-disable-file MD041 -->
Позволяет взаимодействовать с одним конкретным устройством Xiaomi:
получать его состояние, отправлять команды и подписываться на уведомления.
### Идентификация устройства
Устройство можно задать несколькими способами:
1. **Конфигурация узла**: Параметры устройства задаются вручную в панели настроек.
- **Обнаруженное устройство**: Вы можете выбрать устройство из списка,
автоматически найденного узлом `Devices`. Это самый простой способ.
- **Вручную**: Вы можете указать параметры устройства
(ID, IP, MAC, токен, модель) вручную. Это полезно для устройств,
которые не обнаруживаются автоматически.
2. **`msg.device`**: Узел будет использовать объект устройства,
переданный во входящем `msg.device`.
Это позволяет динамически управлять разными устройствами с помощью одного узла.
**Важно:** Для корректной работы, особенно с Bluetooth-устройствами,
**критически важно** указать правильную **Модель** (`model`).
Правильно указанная **Модель** (`model`) позволяет узлу использовать специальный
класс для вашего устройства. Эти классы содержат удобные, человекочитаемые имена
для свойств (например, `fan_level` вместо `siid: 2, piid: 6`), а также могут
предоставлять дополнительные методы (например, `getRooms()` для пылесосов).
Полный список реализованных классов устройств, их свойств, действий и методов
доступен в документации пакета `xmihome-devices`:
- **[Список поддерживаемых классов устройств](https://github.com/alex2844/node-xmihome/blob/main/packages/devices/docs/ru/README.md)**
**Что делать, если моей модели нет в списке?**
Ничего страшного! Если для вашей модели не найден специальный класс, библиотека
автоматически попытается загрузить ее официальную спецификацию MiOT из облака.
Это работает для большинства современных устройств. В этом случае вы сможете
управлять устройством, используя стандартные `siid` и `piid` для свойств
и `siid` и `aiid` для действий.
### Действия (Action)
Узел может выполнять различные действия над устройством:
- **Получить свойства (Get Properties)**: Запрашивает *все* доступные
для чтения свойства устройства и возвращает их в виде объекта.
- **Получить свойство (Get Property)**: Запрашивает значение одного
конкретного свойства. Имя свойства задается в поле "Свойство" или в `msg.property`.
- **Установить свойство (Set Property)**: Устанавливает значение для одного свойства.
- **Свойство**: Имя свойства для изменения.
- **Значение**: Новое значение.
Может быть строкой, числом, булевым значением или объектом JSON.
- **Вызвать действие (Call Action)**: Вызывает определенное действие на устройстве
(например, `start_sweep` для пылесоса).
- **Свойство**: Имя действия для вызова.
- **Значение**: Параметры для действия, обычно в виде массива (например, `[]`).
- **Вызвать метод (Call Method)**: Вызывает метод напрямую на экземпляре класса устройства.
Это для продвинутых сценариев, не покрываемых стандартными свойствами или действиями
(например, `getRooms` или `getMapImage` на пылесосе).
- **Свойство**: Имя метода для вызова.
- **Значение**: Параметры для метода в виде массива.
- **Подписаться на свойство (Subscribe to Property)**: Подписывается на уведомления
об изменении свойства. Узел будет отправлять сообщение на **первый выход**
каждый раз, когда устройство сообщит о новом значении.
Соединение с устройством будет поддерживаться активным.
- **Отписаться от свойства (Unsubscribe from Property)**:
Отменяет ранее созданную подписку.
### Входы
- `msg.device` (object, опционально): Если задан,
переопределяет конфигурацию устройства в узле.
- `msg.property` (string, опционально): Если задан,
переопределяет свойство или действие, указанное в узле.
- `msg.payload` (any): Используется как "Значение" при действии
"Установить свойство" или "Вызвать действие", если поле "Значение"
в узле настроено на `msg.payload`.
- `msg.topic` (string, опционально): Если задан,
переопределяет тему для исходящего сообщения.
### Выходы
1. **Результат / Уведомления**
- Для действий `Get/Set/Call`: Отправляет одно сообщение с результатом операции.
`msg.payload` содержит полученное значение, результат действия или объект
`{property, value}` в случае успеха установки.
- для `Subscribe`: Отправляет сообщение каждый раз при получении уведомления.
`msg.payload` содержит новое значение свойства.
2. **События подключения**
- Отправляет сообщения о состоянии соединения с устройством.
Полезно для отладки и мониторинга.
- `msg.payload.event` может быть:
`connected`, `disconnected`, `reconnecting`, `reconnect_failed`, `error`.
- `msg.topic` будет содержать `connection/...` или `error/...`.
</script>