Caros,
Como houve algum interesse no funcionamento do botão giratório zigbee da Moes e eu adquiri um, faço aqui um mini-review / tutorial de como usa-lo.
Não vou fazer uma descrição muito detalhada do botão porque isso pode ser encontrada nos anúncios/pagina do fabricante, mas vou direto ao que interessa: o botão aceita dois tipos de “ação”, a óbvia que é girar para um lado e para o outro, e “clicar” (pressionando ele para baixo). O “giro” dele é “infinito”, ou seja, pode girar a vontade para qualquer um dos lados e apresenta um pequeno “clique” a cada passo.
Parear ele com o zig2mqtt foi bem fácil, mas ao contrário do que diz o anuncio, o z2m só consegue reconhecer as duas ações listadas acima. No anúncio diz que ele aceita duplo clique, clique longo, girar pressionado. Talvez o z2m em algum momento implemente isso, mas no momento ainda não funciona.
Uma característica interessante do botão é que ele “não espera” vc parar de girar para enviar eventos para o z2m, então, por exemplo, se vc começar a girar o botão devagar, mas de maneira continua, ele irá reportar um evento a cada poucos décimos de segundo. Se vc girar o botão rapidamente, ele envia menos eventos, mas a cada um deles reporta o tamanho do “step_size”. Acho que fica mais simples etender olhando o log abaixo do z2m:
z2mqtt/botao_rotatorio_1 {"action":"brightness_step_up","action_step_size":13,"action_transition_time":0.01,"linkquality":174}
z2mqtt/botao_rotatorio_1 {"action":"","linkquality":174}
z2mqtt/botao_rotatorio_1 {"action":"brightness_step_up","action_step_size":49,"action_transition_time":0.02,"linkquality":174}
z2mqtt/botao_rotatorio_1 {"action":"","linkquality":174}
O primeiro giro acima foi apenas 1 passo e no debaixo foram mais ou menos uns 3 ou 4. Eu configurei ele direto no home-assistant e criei o seguinte “esqueleto” de automação:
- id: botao_rotatorio_1
mode: queued
max_exceeded: silent
trigger:
platform: state
entity_id: sensor.botao_rotatorio_1_action
attribute: action
from: ''
action:
- variables:
action: '{{ trigger.to_state.attributes.action }}'
- choose:
- conditions:
- '{{ action == ''brightness_step_down'' }}'
sequence:
repeat:
count: '{{ (trigger.to_state.attributes.action_step_size / 13) | round }}'
sequence:
- service: <seu servico aqui>
- conditions:
- '{{ action == ''brightness_step_up'' }}'
sequence:
repeat:
count: '{{ (trigger.to_state.attributes.action_step_size / 13) | round }}'
sequence:
- service: <seu servico aqui>
- conditions:
- '{{ action == ''toggle'' }}'
sequence:
- service: homeassistant.toggle
entity_id: <seu switch/light aqui>
Por fim, o video abaixo mostra o funcionamento do botão. Possivelmente dá para conseguir um efeito mais “suave” colocando alguns tempos de espera (delays) na automação, etc. Eu considerei o “step_size” na automação e isso tb pode ser melhorado… ele reporta os valores de 13, 25, 37, 49, para 1, 2, 3, 4 “cliques” respectivamente, então por isso fiz aquela divisão por 13.