Недостатки модулей «Устройства Online» и «Веб-переменные»
Добавлено: Сб дек 15, 2012 12:23 pm
Модули «Устройства Online» и «Веб-переменные» имеют два существенных недостатока.
Первый. Они отслеживают факт изменения параметра, но, если параметр не изменялся, то нет и реакции модуля. Невозможно отследить сам факт обновления.
Второй недостаток состоит в том, что модули не предоставляют доступа к текущему состоянию параметра. А это совсем не хорошо.
Поясню на примере.
Запускаем MajorDoMo (а в это время в сети полно устройств, многие из которых работают постоянно). Нам надо установит глобальную переменную object.online. В Устройствах Online есть пункт «Действие при переходе в Online».
--------------
Так вот: события «переход в Online» мы не дождёмся! Устройство уже (и постоянно) в online. Следовательно мы не сможем установить глобальную переменную object.online _никогда_. И взять внутреннюю переменную модуля мы не можем, потому, что модуль нам такого сервиса не предоставляет! Всё, приехали. Сидим с серым (или вообще неправильным индикатором состояния устройства).
--------------
Для решения этой проблемы пришлось изобрести скрипт (initDevicesOnline), который при запуске принудительно копирует текущие переменные модуля в свойства online нужных объектов. Но это неправильный подход и вообще костыль. Модуль должен предоставлять доступ к текущим значениям переменных и позволять устанавливать свойства объектов и запускать скрипты по факту обновления, а не только по факту изменения значения.
Кстати, initDevicesOnline нужно запускать при старте системы. Есть ли в MajorDoMo некий аналог. autoexec.bat? А ещё лучше отсроченный на 2 минуты после старта autoexec.bat.
Первый. Они отслеживают факт изменения параметра, но, если параметр не изменялся, то нет и реакции модуля. Невозможно отследить сам факт обновления.
Второй недостаток состоит в том, что модули не предоставляют доступа к текущему состоянию параметра. А это совсем не хорошо.
Поясню на примере.
Запускаем MajorDoMo (а в это время в сети полно устройств, многие из которых работают постоянно). Нам надо установит глобальную переменную object.online. В Устройствах Online есть пункт «Действие при переходе в Online».
--------------
Так вот: события «переход в Online» мы не дождёмся! Устройство уже (и постоянно) в online. Следовательно мы не сможем установить глобальную переменную object.online _никогда_. И взять внутреннюю переменную модуля мы не можем, потому, что модуль нам такого сервиса не предоставляет! Всё, приехали. Сидим с серым (или вообще неправильным индикатором состояния устройства).
--------------
Для решения этой проблемы пришлось изобрести скрипт (initDevicesOnline), который при запуске принудительно копирует текущие переменные модуля в свойства online нужных объектов. Но это неправильный подход и вообще костыль. Модуль должен предоставлять доступ к текущим значениям переменных и позволять устанавливать свойства объектов и запускать скрипты по факту обновления, а не только по факту изменения значения.
Кстати, initDevicesOnline нужно запускать при старте системы. Есть ли в MajorDoMo некий аналог. autoexec.bat? А ещё лучше отсроченный на 2 минуты после старта autoexec.bat.