Ajuda para um completo noob

Deixa eu ver se entendi… O Zigbee2mqtt é mais complicado pra configurar inicialmente apenas? Quero dizer, depois que eu fiz a configuração inicial é bem tranquilo pra adicionar novos dispositivos, atualizar, etc? E qual seria a vantagem em relação ao ZHA? Só a compatibilidade com mais dispositivos?

Outra coisa, se eu utilizar o ZHA pra testar e depois decidir migrar pro Zigbee2mqtt, eu tenho que reconfigurar tudo do zero?

Melhor aguardar alguém que use Z2M possa responder, ideal mesmo seria alguém com experiência nos 2.

O que vejo sempre o pessoal comentar no chat é de algum problema que tiveram nas atualizações do Z2M.

O problema da configuração inicial que você mencionou é o de menos.
O que eu quis enfatizar é a questão dos recursos (memória, processamento, conexões ativas simultaneamente, pontos de falha, …) e todo o caminho que as mensagens percorrem de onde elas saem até chegarem no interessado.

Tanto se optar por usar Z2M e depois quiser trocar pra ZHA, quanto o contrário, você terá que começar do zero.

Cara, já testei o o ZHA aqui e realmente não poderia ser mais fácil. Tanto pra você quanto instalar a integração quanto pra adicionar novos dispositivos. Tudo feito rápida e automaticamente.

