мНет описания правки |
м (→exposes) |
||
(не показана 1 промежуточная версия этого же участника) | |||
Строка 11: | Строка 11: | ||
* [https://github.com/u236/homed-service-zigbee/blob/master/reporting.cpp Отчеты] | * [https://github.com/u236/homed-service-zigbee/blob/master/reporting.cpp Отчеты] | ||
* [https://github.com/u236/homed-service-zigbee/blob/master/poll.cpp Опросы] | * [https://github.com/u236/homed-service-zigbee/blob/master/poll.cpp Опросы] | ||
* [[Common/Exposes| | * [[Common/Exposes|Способности]] | ||
* [[Common/Options|Опции]] | * [[Common/Options|Опции]] | ||
Строка 92: | Строка 92: | ||
=== <code>exposes</code> === | === <code>exposes</code> === | ||
Массив [[Common/Exposes| | Массив [[Common/Exposes|способностей]] устройства. | ||
=== <code>options</code> === | === <code>options</code> === |
Текущая версия от 10:06, 5 сентября 2024
Файлы библиотеки
Все поддерживаемые устройства описаны в файлах библиотеки, находящихся в папке /usr/share/homed-zigbee
. Путь к папке библиотеки может быть изменен в конфигурации. Библиотека может быть дополнена при помощи пользовательских расширений.
Характеристики устройств
Структура библиотеки
Каждый файл библиотеки представляет из себя JSON-объект, описывающий характеристики конечных точек каждого поддерживаемого устройства. Актуальные файлы библиотеки доступны на GitHub. Устройства идентифицируются по аттрибутам "ManufacturerName" и "ModelIdentifier" кластера "Basic".
Существуют исключения из правил, такие, как устройства TUYA, у которых всегда относительно одинаковое значение аттрибута "ModelIdentifier", зато аттрибут "ManufacturerName" всегда разный. Для этих устройств название производителя подменяется на "TUYA", а в качестве названия модели используется значение аттрибута "ManufacturerName".
Общая структура библиотеки выглядит так:
{
"manufacturer_a":
[
{
"modelNames": ["model_m", "model_n"],
"properties": ["property", "property", "property"],
"actions": ["action", "action"],
"bindings": ["binding"],
"reportings": ["reporting"],
"exposes": ["expose", "expose"],
"endpointId": 2
},
{
"modelNames": ["model_x"],
"properties": ["property"],
"actions": ["action"],
"exposes": ["expose"],
"options": {"option": "value"}
}
],
"manufacturer_b":
[
{
"modelNames": ["model_z"],
"properties": ["property", "property"],
"bindings": ["binding"],
"polls": ["poll"],
"options": {"pollInterval": 3600}
}
]
}
Поля и значения
description
Необязательное поле, имеющее исключительно информационный характер, используется для "человекопригодного" описания секции библиотеки.
modelNames
Массив значений аттрибута "ModelIdentifier" для устройств с одинаковым набором характеристик. Допускается использовать повторяющиеся значения этого поля в одном блоке производителя устройств, например:
...
{
"modelNames": ["model_a", "model_b"],
"properties": ["status", "level"],
"actions": ["status", "level"]
},
{
"modelNames": ["model_a"],
"properties": ["colorTemperature"],
"actions": ["colorTemperature"]
}
...
properties
Массив свойств конечной точки устройства. К свойствам относятся данные о состоянии устройства, например, температура, заряд батарейки, сигнал срабатывания датчика движения и так далее.
actions
Массив действий, которые могут быть применены к конечной точке устройства. К действиям относится то, как пользователь может управлять устройством, например, включать или выключать, изменять настройки и так далее.
bindings
Массив биндингов для конечной точки устройства. Дело в том, что далеко не все устройства после подключения к сети начинают отправлять отчеты координатору. Эту проблему решают биндинги, назначая адресом для отправки отчетов адрес координатора.
reportings
Массив предустановленных параметров отправки отчетов конечной точки устройства. Отчеты - это функция устройства, с помощью которой оно периодически передает координатору некоторые свои свойства. Отчеты отправляются по заданным критериям - временным интервалам и изменению значения соответствующего аттрибута. Параметры отчетов хранятся на самом устройстве и настраиваются при добавлении устройства в сеть, при обновлении характеристик устройства или вручную.
polls
Массив опросов конечной точки устройства. Опросы - это способ принудительно получить некоторые свойства устройств, не поддерживающих отчеты. В этом случае координатор сам обращается к устройству, либо один раз, при запуске сервиса, либо раз в заданный промежуток времени.
exposes
Массив способностей устройства.
options
Объект с опциями устройства.
endpointId
Хитрое поле, описывающее, к каким конечным точкам устройства применимы перечисленные характеристики. Если поле отсутствует, используятся конечнная точка по умолчанию, то есть 1
. Допускается перечисление нескольких конечных точек для одной и той же модели устройства:
...
{
"modelNames": ["lumi.sensor_cube", "lumi.sensor_cube.aqgl01"],
"properties": ["lumiBatteryVoltage"],
"endpointId": 1
},
{
"modelNames": ["lumi.sensor_cube", "lumi.sensor_cube.aqgl01"],
"properties": ["lumiCubeMovement"],
"endpointId": 2
},
{
"modelNames": ["lumi.sensor_cube", "lumi.sensor_cube.aqgl01"],
"properties": ["lumiCubeRotation"],
"endpointId": 3
}
...
Кроме того, поле может содержать не только одиночное значение номера конечной точки, но и массив значений. Это применимо к устройстам, имеющим несколько конечных точек c идентичным набором характеристик, таким, как многоканальные реле или выключатели. В таком случае, к топикам статусных сообщений, содержащих перечисленные свойства, будет добавляться еще один уровень, содержащий в себе номер конкретной конечной точки.
Например:
...
{
"modelNames": ["multi_channel"],
"properties": ["status"],
"actions": ["status"],
"endpointId": [1, 2, 3]
}
...
Расширения библиотеки
Поддержку новых устройств можно добавлять при помощи пользовательских расширений библиотеки. Расширения это файлы с произвольным именем. Содержимое таких файлов должно соответствовать формату основной библиотеки, описанному в данной статье.
Эти файлы можно создавать в папке, путь к которой настраивается парамером external
в секции [device]
файла конфигурации.
Пользовательские расширения имеют приоритет над основной библиотекой, список файлов расширений сортируется по имени, парсер библиотеки прекращает поиск описания устройства, как только найдет первое совпадение.