Я не смог найти информацию о режиме отладки контроллера. Что под этим я подразумеваю?
Возможность вывести на экран отладки нужные параметры, включая таймеры, переменные, состояние модулей и т.д. Для чего это нужно? Чтобы понять где ошибка в программе при отладке или чтобы убедиться что нет ошибок.
На веб браузере панели управления контроллера можно вывести контролы, но это лишь состояние модулей. А нужно еще переменные, таймеры и т.д.
Почему такие вопросы? В работе использую еще один контроллер другого производителя. Там это реализовано и как не странно очень удобно.
Переменные и прочую отладку мы выводим обычно в лог. Причем можно вставлять логи, активные только в “Debug” режиме wb-rules.
Ну и собственно говоряможно вставить в веб-интерфейс что угодно, как на ваш взгляд было б удобней всего?
Пока в общей сложности вижу этот контроллер не более 4х часов и мне сложно понять что пишите. Например как выводить переменные и прочее в лог. Пока нигде об этом не вычитал. Про вставлять логи… тоже не понятно и собственно как выводить в веб интерфейс)
Поясните пож. подробнее что хотели сказать. Или где об этом почитать, ну лучше пояснить раз начался этот диалог.
Отладка
Собственно с этой темы и надо было начать документ. Но опишем тут.
Итак - создали скрипт, а он не работает. А сохраняется без ошибок! Но того что нужно - не делает.
Как понять в чем причина?
Ответ прост: логи.
Вставив в тело сктрипта строчку:
log.info("TestLog Info 1")//Это лог. Он попадает в /var/log/messages
Мы получим запись в файл. Туда же, в файл пишется еще много интересного, тот же дебаг wb-mqtt-serial.
log.info - будет записываться в лог всегда, что может быть не очень удобно.
Поэтому существует
log.debug("TestDebug1 1") //Это дебаг. Он обрабатывается только если включен переключатель в "devices"
И debug сообщения выводятся в топик mqtt /wbrules
Только ли текст можно выводить? Нет.
Создадим скрипт
LogTest.js
С телом:
defineRule
("VINchange",
{
whenChanged: "wb-adc/Vin", //при изменении напряжения питания
then: function (newValue, devName, cellName) //выполняй следующие действия
{
//log.{debug,info,warning,error}(fmt, [arg1 [, ...]]) //Пример использования
log.info("TestLog1 info 1") //Это лог. Он работает всегда
log.debug("TestLog1 debug 1") //Это ДЕБАГ. Он работает только если включен переключатель
log.info("info volt: ", newValue) //Это лог. Он работает всегда
log.debug("TestLog1 debug 1", newValue, devName, cellName) //Это ДЕБАГ. Он работает только если включен переключатель
}
}
);
Сохраняем.
Теперь, чтобы просмотреть в консоли запускаем
Info:
tail -f /var/log/messages
Debug:
mosquitto_sub -v -t /wbrules/#
Данный способ не является режимом отладки. Это обработка данных в офлайне и сказал бы в большинстве случаев сложна для отладки. А отладка это обработка данных в онлайне. То есть когда видим на экране состояние реле, таймеров и т.д. в реальном времени. В режиме отладки важно иметь возможность вмешаться состояние реле, таймеров и т.д. Например, не хочу ждать пока таймер будет считать 2 минуты обнуляем чтобы сработала следующая команда и ускоряем отладку.
Как раз нет, потому что мы отлаживаем то, что работает в реальном времени. И по логу - можем отследить как и что менялось.
В том-то и дело, что “видеть” - можно и в реальном времени, подписавшись на топики устройств. Но от этого мало толку, так как нужно в боьшинстве случаев знать состояния именно в какой-то определенный момент. И момент этот четко привязан к внутренним состояниям переменных, например.
Пишем в устройстве кнопку - по ее нажатию сбрасываем таймер.
Подобное чему? Если есть какой-то пример - то сравню - отвечу.
Ну так можно ж открыть MQTTChannels в веб-интерфейсе и смотреть в него. Вот, кстати, менять там нельзя. А идея - отличная, благодарю!
В общем смысл предложения в том чтобы сделать в веб-интерфейсе возможность сразу публиковать значения.