Передовые методы

Следующие пункты относятся ко всем способам построения логики — к правилам и Blockly, а также к JavaScript. Они основаны на наиболее часто встречающихся ошибках на форуме.

Реагируйте, а не спрашивайте.

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

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

Разграничение командной работы и обратной связи

Онack — Флаг — это самый важный термин на всей странице.

  • ack: falseКоманда : «Включи лампу». Так пишется логика.
  • ack: trueОтвет : «Лампа горит». Так пишут специалисты по адаптерам.

Реагирование на оба типа сигналов создает петли обратной связи, которые, в зависимости от устройства, могут проявляться в виде мерцания, постоянного шума или оставаться незамеченными. Триггеры реагируют на обратную связь, а данные записываются в виде команд.

Пишите только в случае изменений.

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

Государства — это общая память.

Скрипты не обмениваются переменными, даже в рамках одного экземпляра. Если одному скрипту необходимо передать что-либо другому, он делает это через собственное состояние. Такие состояния находятся в рамках собственного экземпляра скрипта — через `<script>`.createState в JavaScript или соответствующем строительном блоке в Blockly — и они получают описательное имя.

Не обращайтесь к устройствам напрямую.

Сценарий, которыйhm-rpc.0.LEQ1234567.1.STATE Функция переключения привязана к данному конкретному устройству. При замене исполнительного механизма необходимо повторно загрузить все скрипты, содержащие идентификатор.

Псевдоним решает эту проблему:alias.0.Wohnzimmer.Deckenlicht Результат остается тем же, даже если используется другое устройство. В этом случае замена устройства приводит к изменению только в одной точке, а не в двадцати.

В скрипте отсутствуют учетные данные для входа.

Пароли, ключи доступа и подобная информация не должны включаться в текст скрипта. Скрипт копируется, публикуется на форуме и сохраняется — учетные данные для входа копируются вместе с ним.

Для этого в JavaScript-адаптере предусмотрено централизованное хранилище: данные доступа хранятся в настройках экземпляра в разделе «Данные доступа» и доступны в скрипте по адресу [название ссылки/кнопки].SECRETS доступны, напримерSECRETS.Kamera.key Значения расшифрованы и доступны только для чтения, а редактор предлагает возможные значения по мере ввода. В Blockly для этого есть специальный модуль.

Начинайте с малого, делите на большие

  • Один скрипт, одна задача. «Затенение» и «нагрев» не должны находиться в одном файле, даже если они оба отслеживают одну и ту же температуру.
  • Разместите повторяющиеся функции в скрипте, расположенном в глобальной папке. Его содержимое будет доступно для всех остальных скриптов.
  • Создавайте папки по комнатам или профессиям. Место хранения не влияет на выполнение, но существенно затрудняет поиск файлов через шесть месяцев.

Только в тестовом экземпляре

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

Безопасный

Скрипты хранятся в базе данных ioBroker и, следовательно, включаются в регулярное резервное копирование. Пользователи, которые также хотят хранить их в виде файлов, могут указать зеркальный каталог в настройках экземпляра; в этом случае резервное копирование скриптов будет выполняться непрерывно..js -Файлы записываются туда и могут иметь версии.

Пишите разборчиво.

  • Названия, указывающие на цель:Beschattung Süd вместоSkript 3 .
  • В начале — комментарий: Что оно делает, на что реагирует?
  • В Blockly используйте блок комментариев вместо того, чтобы полагаться на расположение блоков.

Примеры

Полные решения и примеры собраны на форуме ioBroker . В справочнике Blockly для JavaScript-адаптера также содержатся три полностью проработанных примера, от первого строительного блока до готового скрипта: Справочник Blockly .