Страница 2 из 3
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 12:18 pm
olehs
xneo писал(а):Временно сделал не самый лучший костыль - добавил в onNewMinute проверку вызов метода refresh у всех объектов класса реле. Но во первых это большая задержка, а я точно знаю что есть обработчик который реагирует на получение сообщений мгновенно. И во вторых это неправильно на мой взгляд и загромождает код.
Методы turnOn и turnOff предназначены управления самим реле. Если Вам нужно при изменении статуса выполнять какой-то дополнительный код, разместите его в statusChanged
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 12:26 pm
xneo
olehs писал(а):Методы turnOn и turnOff предназначены управления самим реле. Если Вам нужно при изменении статуса выполнять какой-то дополнительный код, разместите его в statusChanged
Но у класса реле изначально нет такого метода. Если его создать то при изменении статуса он не вызывается. Может нужно сделать что то еще?
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 12:28 pm
olehs
В свойстве статус указать его в поле Запускать метод при изменении.
P.S думал оно так изначально было.
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 12:58 pm
xneo
Ну и еще одна проблемка вылезла - при вызове метода statusChanged статус объекта еще не обновлен (т.е. он вызывается перед обновлением свойства status) и мой код отрабатывает некорректно: реле просто на долю секунды передергивается и возвращается в прежнее положение.
Как перехватить то что будет установлено в свойство status объекта до его установки?
UPD: Разобрался! Проблема была в том что после изменения статуса выполнялись методы класса turnOn или turnOff которые в свою очередь меняли статус. Получался бесконечный вызов метода statusChanged. Перенес свой код метода statusChanged в объект Relay1 и отключил у него наследование методов turnOn и turnOff. Отрабатывает моментально!
Хотя тоже как то костыльково

Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 1:57 pm
olehs
Алгоритм работы с реле Вы выбрали неправильный, вот и приходится костылять.
Если опишите, что и зачем происходит, можно будет попробовать придумать что-то получше.
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 6:56 pm
xneo
Реле подключено к gpio Orange pi one. Для работы с gpio используется WiringOP. Для переключения состояний реле используется пара команд из WiringOP в методах turnOn и turnOff.
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 6:58 pm
olehs
А зачем Вы вызываете turnOn и turnOff из statusChanged ?
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 7:01 pm
xneo
Ну так это были стандартные методы. Вашу идею понял. Перепишу в statusChanged. Спасибо.
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 7:05 pm
olehs
xneo писал(а):Ну так это были стандартные методы. Вашу идею понял. Перепишу в statusChanged. Спасибо.
Я как раз совсем о противоположном говорю.
Идея в том, что свойство status отображает фактическое состояние реле, а управление должно происходить вызовом методов turnOn и turnOff напрямую.
Если при изменении статуса должны происходить еще какие-то посторонние действия, то их можно впихнуть в statusChanged. Но напрямую менять состояние реле из statusChanged - плохая идея.
Re: Взаимодействие с Mqtt
Добавлено: Ср апр 26, 2017 7:08 pm
xneo
Понял. Логически немного неверно связал объекты.