Gravando firmware no controlador Zigbee cc2531
Recentemente entrei na pilha de “casa inteligente”, colocando uns sensores e atuadores Zigbee espalhados pela casa. Usei uma Raspberry Pi 3b que tava dando sopa aqui ha tempos, e instalei manualmente o Home Assistant na versão atual (bookwork) do Raspberry Pi OS (antigo Raspbian) pelos passos descritos aqui.
Na hora de subir o home assistant pela primeira vez deu um problema no import do numpy que quase me fez jogar a RPi pela janela, ja que hoje trabalho muito com Python/Numpy e ja passo essas raivas profissionalmente. Mas achei um contorno e espero que ajude alguém. Após rodar o ‘hass’ a primeira vez ele e tentar acessar a Web UI ele chega a carregar uma página com o logo, com uma mensagem tipo “loading”, algo assim, mas não passa disso. E no console, na saída do comando, fala que falhou ao importar o numpy, e mais acima nos logs informa que o problema era não encontrar uma lib/objeto “lib*blas.so” (o * é pq não tenho mais os logs, e não me importo tanto assim). A solução que encontrei foi remover a instalação do numpy tanto via pip no venv, quando no SO (via apt/dpkg), e instalar os pacotes (via apt) de umas libs que aparentemente implementam funções de algebra linear pro numpy, as libopenblas-pthread e libatlas-base-dev. A libopenblas tem umas opções de implementação, e optei pela pthread porque sim.
Os sensores/atuadores, optei por ir na onda do Zigbee, pela economia de energia e simplicidade. É tudo pequeno, a bateria, a interface vai direto na raspberry, e não depende de um roteador externo, dhcp, essas coisas. Pra “falar” com os sensores comprei esse dongle USB da Sonoff que funcionou de primeira, certinho:
A maioria dos sensores/atuadores que comprei funcionaram de primeira, sem problemas. Um amigo me recomendou a marca Sonoff, e realmente, todos da marca funcionaram de primeira. Foram eles, o sensor de temperatura/humidade Snzb-02 e Snzb-02d (o segundo tem um LCD), os sensores de abertura de portas e janelas Snzb-04, os sensores de presença e movimento Snzb-03, o botão Snzb-01 e os switches ZBMINI e ZBMINIL2 (o segundo é ótimo pra lâmpadas, pois não precisa do Neutro, mas é mais caro que o primeiro).
No entanto, dois outros módulos que eu queria tive que comprar de outras marcas. Por concidência, peguei dois que usam os módulos/protocolos da marca Tuya, apesar de terem fabricantes/marcas nacionais. Ambos necessitaram de “Quirks” personalizados (custom quirks) no Home Assistant para dar acesso a uma parte da funcionalidade.
Esse detector de fumaça da imagem, que no Home Assistant aparece como ‘TS0601 by _TZE204_q76rtoa9’, usando este quirk funcionou belezinha, aparentemente exibindo todos os recursos.
Ja esta sirene aqui, que aparece como “TS0601 by _TZE204_q76rtoa9”, tem este quirk que expoe o switch de liga/desliga, mas para alterar os outros parâmetros acabei criando scripts que alteram diretamente os atributos do cluster/entrypoint do dispositivo (ZHA -> Set Zigbee Cluster Attribute), que se você não entendeu é por que é melhor dar uma lida nisso aqui primeiro. Na verdade, todo o rolé de usar quirks depende de editar os arquivos com a assinatura do seu modelo/variante, então é bom entender o contexto pra ver se vale entrar nessa.
Arrumei também esse outro controlador/interface Zigbee, menor, que achei que ia ser plug n play também. Mas esse ai deu uma briguinha boa. Ele vem um um firmware que não expoe a interface serial, e ai temos que regravar o firmware do maluco. Pois bem, resolvi usar a própria Raspberry pra gravar o firmware, seguindo os passos desse guia aqui.
Ja quebrei o galho de quem encontrar isso aqui e for fazer a coisa “na marra” que nem eu, sem a tal placa de debug, e coloquei o pinout direito com a orientação correta da placa, pq tudo quanto é filho da puta na internet usa a tal plaquina e só coloca o pinout dela.
E ai veio o problema de como conectar os pinos do dongle na RasPi. Eu até tenho uns conectores que dariam na raspberry, mas no dongle os pinos são beeem próximos. Tenho uns jumpers de notebook aqui que acho que são nesse padrão. Nos artigos o pessoal disse que da pra dobrar os pinos e usar aqueles cabinhos coloridos de kit de arduino, e eu até tinha um monte mas não sei onde foram parar, e então eu tive a ideia de tentar enfiar uns fios diretamente nos pinos, usando a capa do fio pra pressionar os “fios do fio” contra o pino, o que provavelmente daria um bom contato… E provavelmente deu, porque o processo de gravação do firmware funcionou perfeitamente ! Seguem as fotos que, afinal, motivaram tooooodo esse post (e o renascimento do blog):