Просьба: в этом топике обсуждаются только нововведения и ошибки, обнаруженные при тестировании wb-rules 2.0. Для вопросов по программированию сценариев на стабильных версиях wb-rules существуют другие топики.
Доброго времени, форумчане!
К релизу готовится движок правил wb-rules версии 2.0, и нам нужны бета-тестеры. В обновлённой версии добавлен набор нововведений, а также исправлены некоторые обнаруженные ошибки.
Нововведения:
Система модулей (с использованием require(), похожая на оную в Node.js);
Я вот аккуратненько спрошу тут — а почему собственно для правил используется не Node.js? Когда я занялся реализацией поддержки эппловского HomeKit (с помощью homebridge) в WB, было очень странно (и довольно мучительно, по правде сказать) ставить ноду в дополнение к вашему движку.
Отчёт о тестировании “удаления и пересоздания сценариев”
Кратко: Проблема не решилась. Всё равно приходится перезапускать движок правил после каждого удаления.
Подробно:
Для добавления-удаления сценария использую следующую комбинацию виртуального устройства и правила:
Корректно отработали два цикла добавления-удаления. Третье добавление не произошло.
После первого теста движок перезапущен в ручную (service wb-rules restart).
Корректно отработал один цикл добавления-удаления. Второе добавление не произошло.
После второго теста движок перезапущен в ручную.
Корректно отработал один цикл добавления-удаления. Второе добавление не произошло.
С перезапуском после каждого удаления ( добавил в код runShellCommand("service wb-rules restart"); ):
Корректно отработали более четырёх циклов добавления-удаления.
Обращаться к одному и тому же хранилищу можно, создавая в разных сценариях объекты PersistentStorage с одним и тем же именем хранилища. Объекты вполне могут быть локальными для сценария.
Флаг global: true как раз нужен для того, чтобы хранилище было доступно под этим именем во всех файлах сценариев.
Таким образом, во всех сценариях такая конструкция обеспечит доступ к одному и тому же хранилищу:
var ps = new PersistentStorage("my-storage", {global: true});
Создание и доступ здесь сильно не различаются; есть пространство имён глобальных хранилищ и для каждого сценария есть локальное. Если хранилище не существовало до вызова new PersistentStorage(), оно будет создано. Так что да, для глобального хранилища аргумент нужен при всех обращениях.
Глобальные фукнции можно сложить в один модуль, к примеру:
Если есть соображение, что так будет удобней - пожалуйста. Другое дело, что может случиться “гонка”, если хранилище будет использоваться в сценарии при запуске, т.к. порядок загрузки сценариев не гарантируется. Может случиться так, что какой-то сценарий попытается обратиться к хранилищу, пока сценарий с объявлением не загружен.
В общем-то, такое хранилище можно запросто перенести в модуль (при условии, что оно так же останется глобальным).
понял в чем была проблема: при добавлении в модуле комментариев, начинаются проблемы. Проверьте у себя, плз.
подробнее о глюке:
есть скрип и модуль без комментов. Все работает нормально. Добавляю в модуль коммент (// или /* */ не важно), сохраняю. Потом пересохраняю скрипт и получаю ошибку синтаксиса. Удаляю коммент, перезапускаю wb-rules и все ок.
глюк стабильный. Возможно из-за кодировки, так-как файл создаю в notepad++ и только сейчас заметил, когда зашёл в редактор через webui, что с русскими беда. Вроде исправил кодировки. Но глюк остался, даже без русских символов. Завтра попробую создать модуль через консоль и проверить.