Добрый день друзья и соратники.
В логике автоматики часто приходится обращаться к историческим данным.
Как я не искал – не смог найти в WB-Rules реализованного способа оперировать историческими данными, которые контроллер хранит. Единственный способ, который я нашел – вызов консольного клиента и парсинг текстового результата (что не очень удобно, на самом деле). Кроме того, функция runShellCommand асинхронна, и если задача предполагает какую-то последующую передачу полученных результатов (например среднего значения показателя за период) то это становится вообще проблемой.
Как-то не вериться, что столь фундаментальный и основополагающий для любых систем управления функционал в системе не реализован. Возможно существует “человеческий” способ оперировать историческими данными – буду благодарен за наводку.
Если же его все таки нет (ПОЧЕМУ, черт подери), то может кто-то подскажет, как реализовать синхронный обработчик исторических данных, который возвращал бы результат как функция.
Сейчас я реализовал это костылями, через вызов по CRON, записи в отдельный контрол виртуального устройства и правилом на изменение значение этого контрола, но это очень не удобно, тяжело читать и отлаживать. Попытался написать модуль, но не понимаю, как дождаться выполнения асинхронного вызова и выдернуть результат из callback (очень далек от JS и честно говоря местами он причиняет мне боль).
И еще просьба к разработчикам. Не знаю как для других пользователей, но мне остро не хватает возможности получить предидущее (до изменения) значение параметра при вызове правила по триггеру whenChanged, чтобы можно было просто отслеживать на сколько значение изменилось.
Если выходить за рамки логики “Если нажали кнопку нужно замкнуть реле”, то работа с историческим контекстом становится важной и нужной, а учитывая общую гибкость системы при ее простоте (за что разработчикам отдельный респект), которая позволяет в принципе реализовать управление запуском космического корабля, так и хочется реализовывать сложные многоуровневые сценарии, но некоторые вещи приходится так костылять, что код становится совершенно не поддерживаемым и с ним приходится буквально бороться.