Automação Homebridge com Node-Red

Na minha opinião, uma das principais desvantagens do homebridge é a falta de capacidade de criar scripts avançados. Toda a automação é atribuída ao centro doméstico, que pode ser um iPad (conectado ao carregamento), Apple TV ou HomePod. Nem todo mundo tem esses dispositivos; além disso, o HomeKit tem uma automação muito ruim. Esta situação pode ser corrigida usando Node-Red . O artigo é destinado a usuários que já possuem o homebridge instalado e configurado .



Resumidamente: o Node-RED é uma ferramenta para conectar hardware, APIs e serviços online, criando links entre vários nós (blocos).

Definição no site oficial:
O Node-RED é uma ferramenta de programação para conectar dispositivos de hardware, APIs e serviços online de maneiras novas e interessantes.
Ele fornece um editor baseado em navegador que facilita a conexão de fluxos usando a ampla variedade de nós na paleta que podem ser implementados em seu tempo de execução com um único clique.


No Raspbian, isso está instalado:

sudo apt-get install nodered sudo systemctl enable nodered.service sudo service nodered start 

Por padrão, o Node-Red é executado na porta 1880.

Existe uma enorme biblioteca de módulos com conjuntos de blocos de várias funcionalidades. Não poupado e homebridge. Instale o node-red-contrib-homebridge-automation :

 cd ~/.node-red npm install node-red-contrib-homebridge-automation sudo service nodered restart 

Vamos tentar ligar a lâmpada. Para fazer isso, arraste o hb-control , o bloco de funções (este bloco enviará um comando para ativar) e o injete (na estrutura deste artigo, é necessário apenas ativar manualmente o script). Pela primeira vez, para blocos hb, você precisa especificar um PIN e atualizar a lista de dispositivos. Então você pode adicionar os blocos necessários:



Agora, clicando no botão no bloco de injeção , a luz deve acender. Além do hb-contoll, também existem blocos hb-event, hb-status e hb-resume . Uma descrição detalhada dos blocos pode ser encontrada no repositório oficial.

Código do bloco funcional
 var ret_msg={}; ret_msg.payload = {}; ret_msg.payload.On = true; return ret_msg; 


O bloco de funções foi projetado para manipular dados usando os recursos JavaScript. O bloco aceita a variável msg junto com o parâmetro payload , por padrão, a maioria dos blocos no Node-Red funciona com o parâmetro payload .

Vale a pena falar sobre o bloco Debug , com ele é possível ver a saída dos blocos, para que você entenda qual é o erro se sua ideia não funcionar.

Agora vamos fazer algo interessante, por exemplo, mudar o estado da luz depois de girar o MagicCube 90 graus. Em um artigo anterior, mostrei como fazer amigos zigbeeem dispositivos com homebridge. O MagicCube, como outros dispositivos zigbee, aparecerá no broker MQTT após o emparelhamento.

O Nó-Vermelho suporta o protocolo MQTT imediatamente. Inclua o bloco MQTT, especifique o endereço do servidor e o cubo de tópico.



Um cubo pode transmitir os seguintes estados:
agitar, ativar, cair, tocar, deslizar, flip180, flip90, rotate_left e rotate_right

Adicione um bloco de chave para separar um estado do outro. Defina flip90 , agite e toque nas condições no interruptor . Conecte a saída superior ao status hb para obter o status atual da lâmpada. O bloco de status hb é conectado ao bloco Inverter ao valor , invertendo o estado, e sua saída é conectada ao controlador hb e, quando o cubo é girado, a lâmpada muda para o estado ligado / desligado. Deve ser algo como isto:



Inverter código de valor
 var ret_msg=msg; ret_msg.payload.On = !msg.payload.On; return ret_msg; 


O fluxo pode ser importado daqui:

Flow
 [ { "id": "f0f31eb6.22f16", "type": "tab", "label": "Flow 1", "disabled": false, "info": "" }, { "id": "e0f72465.9e4fb8", "type": "mqtt in", "z": "f0f31eb6.22f16", "name": "", "topic": "zigbee2mqtt/0x00158d00010f0528", "qos": "2", "datatype": "auto", "broker": "8ec472b.e73e29", "x": 160, "y": 80, "wires": [ [ "43f74679.730588" ] ] }, { "id": "8539109.d872ff", "type": "debug", "z": "f0f31eb6.22f16", "name": "", "active": true, "tosidebar": true, "console": false, "tostatus": false, "complete": "false", "x": 670, "y": 60, "wires": [] }, { "id": "c5db7c5b.399f4", "type": "hb-status", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 340, "y": 180, "wires": [ [ "9ef696d9.51a378" ] ] }, { "id": "43f74679.730588", "type": "switch", "z": "f0f31eb6.22f16", "name": "CubeActions", "property": "payload", "propertyType": "msg", "rules": [ { "t": "cont", "v": "flip90", "vt": "str" }, { "t": "cont", "v": "tap", "vt": "str" }, { "t": "cont", "v": "shake", "vt": "str" } ], "checkall": "true", "repair": false, "outputs": 3, "x": 150, "y": 240, "wires": [ [ "c5db7c5b.399f4" ], [], [] ] }, { "id": "f476dcba.a6511", "type": "hb-control", "z": "f0f31eb6.22f16", "name": "Room1", "Homebridge": "HomeBridge", "Manufacturer": "YeeLight", "Service": "Lightbulb", "device": "HomeBridgeA1:23:AD:E3:CD:32YeeLightRoom100000043", "conf": "7948a496.505c2c", "x": 700, "y": 180, "wires": [] }, { "id": "9ef696d9.51a378", "type": "function", "z": "f0f31eb6.22f16", "name": "Invert On Value", "func": "var ret_msg=msg;\nret_msg.payload.On = !msg.payload.On;\nreturn ret_msg;", "outputs": 1, "noerr": 0, "x": 520, "y": 180, "wires": [ [ "f476dcba.a6511" ] ] }, { "id": "8ec472b.e73e29", "type": "mqtt-broker", "z": "", "name": "mosquitto", "broker": "127.0.0.1", "port": "1883", "clientid": "", "usetls": false, "compatmode": true, "keepalive": "60", "cleansession": true, "birthTopic": "", "birthQos": "0", "birthPayload": "", "closeTopic": "", "closeQos": "0", "closePayload": "", "willTopic": "", "willQos": "0", "willPayload": "" }, { "id": "7948a496.505c2c", "type": "hb-conf", "z": "", "username": "111-11-111" } ] 


Assim, é possível "esculpir" esquemas complexos de automação a partir de blocos. Na biblioteca, você encontra módulos com conjuntos de blocos para tarefas completamente diferentes, por exemplo, para gravar câmeras de vigilância por vídeo ou trabalhar com arquivos de câmeras.

PS Pensamentos em voz alta:
Estou assombrado com o pensamento de que, não importa como a tecnologia se desenvolva, muitos ainda estão muito longe da automação banal dos processos de trabalho e vida através da programação. Eu realmente espero que, com o advento de ferramentas como Node-Red ou Blockly , o limite de entrada diminua bastante. Tendo aprendido como construir um sistema a partir de cubos no mesmo Nó-Vermelho, as pessoas provavelmente chegarão ao bloco de funções e aprenderão JS com interesse, e então tudo acontecerá por si só.

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


All Articles