Настоящая обратная связь

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

Модератор: immortal

Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Настоящая обратная связь

Сообщение nightwind » Пт май 11, 2018 9:03 pm

Всем привет.
Предыстория. можно пропустить)
Мtня сегодня кофеварка обломала)) Еду домой, через телегу прошу Алису сделать кофе. Алиса говорит через 7 минут можно кофе пить. Приезжаю - и нифига, из розетки кофеварка вынута. Облом. Облом, так как скрипт проверяет статус исполнительного устройства, и если статус=1 только тогда отвечает, что кофе готовится. Но, как оказалось - статус 1 ровным счетом ничего не значит. Мажор его тупо установил, модуль mqtt скинул его брокеру, а дошло оно или нет систему не волнует.
Решено было таки сделать нормальную, предсказуемую обратную связь - управляющий и статусный каналы отдельно - благо все мои устройства могут в обратную связь, и все живут на mqtt. командный топик cmnd, статусный stat.

У класса устройств добавил поле cmnd - сюда будем писать команды, и привяжем в модуле mqtt к топику cmnd.
Снимок экрана от 2018-05-10 17-06-38.png
Снимок экрана от 2018-05-10 17-06-38.png (22.19 КБ) 5481 просмотр
Своство статус оставим как было, но писать в него теперь из скриптов ничего нельзя, оно будет устанавливаться только устройством, и всегда отображать его реальное состояние.

Перепишем методы turnOn и turnOff
Снимок экрана от 2018-05-10 17-05-59.png
Снимок экрана от 2018-05-10 17-05-59.png (38.19 КБ) 5479 просмотров
чтобы код простых устройств не портил статус. switch можно оставить как есть, он вызывает вышеуказанные исправленные методы.

На первый взгляд все просто, хорошо и чудесно! Минимальными изменениями удалось добиться настоящей обратной связи. Отправляем команду в cmnd, устройство в ответ устанавливает status.
Но, как всегда, грабли появились оттуда, откуда никто не ждал. А именно - в меню управления, если у выключателя привязать статус к статусу устройства, а в связанный метод поставить switch - что правильно и логично - нифига не работает!!
После 3 кружек кофе и часа тупой отладки выяснилось, что при дергании выключателя он не только вызывает связанный метод, но и какого-то лешего пишет в статус. Причем в статус он пишет раньше, чем вызывает метод. Такого западла я не ожидал. Получатеся жмешь выключатель - он сразу пишет в статус 1, потом вызывает свитч - а свитч видит, что статус =1 и меняет его в 0.
Нифига не включается. И не избыть этого никак.
Если отвязать свойство - то выключатель будет показывать погоду на марсе; если отвязать switch и городить огород с onStatusUpdate - не понять, выключатель его обновил или устройство, да и противоречит это логике, выключатель никак не может знать статуса устройства.
Пришлось колупать commands.class.php и отучить его лазить в статус.
Что характерно - контролы на сцене такой хренью не страдают, все заработало сразу как надо.
Теперь Алиска знает, и говорит, если не удалось включить запрошенное устройство. Больше я с кофе не обломаюсь. ;)
Посему огромная просьба к Сергею - хотя бы в альфе не разрешать больше выключателю писать в статус. там всего то 1 строчку удалить)) или хотя бы поменять местами вызов метода и запись в свойство.
За это сообщение автора nightwind поблагодарили (всего 2):
skysilver (Пт май 11, 2018 9:49 pm) • homester (Пн янв 27, 2020 11:51 pm)
Рейтинг: 2.33%
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: Настоящая обратная связь

Сообщение nightwind » Пт май 11, 2018 9:23 pm

Кажись дописал) букофф много, чукча не писатель, чукча в основном читатель тут.
skysilver
Сообщения: 3006
Зарегистрирован: Чт авг 21, 2014 8:28 am
Откуда: Киров, Россия
Благодарил (а): 400 раз
Поблагодарили: 1753 раза
Контактная информация:

Re: Настоящая обратная связь

Сообщение skysilver » Пт май 11, 2018 9:55 pm

Я вот 4 года с МДМ и до сих пор не определился с оптимальной концепцией, как управлять - через запись в свойство или через вызов метода.

И в последнее время все же склоняюсь к свойствам и перевожу все на них для единообразия. Но вышеуказанный затык с обратной связью имеет место быть, аха. ))
За это сообщение автора skysilver поблагодарил:
Samir77 (Ср окт 16, 2019 3:35 pm)
Рейтинг: 1.16%
MajorDoMo (GitHub) на Cubietruck. ОС Debian 7 (wheezy) (kernel 3.4.105) с переносом на HDD.
Мой CONNECT | Блоги | Telegram
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: Настоящая обратная связь

Сообщение nightwind » Пт май 11, 2018 10:28 pm

