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_rightAdicione 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ó.