Já existem artigos sobre a Habr sobre como criar dispositivos ZigBee de vários fabricantes com sistemas de controle doméstico inteligentes, sem o uso de hubs de marca, como o Xiaomi Gateway. No entanto, não encontrei instruções para
homebridge não apenas em Habré, mas também em outros espaços abertos da Internet. Portanto, quero compartilhar a experiência de adicionar dispositivos ZigBee ao homebridge. Muito obrigado ao criador do recurso
zigbee2mqtt.io , os métodos para atualizar o modem CC2531 e conectar-se a sistemas inteligentes de controle doméstico como
Home Assistant ,
Domoticz e
Majordomo já estão descritos lá . O artigo é destinado a usuários que já
possuem o homebridge
instalado e configurado .

Todas as ações no artigo serão realizadas com o seguinte conjunto de equipamentos:
- Raspberry Pi 3 B + (Raspbian OS)
- Dongle CC2531 (costurado)
- Dispositivos Xiaomi (interruptor sem fio, sensor de temperatura e umidade ...)
- MacBook Pro (OSX 10.14)
As instruções para o firmware CC2531 em russo estão
aqui (via Pi) e
aqui (via CCDebuger) .
Esquematicamente, toda a cadeia de trabalho pode ser representada da seguinte maneira:

Agora em ordem.
Após a
atualização do modem, é necessário instalar o
broker MQTT (se ainda não estiver instalado).
Eu uso o Mosquitto, instalado assim:
sudo apt install -y mosquitto mosquitto-clients
Instruções de configuração mais detalhadas podem ser encontradas
aqui .
Agora você precisa instalar o serviço zigbee2mqtt, que interage com o modem CC2531 e transfere os dados para o Mosquitto:
sudo git clone https://github.com/Koenkk/zigbee2mqtt.git /opt/zigbee2mqtt sudo chown -R pi:pi /opt/zigbee2mqtt cd /opt/zigbee2mqtt npm install
Para executar o zigbee2mqtt como um serviço, você precisa criar um arquivo:
/etc/systemd/system/zigbee2mqtt.service
com o seguinte conteúdo: [Unit] Description=zigbee2mqtt After=network.target [Service] ExecStart=/usr/bin/npm start WorkingDirectory=/opt/zigbee2mqtt StandardOutput=inherit StandardError=inherit Restart=always User=pi [Install] WantedBy=multi-user.target
Se você já instalou o broker MQTT, precisará registrar os parâmetros corretos para conectar-se a ele no arquivo: /opt/zigbee2mqtt/data/configuration.yaml
Iniciamos o serviço e o adicionamos à execução automática:
sudo systemctl start zigbee2mqtt sudo systemctl enable zigbee2mqtt.service
Nós olhamos para o log:
sudo journalctl -u zigbee2mqtt.service -f
Se tudo estiver configurado corretamente, você deverá ver as seguintes linhas: `permit_join` set to `true` in configuration.yaml. Allowing new devices to join. Set `permit_join` to `false` once you joined all devices. Zigbee: allowing new devices to join. Connecting to MQTT server at mqtt://localhost zigbee-shepherd ready Connected to MQTT server
Você pode iniciar a integração com o homebridge. O recurso
zigbee2mqtt.io possui uma
lista de dispositivos
suportados e instruções para criar um par. Por exemplo, considere adicionar o Xiaomi Wireless Switch.

Para visualizar eventos no Mosquitto, use o programa
MQTT Explorer . Começamos, digite o endereço do servidor MQTT, no meu caso, ele está localizado em
192.168.1.104
. Se tudo estiver instalado corretamente, na árvore veremos o ramo zigbee2mqtt. Nós passamos por isso. Agora, no Xiaomi Wireless Switch, mantenha pressionado o botão Redefinir até o diodo piscar (cerca de 5 segundos). Após cerca de 10 segundos na ramificação zigbee2mqtt, veremos nosso dispositivo e os dados que ele transmite.
Se isso não acontecer, depois que o diodo piscar, tente pressionar Reset uma vez com uma frequência de segundo. Deve ser assim:
Vamos analisar os dados:
{ "linkquality":110, "battery":100, "voltage":3052, "click":"single" }
O campo Clique contém o tipo de clique; pode haver cinco deles:
Click, double click, triple click, long, long_release
Aprendemos como receber dados, agora adicione o Xiaomi Wireless Switch ao homebrdige. Para interagir com o MQTT, usaremos o
módulo homebridge-mqttthing . Instala da mesma maneira que outras:
(sudo) npm install -g homebridge-mqttthing
O módulo suporta um grande número de classes de dispositivos, desde comutadores a termostatos. Para o Xiaomi Wireless Switch, a classe
StatelessProgramableSwitch
é a mais adequada. Para adicionar, você precisa conhecer o Tópico
(0x00158d00022c85ea)
e os nomes dos comandos. Acontece que este tipo de configuração:
{ "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] }
Por analogia, adicionei:
sensor de temperatura e umidade, sensor de toque, sensor de presença e interruptor. "accessories": [ { "accessory": "mqttthing", "type": "occupancySensor", "name": "Xiaomi Occupancy Sencor", "topics": { "getOccupancyDetected": { "topic": "zigbee2mqtt/0x00158d000236b492", "apply": "return JSON.parse(message).occupancy;" } }, "integerValue": true }, { "accessory": "mqttthing", "type": "contactSensor", "name": "Xiaomi Contatc Sencor", "topics": { "getContactSensorState": { "topic": "zigbee2mqtt/0x00158d000278db8c", "apply": "return !JSON.parse(message).contact;" } }, "integerValue": true }, { "accessory": "mqttthing", "type": "statelessProgrammableSwitch", "name": "Xiaomi Single Button", "topics": { "getSwitch": { "topic": "zigbee2mqtt/0x00158d00022c85ea", "apply": "return JSON.parse(message).click;" } }, "switchValues": [ "single", "double", "long_release" ] }, { "accessory": "mqttthing", "type": "temperatureSensor", "name": "Xiaomi Temperature Sencor", "topics": { "getCurrentTemperature": { "topic": "zigbee2mqtt/0x00158d000201842c", "apply": "return parseFloat(JSON.parse(message).temperature);" } }, "history": true }, { "accessory": "mqttthing", "type": "humiditySensor", "name": "Xiaomi Humidity Sencor", "topics": { "getCurrentRelativeHumidity": { "topic": "zigbee2mqtt/0x00158d000201842c", "apply": "return parseFloat(JSON.parse(message).humidity);" } }, "history": true } ]
Verificamos:

Eu costumava usar o módulo homebridge-mi-aqara, que adiciona dispositivos ZigBee, interagindo com o Xiaomi Gateway. Quando o Gateway é recusado, o tempo de resposta dos dispositivos diminui. Além disso, eu me livrei do dispositivo que fica no meu WiFi e rastreia constantemente na Internet.