js-контроллер с точки зрения разработки
js-контроллер — это ядро каждой установки ioBroker. Для разработки адаптеров крайне важно понимать, что он предоставляет и какие правила на его основе формируются. Взгляд пользователя на этот же элемент описан в разделах «Контроллер» и «Адаптер» .
То, что он берет на себя.
| Задача | Что это значит для адаптера? |
|---|---|
| Процессы | Контроллер запускает и останавливает экземпляры, а также перезапускает их после сбоя. Адаптеру не нужно поддерживать свою работоспособность. |
| База данных объектов | Все описания: устройства, каналы, точки данных, экземпляры, пользователи. Редко изменяются, часто читаются. |
| База данных состояний | Значения с меткой времени иack Номерной знак. Часто меняется. |
| Новости | Экземпляры взаимодействуют друг с другом через контроллер, а не напрямую. |
| Разрешения | Любой доступ нарушает права соответствующего пользователя. |
Адаптер никогда не взаимодействует напрямую с базами данных. Он использует@iobroker/adapter-core Эта библиотека взаимодействует с контроллером. Поэтому адаптеру всё равно, находятся ли данные во встроенных файловых базах данных или в Redis , и работает ли контроллер на той же машине или в многохостовой среде .
Объект и условие — это две разные вещи.
Именно здесь чаще всего возникают недоразумения. Объект описывает что-либо, а состояние содержит это значение. Оба имеют один и тот же идентификатор, но хранятся в разных базах данных и имеют разный срок жизни.
Объект создаётся один раз во время инициализации и после этого редко изменяется. Его состояние может меняться каждую секунду. Запись в объект при каждом изменении значения создаёт ненужные накладные расходы.
Структура объекта описывается в разделе «Схема объекта» , а предполагаемые роли — в разделе «Роли состояния» .
Задний номерной знак
Каждое условие, помимо своей ценности, несет в себе иack Оно различает две совершенно разные вещи:
ack: falseЭто запрос . Кто-то хочет, чтобы что-то было переключено. Адаптер отслеживает эти состояния и выполняет запрос.ack: trueЭто факт . Адаптер узнал об этом от устройства и записывает значение обратно.
Смешивание этих двух методов создает петли обратной связи: адаптер сообщает значение, ошибочно принимает его за команду и снова переключается.
Резюме экземпляра
Контроллер запускает процесс, передает ему конфигурацию и ожидает ответа. После завершения работы адаптеру предоставляется возможность выполнить очистку, и это не является проявлением вежливости: неудаленные таймеры и открытые соединения — наиболее распространенная причина, по которой экземпляр не может быть корректно перезапущен и потребляет память до тех пор, пока система не зависнет.
Обновлять
Обновление js-контроллера происходит не через вкладку «Адаптер», а через вкладку «Хосты» или в командной строке:
iobroker upgrade self
!> Перед изменением версии контроллера создайте резервную копию . Адаптер, требующий минимальной версии контроллера, укажет это в своем [документе/информации].io-package.json один; см. адаптер публикации .