Взаимодействие с Mqtt

Использование системы в различных ситуациях, вопросы программирования сценариев.

Модератор: immortal

olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Взаимодействие с Mqtt

Сообщение olehs » Ср апр 26, 2017 12:18 pm

xneo писал(а):Временно сделал не самый лучший костыль - добавил в onNewMinute проверку вызов метода refresh у всех объектов класса реле. Но во первых это большая задержка, а я точно знаю что есть обработчик который реагирует на получение сообщений мгновенно. И во вторых это неправильно на мой взгляд и загромождает код.
Методы turnOn и turnOff предназначены управления самим реле. Если Вам нужно при изменении статуса выполнять какой-то дополнительный код, разместите его в statusChanged
За это сообщение автора olehs поблагодарил:
xneo (Ср апр 26, 2017 12:30 pm)
Рейтинг: 1.16%
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Взаимодействие с Mqtt

Сообщение xneo » Ср апр 26, 2017 12:26 pm

olehs писал(а):Методы turnOn и turnOff предназначены управления самим реле. Если Вам нужно при изменении статуса выполнять какой-то дополнительный код, разместите его в statusChanged
Но у класса реле изначально нет такого метода. Если его создать то при изменении статуса он не вызывается. Может нужно сделать что то еще?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Взаимодействие с Mqtt

Сообщение olehs » Ср апр 26, 2017 12:28 pm

В свойстве статус указать его в поле Запускать метод при изменении.
P.S думал оно так изначально было.
За это сообщение автора olehs поблагодарил:
xneo (Ср апр 26, 2017 12:30 pm)
Рейтинг: 1.16%
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Взаимодействие с Mqtt

Сообщение xneo » Ср апр 26, 2017 12:58 pm

Ну и еще одна проблемка вылезла - при вызове метода statusChanged статус объекта еще не обновлен (т.е. он вызывается перед обновлением свойства status) и мой код отрабатывает некорректно: реле просто на долю секунды передергивается и возвращается в прежнее положение.
Как перехватить то что будет установлено в свойство status объекта до его установки?

UPD: Разобрался! Проблема была в том что после изменения статуса выполнялись методы класса turnOn или turnOff которые в свою очередь меняли статус. Получался бесконечный вызов метода statusChanged. Перенес свой код метода statusChanged в объект Relay1 и отключил у него наследование методов turnOn и turnOff. Отрабатывает моментально!
Хотя тоже как то костыльково :?
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Взаимодействие с Mqtt

Сообщение olehs » Ср апр 26, 2017 1:57 pm

Алгоритм работы с реле Вы выбрали неправильный, вот и приходится костылять.
Если опишите, что и зачем происходит, можно будет попробовать придумать что-то получше.
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Взаимодействие с Mqtt

Сообщение xneo » Ср апр 26, 2017 6:56 pm

Реле подключено к gpio Orange pi one. Для работы с gpio используется WiringOP. Для переключения состояний реле используется пара команд из WiringOP в методах turnOn и turnOff.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Взаимодействие с Mqtt

Сообщение olehs » Ср апр 26, 2017 6:58 pm

А зачем Вы вызываете turnOn и turnOff из statusChanged ?
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Взаимодействие с Mqtt

Сообщение xneo » Ср апр 26, 2017 7:01 pm

Ну так это были стандартные методы. Вашу идею понял. Перепишу в statusChanged. Спасибо.
olehs
Сообщения: 1115
Зарегистрирован: Вс июн 14, 2015 11:08 am
Благодарил (а): 85 раз
Поблагодарили: 342 раза

Re: Взаимодействие с Mqtt

Сообщение olehs » Ср апр 26, 2017 7:05 pm

xneo писал(а):Ну так это были стандартные методы. Вашу идею понял. Перепишу в statusChanged. Спасибо.
Я как раз совсем о противоположном говорю.

Идея в том, что свойство status отображает фактическое состояние реле, а управление должно происходить вызовом методов turnOn и turnOff напрямую.
Если при изменении статуса должны происходить еще какие-то посторонние действия, то их можно впихнуть в statusChanged. Но напрямую менять состояние реле из statusChanged - плохая идея.
xneo
Сообщения: 21
Зарегистрирован: Пн апр 24, 2017 4:35 am
Благодарил (а): 4 раза
Поблагодарили: 1 раз

Re: Взаимодействие с Mqtt

Сообщение xneo » Ср апр 26, 2017 7:08 pm

Понял. Логически немного неверно связал объекты.
Ответить