У меня как то раньше был затык еще смешнее - выключатель включаешь - статус 1 - а, устройство не может отработать как надо, и через некоторое время высылает в статус 0. потом у него получается, оно высылает статус 1. потом все эти онСтатусАпдэйт - и выключатель дергается как дурной туда сюда раз 10. Даже не помню, как я это победил тогда, но было смешно.
ИМХО даже название "статус" намекает на состояние устройства, а не на точку управления им.
Chainik
Сообщения: 1462
Зарегистрирован: Вс янв 10, 2016 11:05 am
Благодарил (а): 260 раз
Поблагодарили: 454 раза

Re: Настоящая обратная связь

Сообщение Chainik » Пт май 11, 2018 10:29 pm

Тут ведь самое главное, чтобы была физическая возможность обеспечить обратную связь. Т.е. наличие "средств объективного контроля" за фактическим состоянием прибора или возможность прибора "сказать" серверу свое фактическое состояние (если прибор "шибко умный").
Вот, например, реализация обратной связи "глупого" телевизора (по включению) с помощью датчика тока (https://www.ab-log.ru/forum/viewtopic.p ... 641#p30641).

ПС. А с простыми устройствами я так и побоялся связываться. Что-то там уж все слишком для меня (чайника) непрозрачно. Почесав за ухом и сбросив монету, решил, что все статусы (в т.ч. состояния) буду менять методами. Как-то так оно мне понятнее.
Aven
Сообщения: 529
Зарегистрирован: Сб мар 12, 2016 6:33 pm
Откуда: Ухта, Россия
Благодарил (а): 3 раза
Поблагодарили: 154 раза

Re: Настоящая обратная связь

Сообщение Aven » Пт май 11, 2018 10:58 pm

Я уже в Телеге говорил, что в объектах нет флага обратной связи, посмотрите как сделано в том же iob. Это очень удобно, а сейчас реализовано через костыли и не понятно, что записано в свойство - запрос на изменение или значение получено через ОС.

Но у вас проблема в том, что кофеварка не дала обратную связь, это можно хотя бы через датчик тока сделать.
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: Настоящая обратная связь

Сообщение nightwind » Вс май 13, 2018 1:04 pm

del задвоилось
Последний раз редактировалось nightwind Вс май 13, 2018 1:05 pm, всего редактировалось 1 раз.
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: Настоящая обратная связь

Сообщение nightwind » Вс май 13, 2018 1:05 pm

nightwind писал(а):
Вс май 13, 2018 1:04 pm
Aven писал(а):
Пт май 11, 2018 10:58 pm
Но у вас проблема в том, что кофеварка не дала обратную связь, это можно хотя бы через датчик тока сделать.
Та не, проблема именно в системе была. Сейчас так: Мажор послал команду на включение, и если пришел ответ, что включено - значит включено. В любом другом случае (даже если никакой ответ не пришел - значит она выключена физически и не может ответить) - считается за невключение. (Все исполнительные устройства вайфай, об изменении состояния сразу пишут в топик mqtt) Хочу еще LWT привязать, но лень)
И токовый датчик тут уже не нужен.
Аватара пользователя
nightwind
Сообщения: 333
Зарегистрирован: Вс июн 26, 2016 4:42 pm
Откуда: Барановичи
Благодарил (а): 28 раз
Поблагодарили: 52 раза
Контактная информация:

Re: Настоящая обратная связь

Сообщение nightwind » Пт июн 29, 2018 2:06 pm

skysilver писал(а):
Пт май 11, 2018 9:55 pm
Я вот 4 года с МДМ и до сих пор не определился с оптимальной концепцией, как управлять - через запись в свойство или через вызов метода.

И в последнее время все же склоняюсь к свойствам и перевожу все на них для единообразия. Но вышеуказанный затык с обратной связью имеет место быть, аха. ))
Это фактически осознанный отказ от обратной связи. Чем продиктовано такое решение, если не секрет?
ПС. Главадмин пулреквест откинул - чтобы не ломать текущую логику системы. Сча пытаюсь отучить только выключатель писать в статус, сделать ему настраиваемое поле status RO/RW, да сходу не получается. (для себя конечно оставил свою логику). Что характерно - кнопка на сцене работает правильно из коробки)
Аватара пользователя
xor
Сообщения: 2038
Зарегистрирован: Сб ноя 22, 2014 8:45 pm
Благодарил (а): 284 раза
Поблагодарили: 629 раз

Re: Настоящая обратная связь

Сообщение xor » Пт июн 29, 2018 4:36 pm

Я у себя городил обратную связь в методе, допустим, включения добавляя к команде еще айди rnd*1000, одновременно запуская таймер на неск. секунд с именем айди, где откатывал включение и сообщал об ошибке. Если команда проходит, она возвращает айди и соотв. тайм-аут очищается, если команда не проходит, срабатывает тайм-аут, откатывает статус, сообщает об ошибке

Отправлено с моего Redmi 4X через Tapatalk

За это сообщение автора xor поблагодарил:
Samir77 (Ср окт 16, 2019 3:36 pm)
Рейтинг: 1.16%
Ответить