Методы turnOn и turnOff предназначены управления самим реле. Если Вам нужно при изменении статуса выполнять какой-то дополнительный код, разместите его в statusChangedxneo писал(а):Временно сделал не самый лучший костыль - добавил в onNewMinute проверку вызов метода refresh у всех объектов класса реле. Но во первых это большая задержка, а я точно знаю что есть обработчик который реагирует на получение сообщений мгновенно. И во вторых это неправильно на мой взгляд и загромождает код.
Взаимодействие с Mqtt
Модератор: immortal
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Взаимодействие с Mqtt
- Рейтинг: 1.16%
-
- Сообщения: 21
- Зарегистрирован: Пн апр 24, 2017 4:35 am
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
Re: Взаимодействие с Mqtt
Но у класса реле изначально нет такого метода. Если его создать то при изменении статуса он не вызывается. Может нужно сделать что то еще?olehs писал(а):Методы turnOn и turnOff предназначены управления самим реле. Если Вам нужно при изменении статуса выполнять какой-то дополнительный код, разместите его в statusChanged
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Взаимодействие с Mqtt
В свойстве статус указать его в поле Запускать метод при изменении.
P.S думал оно так изначально было.
P.S думал оно так изначально было.
- Рейтинг: 1.16%
-
- Сообщения: 21
- Зарегистрирован: Пн апр 24, 2017 4:35 am
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
Re: Взаимодействие с Mqtt
Ну и еще одна проблемка вылезла - при вызове метода statusChanged статус объекта еще не обновлен (т.е. он вызывается перед обновлением свойства status) и мой код отрабатывает некорректно: реле просто на долю секунды передергивается и возвращается в прежнее положение.
Как перехватить то что будет установлено в свойство status объекта до его установки?
UPD: Разобрался! Проблема была в том что после изменения статуса выполнялись методы класса turnOn или turnOff которые в свою очередь меняли статус. Получался бесконечный вызов метода statusChanged. Перенес свой код метода statusChanged в объект Relay1 и отключил у него наследование методов turnOn и turnOff. Отрабатывает моментально!
Хотя тоже как то костыльково
Как перехватить то что будет установлено в свойство status объекта до его установки?
UPD: Разобрался! Проблема была в том что после изменения статуса выполнялись методы класса turnOn или turnOff которые в свою очередь меняли статус. Получался бесконечный вызов метода statusChanged. Перенес свой код метода statusChanged в объект Relay1 и отключил у него наследование методов turnOn и turnOff. Отрабатывает моментально!
Хотя тоже как то костыльково
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Взаимодействие с Mqtt
Алгоритм работы с реле Вы выбрали неправильный, вот и приходится костылять.
Если опишите, что и зачем происходит, можно будет попробовать придумать что-то получше.
Если опишите, что и зачем происходит, можно будет попробовать придумать что-то получше.
-
- Сообщения: 21
- Зарегистрирован: Пн апр 24, 2017 4:35 am
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
Re: Взаимодействие с Mqtt
Реле подключено к gpio Orange pi one. Для работы с gpio используется WiringOP. Для переключения состояний реле используется пара команд из WiringOP в методах turnOn и turnOff.
-
- Сообщения: 21
- Зарегистрирован: Пн апр 24, 2017 4:35 am
- Благодарил (а): 4 раза
- Поблагодарили: 1 раз
Re: Взаимодействие с Mqtt
Ну так это были стандартные методы. Вашу идею понял. Перепишу в statusChanged. Спасибо.
-
- Сообщения: 1115
- Зарегистрирован: Вс июн 14, 2015 11:08 am
- Благодарил (а): 85 раз
- Поблагодарили: 342 раза
Re: Взаимодействие с Mqtt
Я как раз совсем о противоположном говорю.xneo писал(а):Ну так это были стандартные методы. Вашу идею понял. Перепишу в statusChanged. Спасибо.
Идея в том, что свойство status отображает фактическое состояние реле, а управление должно происходить вызовом методов turnOn и turnOff напрямую.
Если при изменении статуса должны происходить еще какие-то посторонние действия, то их можно впихнуть в statusChanged. Но напрямую менять состояние реле из statusChanged - плохая идея.