Отладка скрипта
Большинство логических ошибок - это не сбои, а скорее вещи, которые незаметно остаются незамеченными. На этой странице рассматриваются наиболее распространенные случаи в порядке их проверки.
Скрипт ничего не делает
Он вообще запущен? Скрипт выполняется только тогда, когда он активирован в списке слева с помощью кнопки воспроизведения. Активный скрипт выделен в списке. javascript.<Instanz>.scriptEnabled.<Skriptname> указывает на то же состояние.
Запущен ли экземпляр? В разделе Экземпляры экземпляр JavaScript должен быть отмечен зеленым цветом.
Скрипт в остановленном экземпляре включен, но все еще не запущен.
Правильный ли идентификатор состояния? Отсутствие идентификатора не является ошибкой - триггер просто ожидает неопределенное время. Найдите идентификатор в дереве объектов и скопируйте его оттуда, не вводите его вручную.
Не слишком ли узкий диапазон срабатывания? change: 'ne' срабатывает только при другом значении. Кнопка, которая каждый раз отправляет true, никогда не меняет своего значения и, следовательно, никогда не срабатывает. Для таких устройств правильным триггером является обновление (any).
Скрипт срабатывает слишком часто
Обычно виновником является флаг подтверждения (ack). Если скрипт записывает состояние, устройство подтверждает выполнение, и скрипт также отвечает на это подтверждение, он выполняется дважды - и если он снова записывает данные в процессе выполнения, он выполняется бесконечно.
Общее правило: триггер отслеживает обратную связь (ack: true) и записывается как команда (ack: false). В Blockly и в правилах это выбор в блоке триггера; в JavaScript это третий параметр setState.
Вторая распространенная причина - срабатывание триггера по сигналу обновления вместо изменения для датчика, который передает данные с фиксированным интервалом.
Поиск ошибок в журнале
Под редактором находится окно журнала, в котором отображаются только сообщения от текущего открытого скрипта. Оно заполняется с момента запуска скрипта; чтобы найти сообщение, которое уже было отправлено, проверьте общий журнал в разделе Журнал.
Скрипты Blockly отображают сообщение об ошибке, указывающее на сгенерированную строку кода.
Этот код можно просмотреть, а номер строки найти на вкладке над рабочей областью.
Сообщения уровня debug отображаются только в том случае, если уровень протокола экземпляра установлен соответствующим образом - в разделе Экземпляры в экспертном режиме.
Создание тестового экземпляра
Скрипт с критической ошибкой может привести к завершению работы всего экземпляра. Если в этом же экземпляре работает система управления отоплением, она также завершит работу.
Поэтому: создайте второй экземпляр JavaScript и сначала запустите в нём новые или более крупные скрипты. Экземпляр выбирается в редакторе над скриптом. Он видит те же состояния - разделение влияет только на процесс, а не на данные.
Типичные препятствия
Два скрипта не могут использовать одни и те же переменные. Даже в рамках одного экземпляра, даже в пределах глобальной папки. Глобальная папка использует одни и те же функции, а не значения. Для передачи значений создайте состояние.
getState, выполняемый непосредственно после setState, возвращает старое значение. Процесс записи не завершается немедленно. Либо продолжайте работать со значением, которое у вас уже есть, либо используйте вариант с Async.
Значение может быть null. Адаптер, у которого еще нет данных, не вернет числовое значение. Вычисление с этим значением приведет к результату NaN и незаметно запишет бессмысленный текст в состояние.
Расписания накапливаются. При изменении и перезапуске скрипта адаптер удаляет собственные расписания. Он не удаляет расписания, созданные одним скриптом внутри другого.
Значение представляет собой строку. Некоторые адаптеры возвращают "22.5" вместо 22.5.
В этом случае сравнение с > приводит к иному, чем ожидалось.
Если ничего не помогает
- Сократите скрипт до минимального варианта, который все еще содержит ошибку.
показывает, что причина обычно сама собой выявляется.
- Чтобы проверить, работает ли это, задайте выходной сигнал непосредственно в триггере.
пожары.
- Задайте вопрос на форуме ioBroker. Это включает в себя:
Скрипт, текст сообщения об ошибке (дословно), версия адаптера и версия js-контроллера.
Проблемы, возникающие не из-за скрипта, а из-за системы, описаны в разделах Ошибка адаптера и ioBroker больше не работает..