Porém… Logo no segundo dispositivo que eu adicionei (Smart Knob Tuya), já dei com a cara na parede. Apesar dele ter diversos triggers (single press, double press, long press, giro pra direita/esquerda, press + giro pra direita/esquerda, o Home Assistant só identificou essas entidades:

image

Ou seja, não consigo fazer nada com isso aí. Pelo que eu pesquisei, esse dispositivo não é suportado pelo ZHA (pelo menos não sem fazer algumas gambiarras complicadas demais pra mim). Já no Z2M, não parece ter essa limitação. Vou ter que testar pra ver.

A propósito, uma dúvida: Posso usar 2 dongles simultaneamente, sendo um pra ZHA e outro pra Z2M? Só pra garantir que vou aproveitar o máximo de todos os dispositivos? Lembrando que eu tô usando com máquina virtual, então não sei se dá pra usar mais de uma porta USB na VM.

Eu uso zigbee a pouco tempo, mas pelo que pesquisei no geral o Z2M costuma expor mais entidades que o ZHA.
Porém tem o detalhe que o Wesley falou de ter que usar 2 addons, etc.

Da uma olhada aqui para ver a compatibilidade dos seus dispositivos.

Tentei de todas as formas fazer o knob funcionar pelo ZHA sem sucesso… Estou desistindo e vou tentar com o Zigbee2mqtt. Já instalei e executei o add-on do Mosquitto Broker. Na hora de iniciar o add-on do Zigbee2mqtt deu erro. Não fiz nenhuma alteração no firmware do dongle, será por isso que não está funcionando?

Vou tentar fazer o flash do firmware indicado na página do Zigbee2mqtt e testar de novo, mas antes eu queria saber se eu consigo voltar pro firmware original caso não funcione direito com o zigbee2mqtt. Dá pra fazer um backup do firmware original e depois restaurar? Ou consigo baixar o firmware em algum lugar?

Update: Não precisei mexer em nada do firmware. Achei curiosos que todos os tutoriais existentes por aí incluem um passo pra flashear um firmware diferente do que já vem no dongle. Pra mim não foi necessário, nem pro ZHA nem pro Zigbee2mqtt. O motivo de eu não estar conseguindo ativar o Z2M é que eu estava com o ZHA ativado e obviamente o mesmo dongle não pode trabalhar com os dois simultaneamente.

Consegui um Blueprint para executar ações pelo smart knob, de acordo com os comandos:

Porém, a lâmpada que eu quero controlar não suporta o comando para incrementar o brilho, só dá pra setar um valor numérico. Então o código referente à ação de girar pra direita fica assim:

button_rotate_right:
  - device_id: XXXX
    domain: number
    entity_id: number.brilho
    type: set_value
    value: 1000

Nesse exemplo acima, o brilho ficaria no valor máximo. Mas eu queria tentar manipular esse código pra fazer algo do tipo:

number.brilho = number.brilho + step

onde o step seria um passo pré-definido. Alguma sugestão de como fazer isso? Eu tenho pouquíssima familiaridade com programação, então eu não sei nem por onde começar…

Só atualizando, não consegui descobrir como fazer desse jeito que eu queria, mas consegui de um jeito menos otimizado (mais ou menos como eu tinha explicado mais acima:

Gatilho: girar o botão pra direita
If 1% <= Brilho < 20%
Then Brilho = 20%

If 20% <= Brilho < 40%
Then Brilho = 40%

If 40% <= Brilho < 60%
Then Brilho = 60%

No final o código ficou com várias condicionais, o que não é o ideal do ponto de vista de eficiência de código:

   button_rotate_right:
      - choose:
          - conditions:
              - condition: numeric_state
                entity_id: number.brilho
                below: 200
            sequence:
              - device_id: XXXX
                domain: number
                entity_id: number.brilho
                type: set_value
                value: 201
          - conditions:
              - condition: numeric_state
                entity_id: number.brilho
                above: 200
                below: 400
            sequence:
              - device_id: XXXX
                domain: number
                entity_id: number.brilho
                type: set_value
                value: 401
          - conditions:
              - condition: numeric_state
                entity_id: number.brilho
                above: 400
                below: 600
            sequence:
              - device_id: XXXX
                domain: number
                entity_id: number.brilho
                type: set_value
                value: 601
          - conditions:
              - condition: numeric_state
                entity_id: number.brilho
                above: 600
                below: 800
            sequence:
              - device_id: XXXX
                domain: number
                entity_id: number.brilho
                type: set_value
                value: 801
          - conditions:
              - condition: numeric_state
                entity_id: number.brilho
                above: 800
                below: 1000
            sequence:
              - device_id: XXXX
                domain: number
                entity_id: number.brilho
                type: set_value
                value: 1000

Desse jeito eu consegui fazer o controle de brilho com 5 níveis (1%, 20%, 40%, 60%, 80% e 100%), o que é suficiente pra mim.

Se colocar step size=200 …

service: input_number.increment
data: {}
target:
  entity_id: input_number.brilho

Esse exemplo acima ele incrementa até o valor máximo

Ou deixa step size=1 …

service: input_number.set_value
data:
  value: '{{(states("input_number.brilho")|int/200|int+1)*200%1200}}'
target:
  entity_id: input_number.brilho

Esse exemplo acima incrementa até resetar pra 0

Se uma versão mais recente do HA, a entidade mudou de input_number para number, então ajusta isso no código que mandei de exemplo.

Estou rodando um HA razoavelmente antigo.

1 curtida

Valeu, @w35l3y, o segundo código funcionou redondo aqui (tive que substituir o input_number por number, conforme você instruiu. O primeiro código não deu certo, mas não foi necessário, já que o segundo me atendeu perfeitamente.

Descobri a diferença…

“Number entities cannot be implemented manually, but can be provided by other integrations. If you are looking for a way to create a number entity, please take a look at the Number helper.”

Ou seja, se o seu é number, então foi criado por alguma outra integração e possivelmente não tem controle sobre as configurações (min, max e step)

Então só lhe resta a 2ª opção mesmo

Uma coisa que eu descobri agora, eu consegui reconfigurar minha lâmpada para light no localtuya (antes estava como switch). Desse modo fica até melhor, porque as informações da lâmpada (brilho, temperatura) ficam agrupadas na mesma entidade. E também eu consegui fazer o aumento do brilho gradual com o knob, usando o seguinte código:

    button_rotate_right:
  - device_id: xxxx
    domain: light
    entity_id: light.luz_das_criancas
    type: brightness_increase

O problema agora é que o step padrão para aumento de brilho era muito pequeno, então eu tive que dar uma pesquisada para fazer com um tamanho de step customizado. Cheguei nesse código abaixo:

button_rotate_right:
      - service: light.turn_on
        target:
          entity_id: light.luz_das_criancas
        data:
          brightness: "{{states.light.luz_das_criancas.attributes.brightness + 50}}"
    button_rotate_left:
      - service: light.turn_on
        target:
          entity_id: light.luz_das_criancas
        data:
          brightness: "{{states.light.luz_das_criancas.attributes.brightness - 50}}"

Desse jeito eu consegui um passo de tamanho aceitável (50), tanto para aumentar quanto para diminuir.

2 curtidas