js-контроллер с точки зрения разработки

js-контроллер — это ядро каждой установки ioBroker. Для разработки адаптеров крайне важно понимать, что он предоставляет и какие правила на его основе формируются. Взгляд пользователя на этот же элемент описан в разделах «Контроллер» и «Адаптер» .

То, что он берет на себя.

ЗадачаЧто это значит для адаптера?
ПроцессыКонтроллер запускает и останавливает экземпляры, а также перезапускает их после сбоя. Адаптеру не нужно поддерживать свою работоспособность.
База данных объектовВсе описания: устройства, каналы, точки данных, экземпляры, пользователи. Редко изменяются, часто читаются.
База данных состоянийЗначения с меткой времени иack Номерной знак. Часто меняется.
НовостиЭкземпляры взаимодействуют друг с другом через контроллер, а не напрямую.
РазрешенияЛюбой доступ нарушает права соответствующего пользователя.

Адаптер никогда не взаимодействует напрямую с базами данных. Он использует@iobroker/adapter-core Эта библиотека взаимодействует с контроллером. Поэтому адаптеру всё равно, находятся ли данные во встроенных файловых базах данных или в Redis , и работает ли контроллер на той же машине или в многохостовой среде .

Объект и условие — это две разные вещи.

Именно здесь чаще всего возникают недоразумения. Объект описывает что-либо, а состояние содержит это значение. Оба имеют один и тот же идентификатор, но хранятся в разных базах данных и имеют разный срок жизни.

Объект создаётся один раз во время инициализации и после этого редко изменяется. Его состояние может меняться каждую секунду. Запись в объект при каждом изменении значения создаёт ненужные накладные расходы.

Структура объекта описывается в разделе «Схема объекта» , а предполагаемые роли — в разделе «Роли состояния» .

Задний номерной знак

Каждое условие, помимо своей ценности, несет в себе иack Оно различает две совершенно разные вещи:

  • ack: false Это запрос . Кто-то хочет, чтобы что-то было переключено. Адаптер отслеживает эти состояния и выполняет запрос.
  • ack: true Это факт . Адаптер узнал об этом от устройства и записывает значение обратно.

Смешивание этих двух методов создает петли обратной связи: адаптер сообщает значение, ошибочно принимает его за команду и снова переключается.

Резюме экземпляра

Контроллер запускает процесс, передает ему конфигурацию и ожидает ответа. После завершения работы адаптеру предоставляется возможность выполнить очистку, и это не является проявлением вежливости: неудаленные таймеры и открытые соединения — наиболее распространенная причина, по которой экземпляр не может быть корректно перезапущен и потребляет память до тех пор, пока система не зависнет.

Обновлять

Обновление js-контроллера происходит не через вкладку «Адаптер», а через вкладку «Хосты» или в командной строке:

iobroker upgrade self

!> Перед изменением версии контроллера создайте резервную копию . Адаптер, требующий минимальной версии контроллера, укажет это в своем [документе/информации].io-package.json один; см. адаптер публикации .