Метод при изменении свойства вызывается дважды

Если вы только начинаете осваивать систему MajorDoMo и чего-то не знаете или не можете понять, то задавайте свои вопросы в этой ветке.

Модератор: immortal

Ответить
jakob291
Сообщения: 2
Зарегистрирован: Пн май 30, 2022 4:44 pm
Благодарил (а): 0
Поблагодарили: 0

Метод при изменении свойства вызывается дважды

Сообщение jakob291 » Вс мар 12, 2023 8:55 pm

Всем доброго дня.
Вводные:
MJDM на виртуалке ubuntu, docker
mosquitto там же, docker.
Есть созданный мной класс объектов.
У объекта имеется метод, который по нажатию переключателя проверяет несколько условий и, если все хорошо, меняет свойство этого объекта по коду

Код: Выделить всё

$this->setProperty('pumpStatus', 1);
На свойство pumpStatus класса повешен запуск другого метода по изменению. Код:

Код: Выделить всё

if ($this->getProperty('pumpStatus') == 1) {
  $this->callMethod('log_watering');
  $this->setProperty('latestWatering_epoch', time());
  say('включился насос', 2);
}
на это же свойство (pumpStatus) привязан топик mqtt (MJDM командует железякой, посылает команду на включение, а уведомление о выключении присылает железяка, чисто для обновления свойства переключателя)
log_watering только пишет в БД

Столкнулся с любопытной проблемой:
Если запустить метод переключателем, то он как будто отрабатывает дважды: в БД две строки, два сообщения от Алисы
Если запустить метод по ссылке (кнопкой в панели управления), то он отрабатывает один раз

Насколько я понял, дело как раз в том, что и топик mqtt и переключатель привязаны на одно свойство, но вот как это обойти нормально пока не понимаю.
Приложу картинки настроек mqtt
mqtt.jpg
mqtt.jpg (88.78 КБ) 470 просмотров
и переключателя
pump.jpg
pump.jpg (89.97 КБ) 470 просмотров
Ответить