4mr / wb-engine

MIT License
48 stars 7 forks source link

Пауза для relay_direction DO-R10R-4 #25

Closed G1K closed 2 months ago

G1K commented 2 months ago

Мне кажется чтобы соблюсти рекомендации для DO-R10R-4 https://wirenboard.com/wiki/WBIO-DO-R10R-4_Relay_Module_For_Roller_Shutter

Чтобы избежать этого, перед переключением направления надо отключать нагрузку. Рекомендуем следующий алгоритм:

выключите привод (контрол _ON); выдержите паузу не менее 0.5 с; переключите направление (контрол _DIR); включите привод ( контрол *_ON).

Нужно здесь еще 1 таймер добавить на 500 мс и дожидаться переключения реле направления если оно не в том направлении что требуется для движения. Сейчас подряд оба устанавливается без паузы. Пауза есть только если реле движения было включено. https://github.com/4mr/wb-engine/blob/a3f45dc898175526db6543cb9208b71648e2d866/wb-engine-module.js#L523

4mr commented 2 months ago

Вроде бы так и реализовано, тут выставляется задержка, если двигатель включен в данный момент (если выключен, то и задержка же не нужна, по умолчанию задержка 50мс для этого случая) : https://github.com/4mr/wb-engine/blob/a3f45dc898175526db6543cb9208b71648e2d866/wb-engine-module.js#L515

Выключаем привод: https://github.com/4mr/wb-engine/blob/a3f45dc898175526db6543cb9208b71648e2d866/wb-engine-module.js#L518

Команда выше отключает реле R1, снимая полностью нагрузку с двигателя. image

Функция таймера сработает через задержку (500мс если реле было включено): https://github.com/4mr/wb-engine/blob/a3f45dc898175526db6543cb9208b71648e2d866/wb-engine-module.js#L520

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

G1K commented 2 months ago

сейчас подряд одновременно переключается DIR и движение (уже после отключения и ожидания 500 мс). Без исходной нагрузки шанс возникновения дуги отсутствует? Я просто думаю может стоит дожидаться окончания замыкания R2, а уже после отправлять на замыкание R1? там же прослойка в виде mqtt / js асинхронность и нет гарантии что оно выполнится строго по очереди.

4mr commented 2 months ago

Я просто думаю может стоит дожидаться окончания замыкания R2, а уже после отправлять на замыкание R1?

Я так понимаю dev[name] = true работает в синхронном режиме, надо код wb-rules смотреть или в поддержке спросить для уверенности.

ps: Посмотрел документацию https://github.com/wirenboard/wb-rules/tree/master#%D0%BE%D0%B1%D1%8A%D0%B5%D0%BA%D1%82-dev

Операция присваивания dev[...] = ... в then всегда приводит к публикации MQTT-сообщения, даже если значение параметра не изменилось.

Но MQTT не гарантирует порядок и доставку, в теории такая ситуация возможна видимо...

4mr commented 2 months ago

Добавил задержку в 100мс после смены направления