Передовые методы
Следующие пункты относятся ко всем способам построения логики — к правилам и 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 .