Adicionando dispositivos ZigBee ao Homebridge usando o CC2531

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 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 # sudo services mosquitto start #  sudo systemctl enable mosquitto.service # 

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.

Source: https://habr.com/ru/post/pt462459/


All Articles