Apple HomeKit com Homebridge e Raspberry Pi – Parte 2 37

No post anterior vimos o que é o Homebridge e como instalá-lo, embora não tenha apresentado ainda nenhuma funcionalidade que vale a pena. Agora veremos o verdadeiro poder da plataforma, e como controlar um conjunto de relês através do iPhone/iPad.

Instalação do plugin para GPIO

Por si só o Homebridge não fará nada de útil. Ele precisa de plug-ins e de um arquivo de configuração para rodar satisfatoriamente. No tutorial vou usar o plugin Homebridge-gpio-wpi2 (https://github.com/rsg98/homebridge-gpio-wpi2 ), responsável por controlar pinos da GPIO no RaspberryPi, mais especificamente com um módulo relê atuando como interruptor. A instalação conta primeiro com o download das dependências

sudo apt-get install wiringpi

E em seguida a instalação do próprio plugin (o processo leva alguns minutos)

sudo npm install -g homebridge-gpio-wpi2

Execução do Homebridge

O Homebridge pode subir várias instâncias em um mesmo sistema operacional. Por isso é preciso identificá-lo pelo Mac Address, que é obtido pelo comando

ifconfig wlan0

Tela terminal

A imagem acima é o resultado da busca pelo MacAddress da minha interface WLAN. Caso esteja utilizando rede cabeada, basta rodar o comando ifconfig eth0. Note acima o valor após a palavra ether. Copie esse valor (todos os seis pares) para podermos adicionar ao arquivo de configuração. É necessário que as letras estejam maiúsculas.

Esse arquivo agora se faz necessário para controle do plugin e do próprio servidor Homebridge. Ele é criado com o auxílio do nano:

sudo nano /home/pi/.homebridge/config.json

O conteúdo do arquivo aparece abaixo, onde temos a seção bridge, responsável pelas configurações do próprio Homebridge, a seção description, que pode ser ignorada, e a seção platforms, onde colocamos nossas plataformas. Não se esqueça de adicionar seu MacAddress no lugar indicado.

{
	"bridge": {
		"name": "Homebridge",
		"username": "<SEU_MAC_ADDRESS_AQUI>",
		"port": 51826,
		"pin": "031-45-154"
    },
    "description": "This is an example configuration file with one fake accessory and one fake platform.",

    "platforms": [{
          "platform" : "WiringPiPlatform",
          "name" : "Pi GPIO (WiringPi)",
          "overrideCache" : "true",
          "autoExport" : "true",
          "gpiopins" : [{
                "name" : "GPIO2",
                "pin"  : 3,
                "enabled" : "true",
                "mode" : "out",
                "pull" : "down",
                "inverted" : "false",
                "duration" : 0,
                "polling" : "true"
	        },{
                "name" : "GPIO3",
                "pin"  : 5,
                "enabled" : "true",
                "mode" : "out",
                "pull" : "down",
                "inverted" : "false",
                "duration" : 0
          }]
    }]
}

Explicando a plataforma WiringPi: temos dois relês adicionados, um na GPIO2 (pino 3) e outro na GPIO3 (pino5), mas é possível escolher qualquer pino necessário para a conexão, desde que esteja previamente configurado.

Circuito Raspberry Pi Rele

Após concluir a edição do arquivo config.json, podemos fechá-lo com o comando ctrl + O (salvando o arquivo através do Enter) e sair do editor com ctrl + x. Feito isso, executar o comando homebridge agora fará mais sentido.

Para testar se as configurações estão OK, devemos iniciar novamente o servidor homebridge, através do seu comando homebridge. A tela deve estar similar à esta.

Atente-se ao código que aparece na tela, 031-45-134. Ele será utilizado na configuração do aplicativo casa. Deixe o homebridge rodando, que agora vamos pro iOS!

Integração com o aplicativo Casa

Como mostrado no post anterior, vamos utilizar o aplicativo Casa do iOS 11 para controlar o relê remotamente. Abrindo ele, teremos a seguinte tela:

Casa iOS

Clicando em Adicionar Acessório, vamos para a tela de mesmo nome, para enxergar o código que aparece no homebridge. É possível tentar escanear o código, mas na minha experiência, não funciona muito bem. Para isso, vamos à opção Não Tem um Código ou Não Pode Escanear?.

Código Homekit

A nova tela mostra a instância do Homebridge rodando. Caso não apareça, reinicie o servidor pelo terminal, para que ele seja exibido. Selecione a instância caso esteja ok.

Seleciona instância

É exibido um aviso de acessório não certificado. Nada para se preocupar, pois realmente não estamos trabalhando com acessórios certificados pela Apple. Adicione mesmo assim, e insira o código informado acima.

Código Homebridge

A primeira tela após a validação do código é a tela de configuração do servidor. Basta clicar em Seguinte para configurarmos os dois itens separados do relê.

Configuração GPIO

É possível também configurar o cômodo que você quer colocar o dispositivo. O aplicativo casa conta com a possibilidade de adicionar várias casas, cada uma delas com vários cômodos, e cada um deles por sua vez, vários dispositivos.

Após a configuração, o aplicativo volta para a tela inicial, agora com dois dispositivos. Note que o dispositivo Lâmpada está ligado, e é possível desligá-lo a qualquer momento

Aplicativo Casa configurado

Um grande chamariz da plataforma Homebridge, é a possibilidade de utilizar a Siri para controlar os dispositivos. Quando pedimos à ela para desligar a Lâmpada, quase instantaneamente o relê é desligado.

Siri

Considerações finais

O homebridge é uma plataforma em constante desenvolvimento. É possível que, no momento da leitura desse tutorial, algumas configurações tenham sido alteradas. Este tutorial é apenas um norte pra quem quer se aventurar na automação residencial.

É possível também acessar os dispositivos remotamente. Caso você possua um iPad, ou Apple TV de quarta geração permanecendo em casa, permitindo que seu iPhone controle os dispositivos como se fosse localmente.

Existem várias outras funcionalidades que você pode agregar no servidor. Basta instalar o plugin desejado e configurá-lo de acordo com o tutorial do próprio plugin. Diversos plugins podem ser encontrados no Repositório do NPM.

O Apple Watch também vale pra controlar os dispositivos, como visto abaixo.

Apple Watch

Gostou deste post? Deixe seu comentário logo abaixo. Em caso de dúvidas, caso queira trocar uma ideia, ou até mesmo dividir seu projeto, acesse nosso Fórum!

Posts Relacionados

Deixe uma resposta

O seu endereço de e-mail não será publicado. Campos obrigatórios são marcados com *

37 Comentários

  1. Sensacional …

    Mandou muito bem Alliston,

  2. Puxa… muito legal suas explicações… porém estou com uma duvida… estou seguindo seu tutorial… tenho um broadlink RM pro (onde já tenho todos os controles gravados)… como faço a integração dele no homebride?… me perdi nesta parte…

    1. Que bom que está aproveitando Alex! Esses dois posts são mais introdutórios, por isso não cobri um plugin que provavelmente você vai precisar.
      Sinceramente nunca trabalhei com o Broadlink, então posso falar algo que não se aplica, mas usarei de base o NodeMCU que tenho conectado aqui.

      No Node, eu criei um servidor web que me permite ter URLs para ligar/desligar um switch (por exemplo: 192.168.1.10/switch/1 para ligar ou /0 para desligar). Já no RaspberryPi, eu instalei o plugin Homebridge HTTP (https://github.com/rudders/homebridge-http) que faz a ponte, assim permitindo que eu acesse o servidor web do NodeMCU pelo aplicativo casa.

      Acredito que o Broadlink possua essa funcionalidade de servidor web também, então o plugin HTTP deve te atender. Dá uma olhada e me avisa aqui se não der certo, que dai eu alinho contigo.

      Grande abraço!

      1. Entao Alliston… obrigado pela resposta… deixa ver se estou entendendo tudo direito…
        Fiz tudo exatamente conforme o tutorial… (inclusive a instalacao do plugin)
        pelo que entendi… apos tudo isto… tenho que fazer os ajustes no arquivo config.json… correto?
        Entao… não consigo localizar o arquivo config.json… e quando executo o homebridge… ele informa que nao localizou o arquivo config.json…
        Em relação ao Broadlink… acredito que tenha que instalar o plugin.. no repositorio que voce falou… porem quando dou o comando… ele aparesenta alguns erros…
        voce sabe aonde estou errando?
        agradeço muito sua ajuda….

        1. Oi Alex! Então tá fácil! Dá uma olhada na parte do tutorial chamada Execução do Homebridge. Lá mostra como criar o config.json através do comando sudo nano /home/pi/.homebridge/config.json

          Depois de configurado, você pode instalar o plugin HTTP e configurá-lo de acordo com o tutorial da página deles no Github. Qualquer coisa, coloca aqui os erros que eu tento ver pra você.

          Grande abraço!

  3. Olá, boa noite.

    Precisa verificar a ligação dos cabos na imagem, lá ele está ligando o 5v do Raspberry na IN02 do relé, e o Pino 05 (GPIO 03) no VCC do relé. Infelizmente eu descobri da pior maneira e o Pino do meu Raspberry provavelmente queimou, já que ele não manda mais comandos para o módulo relé.

    Minha ligação ficou desta forma, e funcionou, somente o pino queimado que não executa, mas no app ele reconhece normalmente.

    5V Raspberry (Pino02) no VCC do módulo relé
    Ground Raspberry (Pino06) no GND do módulo relé
    GPIO02 do Raspberry (Pino03) no IN1 do módulo relé
    GPIO03 do Raspberry (Pino05) no IN2 do módulo relé

    Obrigado

    Leandro dos Santos Pereira
    1. Olá Leandro, boa tarde!

      Tudo bem?

      Apesar de ter me atentado ao seu post, antes de realizar a ligação dos cabos, o pino3 da minha RBP, também não responde. Conseguiu evoluir?

      Obrigado,

      1. Em tempo, realizei um teste utilizando o código abaixo, apenas para garantir que ao pino3 da RBP, continua respondendo corretamente:

        import RPi.GPIO as GPIO
        import time

        GPIO.setmode(GPIO.BOARD)
        GPIO.setwarnings(False)
        GPIO.cleanup();

        GPIO.setup(3, GPIO.OUT)
        print(“LAMPADA LIGADA\n”)
        GPIO.output(3, GPIO.HIGH)
        time.sleep(1)
        print(“LAMPADA DESLIGADA\n”)
        GPIO.output(3, GPIO.LOW)

        Rodei em IDLE2 – Apenas para testar mesmo

        Já fico na torcida para que sua placa não tenha sido danificada.

        []’s
        Thiago

        1. Fala Pessoal,

          Consegui solucionar o problema de forma muito simples. bastou editar o arquivo “cachedAccessories”.

          pi@raspberrypi:~ $ cd /home/pi/.homebridge/
          pi@raspberrypi:~/.homebridge $ sudo nano cachedAccessories
          Limpar a linha do arquivo: ˆK
          Salvar
          Executar o Homebridge novamente.

          Este cache guarda informações do config.jason e impede a troca das portas.

          IMPORTANTE: Sugiro fazer um backup do arquivo antes de qualquer alteração.

          Abraços,
          Fabri

        2. Cara, instalei novamente e a GPIO 03 continua não respondendo.

          Entrei no caminho que você passou, mas não tem nenhuma linha, está vazio.

          Acho que devo ter feito algo errado.

          Valeu

          Leandro dos Santos Pereira
        3. Fala Thiago, blz?

          Consegui finalmente um tempinho para executar o teste, e para minha enorme alegria realmente não queimou a porta, eu consegui escrever nela e com isso acender e apagar um led.

          Agora logo que puder que tentar novamente mexer no arquivo que voce indicou e ver se resolve.

          Valeu

          Leandro dos Santos Pereira
          1. Leandro, buenas?!

            Cara que legal em saber!

            Dei um tempo no projeto, mas vou retomar este final de semana. Conseguiu utilizar seguindo a dica acima?

            Bora descobrir coisas novas e compartilhar sempre!

            Abraço,
            Fabri

      2. Fala Thiago, blz?

        Desculpe a demora em responder, faz um tempinho que não passava por aqui.
        Ainda não responde, vou tentar o código que voce postou e verificar, eu formatei meu cartão e estou refazendo a instalação, assim que tiver noticias aviso.

        Obrigado

        Leandro dos Santos Pereira
  4. Fala Alliston.

    Nessa semana chegaram meus interruptores da Livolo (https://livolo.pt.aliexpress.com) controlados por RF. Fiz o homebridge utilizando o Broadlink como controlador e o MacBook como ponte do homebridge. Ficou show, a sala tá toda automatizada (luzes, TV, Home Theather). Consigo controlar tudo pelo HomeKit (Siri e Apple Watch) e pelo app da Broadlink, o e-control.

    Postei como ficou aqui (https://www.htforum.com/forum/threads/livolo-automacao-simples-de-iluminacao-de-baixo-custo.233602/page-32#post-7986436)

    Próxima semana vou ao Paraguai e comprarei um RPi 3 pra deixar rodando como ponte do HomeBridge em tempo integral. Como já tenho o config.json todo ajustado vai ser só copiar e colar.

    1. Marlos, estou querendo utilizar broadlink tb para fazer automação pelo menos da TV e HT, sou bem iniciante, por acaso vc possui um tutorial para utilizar o homebridge + Broadlink? a principio usarei o Mac para aprender e depois irei pelo mesmo caminho que vc utilizando RPi.

      Obrigado!

  5. Excelente artigo!
    Tem como fazer um passo a passo ensinando fazer a integração com o iOS via homebridge de um dispositivo SONOFF de 1 canal com o fimware customizado TASMOTA ?

    1. Oi Thiago, obrigado!

      Infelizmente meu Sonoff queimou, então deve demorar um pouco até chegar o novo. Mas assim que chegar já vou organizando pra criar um artigo sobre isso.

      Grande abraço!

  6. Hello bet tutorial but, I’m doing all the steps and when I eject the last Homebridge, say:

    r>
    [1/14/2018, 9:14:55 AM] Loaded plugin: homebridge-gpio-wpi2
    [1/14/2018, 9:14:55 AM] Registering platform ‘homebridge-gpio-wpi2.WiringPiPlatform’
    [1/14/2018, 9:14:55 AM] —
    /usr/lib/node_modules/homebridge/lib/server.js:215
    throw new Error(‘Not a valid username: ‘ + username + ‘. Must be 6 pairs of colon-‘ +
    ^

    Error: Not a valid username: . Must be 6 pairs of colon-separated hexadecimal chars (A-F 0-9), like a MAC address.

    I user the ether from ifconfig wlan0 but don’t work. Please a bit of help thanks

    1. Hi Joan,

      You should replace for your Mac Address. When I executed the ifconfig command, I got the Mac Address, which is shown after the word ether. In my case, the Mac Address is b8:27:eb:82:23:89 (six pairs of colon-separated hexadecimal chars). It’s important that they MUST be in uppercase. Put all the letters in uppercase, and you’re good to go!.

      Feel free to ask any questions.
      Best regards

      1. Hello Aleixo, thanks for help.

        I try with Mac dress in uppercase from ifconfig ether but the error persist:

        pi@raspberrypi:~ $ homebridge
        *** WARNING *** The program ‘nodejs’ uses the Apple Bonjour compatibility layer of Avahi.
        *** WARNING *** Please fix your application to use the native API of Avahi!
        *** WARNING *** For more information see
        *** WARNING *** The program ‘nodejs’ called ‘DNSServiceRegister()’ which is not supported (or only supported partially) in the Apple Bonjour compatibility layer of Avahi.
        *** WARNING *** Please fix your application to use the native API of Avahi!
        *** WARNING *** For more information see
        [1/21/2018, 11:51:53 AM] Loaded plugin: homebridge-gpio-wpi2
        [1/21/2018, 11:51:53 AM] Registering platform ‘homebridge-gpio-wpi2.WiringPiPlatform’
        [1/21/2018, 11:51:53 AM] —
        /usr/lib/node_modules/homebridge/lib/server.js:215
        throw new Error(‘Not a valid username: ‘ + username + ‘. Must be 6 pairs of colon-‘ +
        ^

        Error: Not a valid username: . Must be 6 pairs of colon-separated hexadecimal chars (A-F 0-9), like a MAC address.
        at Server._loadConfig (/usr/lib/node_modules/homebridge/lib/server.js:215:13)
        at new Server (/usr/lib/node_modules/homebridge/lib/server.js:57:38)
        at module.exports (/usr/lib/node_modules/homebridge/lib/cli.js:26:16)
        at Object. (/usr/lib/node_modules/homebridge/bin/homebridge:17:22)
        at Module._compile (module.js:571:32)
        at Object.Module._extensions..js (module.js:580:10)
        at Module.load (module.js:488:32)
        at tryModuleLoad (module.js:447:12)
        at Function.Module._load (module.js:439:3)
        at Module.runMain (module.js:605:10) ”

        thanks a lot for your help
        Best regards

    2. Hi, remove the “”.
      The same error occourd with me.

      Mario Wencelewski Filho
      1. The code should be:
        username”: “XX:XX:XX:XX:XX:XX”,

        Mario Wencelewski Filho
  7. Estou com uma duvida, quando eu faço ligo em uma lampada eu só posso ligar e desligar ela por meio do celular? Se eu usar o interrupitor para desligar ela ainda vai ligar pelo homekit ?

    1. Verissimo, como é um interruptor “burro”, ele não tem conectividade, e não possui integração alguma com o Homebridge. Se você utilizar um esquema de relés, então só vai conseguir ligar a lâmpada pelo celular. Existem outras maneiras para que você consiga utilizar o interruptor e o celular ao mesmo tempo, mas já envolvem outros periféricos e mais conhecimento de eletrônica.

  8. Olá Alliston,

    Parabéns pelo tutorial, executei e ficou perfeito.
    Tenho uma dúvida, aonde encontro tutoriais de como utilizar um sensor DHT11, ou controle de luminosidade por exemplo.
    Obrigado

    1. Olá Samuel.

      Aqui tem nosso tutorial explicando a interação com o DHT22 no Arduino: https://www.filipeflop.com/blog/monitorando-temperatura-e-umidade-com-o-sensor-dht11/

      Grande abraço!

      1. Desculpa acredito que me expressei erroneamente.
        A minha dúvida é se há uma forma de dimmerizar ou integrar o DHT22 (ou DHT11) junto a configuração do config.json, para que seja reconhecido no Homekit?
        Obrigado Alliston.
        Abraço.

        1. Oi Samuel!

          Os sensores DHT só funcionam como leitura, e não servem pra uma possível automação (por exemplo, ligar o ar condicionado quando a temperatura estiver a 30 graus…). Mas é possível sim! Pra isso, dá uma olhada no plugin abaixo, ele tem um tutorial todo explicando. Ele depende duma biblioteca chamada BCM2835, e lá explica como instalar.

          https://www.npmjs.com/package/homebridge-dht-sensor

          Qualquer coisa posta aí pra gente! Grande abraço.

  9. Cara ontem eu estava configurando e estava funcionando certinho
    hoje fui instalar novamente e não starta o homebrigde de jeito nenhum mesmo adcionando no bash aquela linha como disse.
    Ao final da instalacao do script aparece assim

    npm WARN enoent ENOENT: no such file or directory, open ‘/home/pi/package.json’
    npm WARN pi No description
    npm WARN pi No repository field.
    npm WARN pi No README data
    npm WARN pi No license field.

    acredito que deu algum problema no repositorio.

  10. Caramba, estava estudando a instalação do Homebridge aqui quando me dei conta que a primeira imagem utilizada é a sala da minha casa hehe!
    (https://uploads.filipeflop.com/2017/10/Imagem-Destaque-3.png) << Essa no caso. Estou fazendo a automatização com broadlink rm pro e vou instalar um raspberry pi como servidor pra utilização padrão no IOS, porém meu raspberry pi ainda não chegou, uma duvida simples, posso usar a siri em português ou tem que ser em inglês?

    1. cara funciona em portugues

    2. Mateus, pode usar em português sim. A Siri em inglês é apenas frescura do autor que vos fala hehehe

      Aproveite, e grande abraço.

  11. Quando eu digito o código e passo para a proxima tela para se conectar no raspberry, o icone nao aparece. O que pode ser?

  12. Sou leigo com Raspberry e gostaria de saber se consigo usar esse sistema de apagar e acender a luz em paralelo com o interruptor! Substituindo o interruptor por um interruptor de pulso!

    1. Oi Cristian. É possível sim, mas pra usar com o Homebridge você teria que escrever um plugin desse interruptor para poder verificar se ele está ligado ou desligado, passando para o iOS qual o status. É algo um pouco mais avançado

  13. Alliston, td bom?

    segui os passos mas quando coloco o arquivo config.json (validado no JSONLint) ele da o erro abaixo:

    2018-7-13 20:06:07] There was a problem reading your config.json file.
    [2018-7-13 20:06:07] Please try pasting your config.json file here to validate it: http://jsonlint.com
    [2018-7-13 20:06:07]
    /usr/local/lib/node_modules/homebridge/lib/server.js:213
    throw err;
    ^

    SyntaxError: Unexpected token \ in JSON at position 1
    at JSON.parse ()
    at Server._loadConfig (/usr/local/lib/node_modules/homebridge/lib/server.js:207:19)
    at new Server (/usr/local/lib/node_modules/homebridge/lib/server.js:56:38)
    at module.exports (/usr/local/lib/node_modules/homebridge/lib/cli.js:28:16)
    at Object. (/usr/local/lib/node_modules/homebridge/bin/homebridge:17:22)
    at Module._compile (module.js:652:30)
    at Object.Module._extensions..js (module.js:663:10)
    at Module.load (module.js:565:32)
    at tryModuleLoad (module.js:505:12)
    at Function.Module._load (module.js:497:3)

    saberia a causa? cheguei a pesquisar mas não tive sucesso.

    Obrigado

    1. Fala Felipe, boa noite! Tudo bom, e por ai?

      Pela mensagem de erro, existe uma barra invertida “\” num local errado… Teria como postar o config.json aqui? Que dai a gente analisa.

      Abraços!