Alexa com Home Assistant - Manual

Muitas pessoas tem dificuldade em seguir o manual do Home Assistant, por mais que esteja bem documentado, mas confesso que fazer a integração do HA com Alexa não é das opções mais tranquilas, por isso resolvi criar um tutorial que pudesse ajudar quem ainda tem dificuldades.

O artigo é baseado no manual do HA

Antes de iniciar, você precisa ter acesso externo ao seu HA com HTTPS.

Eu segui esse tutorial do HA - Amazon Alexa Smart Home

Resumindo, a Amazon fornece uma API Smart Home para um controle da automação residencial. É preciso um esforço considerável para configurar.

ETAPA 1 - CRIE SUA HABILIDADE (SKILL) INICIAL - AMAZON ALEXA

  • Você precisa de uma conta de desenvolvedor da Amazon. Se não tiver você deve criar uma.
  • Entre no Alexa Developer Console, você pode criar sua conta gratuita na página de login.
  • Crie uma Skill
  • Escolha um nome, Selecione o modelo Smart Home e clique em Create skill
  • Na próxima tela, verifique se a v3 está selecionada no item 1 Payload version.
  • OK, você criou o “esqueleto” da habilidade (Skill) Smart Home. Agora nós vamos para a próxima etapa.
  • Você pode manter essa tela aberta, pois será preciso retornar para concluir as configurações.

ETAPA 2 - CRIE SUA FUNÇÃO LAMBDA

A habilidade (Skill) Alexa Smart Home acionará uma função do AWS Lambda para processar a solicitação, foi escrito um pequeno pedaço de código hospedado como uma função Lambda que basicamente redirecionará a solicitação para sua instância do Home Assistant, em seguida, a integração da Alexa no Home Assistant processará a solicitação e envie de volta a resposta. Sua função Lambda fornecerá a resposta de volta ao Alexa.

Criar uma função do IAM para o Lambda

A primeira coisa que você precisa fazer depois de conectar na AWS console, é criar uma função do IAM para execução do Lambda. A AWS tem um controle de acesso muito rigoroso, você precisa definir e atribuir permissões especificamente.

  • Clique em Serviços na barra de navegação superior, expanda o menu para exibir todos os serviços da AWS, clique em IAM.
    image
  • Clique em Funções no painel esquerdo, após clique em Criar função.
    image
  • Selecione a opção Lambda na primeira página do assistente e clique em Próximo: Permissões
  • Selecione a política AWSLambdaBasicExecutionRole e clique em Próximo: Tags
  • A próxima tela (Adicionar tags) pode pular, basta clicar em Próximo: Revisar
  • Atribua um nome a sua nova função, exemplo: AWSLambdaBasicExecutionRole-SmartHome, e clique no botão Criar função.
  • Agora você deve encontrar sua nova função na lista de funções.

Crie uma função Lambda e adicione código

Em seguida, você precisa criar uma função Lambda.

  • Clique em Serviços na barra de navegação superior, expanda o menu para exibir todos os serviços da AWS, clique em Lambda.
    image
  • Atenção: Sua região atual será exibida no canto superior direito. Só consegui fazer funcionar com a opção “Norte da Virgínia”. Recomendo selecionar a mesma opção.
    image
  • Clique em Funções na barra de navegação esquerda, exiba a lista de suas funções Lambda.
  • Clique em Criar função, selecione Criar do zero e insira um Nome da função.
  • Informações básicas: Selecione Python 3.6 ou Python 3.7 no Tempo de Execução (Selecionei 3.7).
  • Informações básicas: Certifique-se de selecionar “Usar uma função existente” como função de execução.
  • Informações básicas: Em seguida, selecione a função que você acabou de criar na lista de funções existentes.
  • Informações básicas: Por fim, clique em criar função.
  • Na guia Configuração, expanda Designer e clique em adicionar um gatilho Alexa Smart Home à sua função Lambda.

  • Na tela de configuração, você precisa adicionar o ID da Skill que você criou na primeira etapa. Se você não fechou a tela, você pode acessar e pegar o ID conforme a imagem abaixo:
  • Em seguida vincular ao gatilho, e clicar em adicionar.
    image
  • Agora vamos para o próximo item que é “Código da função”. Clique no ícone da Função Lambda no meio do diagrama, role para baixo e você verá uma janela de código da função.
  • Limpe o código de exemplo, copie o script Python de: https://gist.github.com/matt2005/744b5ef548cc13d88d0569eea65f5e5b
  • Variáveis de ambiente: BASE_URL (obrigatório): Endereço do seu Home Assistant com porta, se necessário. Não inclua o a barra no final /

Observação: Muitas pessoas só conseguiram autenticar sem a porta no final (8123), inclusive eu, meu HA acessa sem a porta pelo navegador.

  • NOT_VERIFY_SSL (opcional): você pode configurá-lo como True para ignorar o problema do SSL, se você não possui um certificado SSL válido ou está usando um certificado autoassinado.
  • As demais variáveis não precisei utilizar.
  • Agora role até o topo, clique no botão Salvar.
    image

