Часто задаваемые вопросы о разработке адаптеров
Краткие ответы на вопросы, заданные на форуме и в Discord-канале.#adapter Они встречаются неоднократно. Подробное описание можно найти на странице по ссылке.
Публиковать
В каких файлах находится номер версии?
Вpackage.json иio-package.json включая уведомление об изменении вio-package.json (common.news ) и вREADME.md Никому не нужно ухаживать за ним вручную:npm run release patch Выполните все задачи одновременно, присвойте метку и загрузите репозиторий в GitHub. См. раздел «Публикация» .
Цифры соответствуют семантическому версионированию :patch для исправления ошибок,minor для новых функций,major изменения, затрагивающие существующие установки.
Я выпустил его. Когда пользователи увидят новую версию?
Не сразу. Администратор перечитывает репозиторий не при каждом запросе, а через определенные промежутки времени. Если вы не хотите ждать, нажмите значок обновления в разделе «Адаптеры» в административном интерфейсе или выполните команду в консоли.iobroker update на.
Кроме того, новая версия впервые появляется в репозитории.latest Вstable Миграция будет выполнена только после пробного периода и без каких-либо сообщений об ошибках.
Как вообще новый адаптер попадает в репозиторий?
Путем отправки запроса на слияние в репозиторий ioBroker.repositories . Требования и порядок описаны в разделе «Публикация» .
Разработка и тестирование
Как проверить работу адаптера, не разбирая систему?
Используя dev-сервер , он создает собственную небольшую установку в папке проекта, запускает адаптер оттуда и перезагружает его при каждом изменении.
Как обнаружить ошибку выполнения?
dev-server debug в процессе разработки,iobroker debug <adapter>.0 в работающей системе. Оба описания касаются отладки .
Как проверить компактный режим?
В компактном режиме адаптер запускается не как отдельный процесс, а внутри процесса js-контроллера. Для этого файл должен содержать два метода запуска:
if (require.main !== module) {
module.exports = options => new MeinAdapter(options);
} else {
new MeinAdapter();
}
Эта функция включается в конфигурации экземпляра в режиме «Компактный режим» . Важно, чтобы адаптер находился в этом режиме.unload — Обработчик действительно очищает всё: таймеры, соединения, наблюдатели. В противном случае что-то останется в общем процессе.
Как я могу получать уведомления о сбоях?
Плагин @iobroker/plugin-sentry предоставляет информацию о том, какие данные передаются и как пользователи могут отключить их в разделе «Отчеты о сбоях» .
конфигурация
Как проверить ввод данных пользователем в коде адаптера?
Через окно сообщения . Страница конфигурации отправляет значения.sendTo Адаптер отправляет запрос экземпляру, проверяет его и возвращает результат. Конфигурация в формате JSON включает в себя готовые элементы, которые делают именно это.
Для того чтобы экземпляр мог принимать сообщения, он должен"messagebox": true в блокеcommon тотio-package.json стоять.
Нужно ли мне сделать еще один тест?index_m.html строить?
Нет. Страницы конфигурации теперь описываются как JSON-конфигурации . Старые HTML-страницы по-прежнему будут работать, но они больше не предназначены для использования с новым адаптером.
Файлы и данные
Я записываю файл и получаю предупреждение в журнале.
Суть сообщения такова:
writeFile will not write this file (picture.jpg) in future versions:
<adapter> is not an object of type "meta"
Для файлов требуется объект соответствующего типа.meta в качестве места для хранения. Самый простой способ — разместить его надinstanceObjects к:
"instanceObjects": [
{
"_id": "",
"type": "meta",
"common": {
"name": "Dateien von <Adapter>",
"type": "meta.user"
},
"native": {}
}
]
Загрузка и сохранение выглядят следующим образом:
const antwort = await axios.get(url, { responseType: 'arraybuffer' });
await this.writeFileAsync(this.namespace, 'picture.jpg', antwort.data);
Почемуcommon.type иcommon.role А какое отношение это имеет к резервному копированию данных, объясняется в разделе «Сохранение файлов» .
Почему мое состояние не регистрируется?
Потому что соответствующий объект отсутствует.setState Если объект отсутствует, выдается предупреждение. Объекты обнаруживаются при запуске.setObjectNotExists создано, см. справочник по адаптеру .
Здесь чего-то не хватает.
Эта подборка активно поддерживается благодаря вкладу других пользователей. Если у вас есть вопрос, которого здесь нет, и вы нашли на него ответ, вы можете добавить его, используя ссылку «Редактировать» в правом верхнем углу. Ссылка на адаптер, где можно найти решение, будет полезнее для других, чем длинное объяснение.