Страница 5 из 6

Re: вызов метода при изменении свойства объекта

Добавлено: Пн янв 27, 2020 11:44 pm
tarasfrompir
alexpzas писал(а):
Пн янв 27, 2020 11:41 pm
Всем привет, помогите плиз. Проблема в том, что на уровне класса в свойстве в поле - Запускать метод при изменении, выбрал нужный мне метод,(кстати свойство привязано к mqtt паблику), и теперь каждую секунду метод отрабатывает, хотя значение свойства не меняется. Я так понимаю это из за того , что каждую сек. обновляется состояние свойства, и хоть его значение не меняется, но МДМ понимает это по другому и вызывает метод. Как сделать так, чтобы метод вызывался только при смене значения свойства.
в начале метода вставь
if ($params['NEW_VALUE'] == $params['OLD_VALUE']) return;

Re: вызов метода при изменении свойства объекта

Добавлено: Пн янв 27, 2020 11:55 pm
alexpzas
Вот код моего метода

if ($params['NEW_VALUE'] == $params['OLD_VALUE']) return;
if(gg('SensorHome.secure') == 1) {
say('Охрана on',2);
}
if(gg('SensorHome.secure') == 0) {
say('Охана off',2);
}

Но ситуация таже ((

Re: вызов метода при изменении свойства объекта

Добавлено: Вт янв 28, 2020 12:00 am
alexpzas
ага вроде разобрался, нужно было этод код вставить на уровне обьекта , а не класса.

Re: вызов метода при изменении свойства объекта

Добавлено: Пт май 21, 2021 12:23 pm
andrusha7778
Подскажите пожалуйста, как при вызове метода при изменении свойств объекта понять, какой именно метод или модуль вызвал изменение этого свойства?
То есть задача примерно следующая: есть свойство объекта (целевая температура контура отопления), это свойство могут менять различные методы из разных модулей, в зависимости от этого необходимо реализовывать разную логику. Простой пример - на термостате на радиаторе выбираю необходимую Т отопления, эти данные попадают в свойство объекта Термостат.целеваятемпература, далее есть объект контур отопления у которого такое же свойство. Целевая температура контура отопления может меняться как термостатом, так и центральной панелью управления (другой объект другое устройство другой модуль). Поскольку за работу термостатов и центральной панели отвечают разные модули, то объекты для этих устройств тоже разные, а общий объект у них - контур отопления, свойство которого и надо менять с разных устройств.

Re: вызов метода при изменении свойства объекта

Добавлено: Пт май 21, 2021 1:39 pm
fandaymon
andrusha7778 писал(а):
Пт май 21, 2021 12:23 pm
Подскажите пожалуйста, как при вызове метода при изменении свойств объекта понять, какой именно метод или модуль вызвал изменение этого свойства?
То есть задача примерно следующая: есть свойство объекта (целевая температура контура отопления), это свойство могут менять различные методы из разных модулей, в зависимости от этого необходимо реализовывать разную логику. Простой пример - на термостате на радиаторе выбираю необходимую Т отопления, эти данные попадают в свойство объекта Термостат.целеваятемпература, далее есть объект контур отопления у которого такое же свойство. Целевая температура контура отопления может меняться как термостатом, так и центральной панелью управления (другой объект другое устройство другой модуль). Поскольку за работу термостатов и центральной панели отвечают разные модули, то объекты для этих устройств тоже разные, а общий объект у них - контур отопления, свойство которого и надо менять с разных устройств.
Реализуй разную логику в тех разных местах, которые свойство меняют

Re: вызов метода при изменении свойства объекта

Добавлено: Пт май 21, 2021 7:54 pm
andrusha7778
В истории свойства объекта вижу столбец src, по данным из которого можно понять, что же являлось источником изменений этого свойства.
Дело в том, что при изменении свойства "целевая температура" работает один и тот же метод, который должен менять другие свойства у других объектов. Получается, что если в случае изменении свойства одним методом - методА (от другого объекта) нужна одна логика, а если свойство этого объекта поменял методБ - другая логика.
Непонятно, как делать логику в трех разных местах, если свойство объекта (целевая температура контура отопления) должна изменяться и с термостата и с панели управления контроллера и с веб морды, а последнее выставленное значение должно автоматически приезжать на все устройства (термостат и контроллер). При этом термостат и контроллер отопления никак не связаны, только через логическое устройство "контур отопления" в MD. В какую-то одну сторону вся система отлично работает.

Re: вызов метода при изменении свойства объекта

Добавлено: Сб май 22, 2021 3:08 am
xor
andrusha7778 писал(а):
Пт май 21, 2021 7:54 pm
В истории свойства объекта вижу столбец src, по данным из которого можно понять, что же являлось источником изменений этого свойства.
Дело в том, что при изменении свойства "целевая температура" работает один и тот же метод, который должен менять другие свойства у других объектов. Получается, что если в случае изменении свойства одним методом - методА (от другого объекта) нужна одна логика, а если свойство этого объекта поменял методБ - другая логика.
Непонятно, как делать логику в трех разных местах, если свойство объекта (целевая температура контура отопления) должна изменяться и с термостата и с панели управления контроллера и с веб морды, а последнее выставленное значение должно автоматически приезжать на все устройства (термостат и контроллер). При этом термостат и контроллер отопления никак не связаны, только через логическое устройство "контур отопления" в MD. В какую-то одну сторону вся система отлично работает.
а параметр SOURCE передается же в привязанный метод, наравне с NEW_VALUE и OLD_VALUE
и анализируйте $params['SOURCE'] в привязанном методе

Re: вызов метода при изменении свойства объекта

Добавлено: Вс май 23, 2021 11:37 am
andrusha7778
xor писал(а):
Сб май 22, 2021 3:08 am
а параметр SOURCE передается же в привязанный метод, наравне с NEW_VALUE и OLD_VALUE
и анализируйте $params['SOURCE'] в привязанном методе
Спасибо большое! Дело в том, что я ничего подобного на Wiki и в базе знаний не нашел. Буду пробовать!
UPD - попробовал, но всё не очень однозначно.
К примеру есть свойство TartgetTemp у объекта HeatingCircuit которое меняется модулем Zont. В модуле это свойство привязано к получаемым данным, всё ок.
При изменении этого свойства вызывается метод TargetTempChanged. Внутри этого метода прописал через say вывод $params['SOURCE'], однако получаю пустое значение. Подумал что может это массив, попробовал обработать его через print_r предварительно - получаю "1", а если через json_encode - то просто ""
Что должно быть внутри $params['SOURCE'] ?
Объекты или ссылки на них? Или если меняется значение из модуля напрямую (а не методом) то я ничего не получу?

Re: вызов метода при изменении свойства объекта

Добавлено: Вс май 23, 2021 11:47 am
Logrus
andrusha7778 писал(а):
Вс май 23, 2021 11:37 am
xor писал(а):
Сб май 22, 2021 3:08 am
а параметр SOURCE передается же в привязанный метод, наравне с NEW_VALUE и OLD_VALUE
и анализируйте $params['SOURCE'] в привязанном методе
Спасибо большое! Дело в том, что я ничего подобного на Wiki и в базе знаний не нашел. Буду пробовать!
зато на форуме неоднократно и с примерами расписано

Re: вызов метода при изменении свойства объекта

Добавлено: Вс май 23, 2021 11:55 am
andrusha7778
Странно, при изменении через админку свойства объекта получаю в $params['SOURCE'] ссылку, однако если меняется из модуля то данные не приходят.