ARN

Você precisa copiar o ARN exibido na parte superior da página, que é o identificador dessa função Lambda. Você precisará deste ARN para continuar a configuração das habilidades do Alexa Smart Home posteriormente.

Teste a função Lambda

Agora, você criou a função Lambda. Antes de poder testá-la, você precisa configurar o seu HA. Coloque a configuração mínima a seguir no seu configuration.yaml, que expõe todo o seu dispositivo e automação suportados ao Alexa.

alexa:
  smart_home:

Após a reinicialização do HA, no AWS Lambda Console, você fará alguns testes.

Na parte superior da página de configuração da função Lambda, há um botão Teste, clique no botão suspenso à esquerda do botão Teste, clique em Configurar eventos de teste, você pode Criar novo evento de teste usando os seguintes dados:
image

Código:

{
  "directive": {
    "header": {
      "namespace": "Alexa.Discovery",
      "name": "Discover",
      "payloadVersion": "3",
      "messageId": "1bd5d003-31b9-476f-ad03-71d471922820"
    },
    "payload": {
      "scope": {
        "type": "BearerToken"
      }
    }
  }
}

Clique no botão Testar.
image

Se aparecer algum erro, é necessário verificar as etapas anterior para garantir que não pulou nenhum processo.

CONFIGURAR O PONTO FINAL DO SMART HOME SERVICE

Volte ao Alexa Developer Console. Você terminará a configuração da habilidade Smart Home.

  • Entre no Alexa Developer Console, vá para a página Alexa Skills, se não estiver.
  • Encontre a habilidade que você acabou de criar, clique no link Editar na coluna Ações.
  • Clique em SMART HOME na barra de navegação esquerda da página de criação.
    image
  • Na área “2. Smart Home service endpoint”, Default endpoint usando o ARN que você copiou da configuração da função Lambda.

ACCOUNT LINKING

O Alexa pode vincular sua conta Amazon à sua conta do HA. Portanto, o Home Assistant pode garantir que apenas a solicitação da Alexa autenticada possa acessar os dispositivos da sua casa. Para vincular a conta, você deve garantir que seu HA possa ser acessado da Internet.

  • Clique em ACCOUNT LINKING na barra de navegação esquerda da página de criação
    image

Insira todas as informações necessárias.

Em PERMISSIONS, habilite a opção Senf Alexa Events e pegue as informações do client_id e client_secret.

Em seguida, você pode utilizar o APP Alexa ou o aplicativo baseado na Web Alexa para vincular sua conta.

  • Abra o aplicativo/página Alexa, navegue até Skills -> Suas skills
  • Acesse SKILL DE DESENV.
  • Em seguida Clique na skill Smart Home (Home Assistant) que você acabou de criar.
    image
  • Clique em Ativar.
    image
  • Uma nova janela será aberta para direcioná-lo à tela de login do seu HA.
  • Após o login bem-sucedido, você será redirecionado de volta ao aplicativo Alexa.
  • Você vincular seus dispositivos agora.

Exemplo de configuração para vincular seus dispositivos

alexa:
  smart_home:
    endpoint: https://api.amazonalexa.com/v3/events
    client_id: !secret alexa_client_id ## que você pegou em permission
    client_secret: !secret alexa_client_secret ## que você pegou em permission
    filter:
      include_entities:
        - light.luz_cozinha
        - light.luz_banheiro
        - switch.pc_principal
    entity_config:
      light.luz_cozinha:
        name: Luz Cozinha

Tive problemas na ativação da Alexa o Douglas me ajudou a resolver, são 2 pontos
1-tive que deixar o HA somente na porta 443, entao alterei a config dos http:
http:
server_port: 443
2- AO adicionar o gatilho no lambda tive que usar em vez do Kit Alexa Skills , usei o Alexa Smart Home
Com esses 2 paramentos alterados funcionou

1 Curtida

Troquei para Alexa Smart Home e também funcionou.


Jose, como você fez é o correto, verifiquei na documentação do HA e informam para colocar Alexa Smart Home.

Tem um outro tutorial para adicionar Skill que é referente Intent Script (Amazon Alexa Custom Skill), que neste caso sim informam para colocar Alexa Skills Kit, mas é outros 500 e não para integrar os dispositivos configurados no HA. Então corrigi no tutorial para colocar o Smart Home.

Muito obrigado Jose, já aprendi com você também.

Olá @josep112 e @douglas ,

Esta integração não funciona usando a porta 8123?

Eu usei:

Quando vou fazer o “Account linking”, aparece a tela de login no meu Home Assisntant, eu entro com as minhas credenciais… mas recebo a mensagem de:

We were unable to link Home Assistant at this time.

Alguma idéia do que pode estar dando errado?

Obrigado!!

2 Curtidas

Conseguiu amigo?? Estou tendo o mesmo erro.

Edit: Consegui, pelo visto não funciona pela porta 8123, fiz o que o amigo acima disse, no arquivo configuration.yaml, em http: coloquei server_port 443.

Tive de redirecionar a porta 443 externa, pra minha rede interna.

Pessoal,

Segui os passos acima, porem quando foi efetuar o teste mo AWS ele falha.

Alguem pode me ajudar??

log:

START RequestId: 32xxxxxxxxxxxxxxxxxxxxx2d Version: $LATEST
[WARNING]	2020-03-04T01:22:26.828Z	32xxxxxxxxxxxxxxxxxxxxx2d	Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7fde11e06610>, 'Connection to    ********.duckdns.org timed out. (connect timeout=2.0)')': /api/alexa/smart_home

END RequestId: 32xxxxxxxxxxxxxxxxxxxxx2d
REPORT RequestId: 32xxxxxxxxxxxxxxxxxxxxx2d	Duration: 3003.22 ms	Billed Duration: 3000 ms	Memory Size: 128 MB	Max Memory Used: 57 MB	Init Duration: 166.83 ms	
2020-03-04T01:22:27.737Z 32xxxxxxxxxxxxxxxxxxxxx2d Task timed out after 3.00 seconds

@mauriciosti

Deu um pouco de trabalho para eu convencer a NET que eu precisava da porta 443 aberta, pois aqui em Curitiba eles normalmente bloqueiam ela.

Depois que a NET abriu funcionou, mas somente pela porta 443!!!

Bom dia amigos!
Sou novo por aqui, estou aprendendo na raça a trabalhar com HA, estou tentando vincular alexa com HA, eu segui o passo a passo e ao testar deu o seguinte erro:
Response:

{
  "errorMessage": "2020-03-27T00:01:40.901Z 759680cd-c9f8-4547-8a70-8878353d4c6d Task timed out after 3.00 seconds"
}

Request ID:
“759680cd-c9f8-4547-8a70-8878353d4c6d”

Function Logs:

START RequestId: 759680cd-c9f8-4547-8a70-8878353d4c6d Version: $LATEST
[WARNING]	2020-03-27T00:01:39.901Z	759680cd-c9f8-4547-8a70-8878353d4c6d	Retrying (Retry(total=2, connect=None, read=None, redirect=None, status=None)) after connection broken by 'ConnectTimeoutError(<urllib3.connection.HTTPConnection object at 0x7f6cd3b46690>, 'Connection to 192.168.15.13 timed out. (connect timeout=2.0)')': /api/alexa/smart_home

END RequestId: 759680cd-c9f8-4547-8a70-8878353d4c6d
REPORT RequestId: 759680cd-c9f8-4547-8a70-8878353d4c6d	Duration: 3003.19 ms	Billed Duration: 3000 ms	Memory Size: 128 MB	Max Memory Used: 50 MB	Init Duration: 159.14 ms	
2020-03-27T00:01:40.901Z 759680cd-c9f8-4547-8a70-8878353d4c6d Task timed out after 3.00 seconds

Alguém pode ajudar?

Olá,

Você provavelmente está tendo esse erro porque o Lambda não está conseguindo acessar o seu Home Assistant. Pelo log você colocou o endereço 192.16.15.13, você precisará estar atrás de um domínio com acesso na porta 443.

Boa noite alterei a porta do Home assistant para 443

http:
  server_port: 443
  base_url: https://edusouza.duckdns.org:443
  ssl_certificate: /ssl/fullchain.pem
  ssl_key: /ssl/privkey.pem

Refiz o Alexa e AWS e mesmo assim quando vou vincular da erro

1 Curtida

Mesma coisa aqui, e nem sei mais o que tentar! =/

Então desisti pagar 5 dólar alguma coisa tá errada não sei onde rsrs, refiz 4x o manual tudo dá ok na hora de ativar da erro

Como faço isso? 5 dólares/mês faz o que?

Ele ja fica integrado com o Alexa Nabu Casa

1 Curtida

@adriel @mauriciosti podem em ajudar? Estou usando a porta :8123 para acesso externo. Como eu faço a configuração para a porta 443?

@Hewitt, no Home Assistant vc precisa alterar o /config/configuration.yaml incluindo server_port: 443, veja abaixo um exemplo:

http:
server_port: 443
base_url: https://exemplo.duckdns.org
ssl_certificate: /ssl/fullchain.pem
ssl_key: /ssl/privkey.pem

Desta forma o HA passa a responder pela porta 443 e não mais pela 8123…

Adicionalmente você precisa fazer o redirecionamento da porta 443 no seu roteador para o seu IP interno.

No caso, ficaria assim:

  • Porta interna: 443
  • Porta externa: 443

??

Teria que ver no seu roteador, esta informação muda de fabricante para fabricante…

1 Curtida

Tem que criar uma conta no AWS e informar o cartão de crédito e nesse caso será pago o serviço?

Não, apenas informar mesmo precisa. Será cobrado um valor, mas depois será extornado (valor baixo).