
O Home Assistant é um aplicativo popular de código aberto para organizar uma casa inteligente. A primeira experiência do autor com o Assistente Doméstico se baseia na tentativa de integrar uma panela de arroz inteligente. O autor tentará descrever os principais componentes e recursos deste aplicativo, que ele teve a chance de conhecer passo a passo. O artigo é, de certa forma, uma revisão, de certa forma um guia para quem deseja iniciar um relacionamento com o Assistente Doméstico.
Para quem tem pouco tempo livre, aconselho que você pule o ditado - o primeiro capítulo - e vá direto para o segundo. Você só precisa saber que trabalharemos com uma panela de arroz chinesa inteligente da Xiaomi.
Panela de arroz inteligente
Uma panela de arroz é obviamente uma panela de arroz. Wiki nos mostra vapores de arroz em cerâmica do Museu Britânico que remontam a 1250 aC Em 1945, a Mitsubishi se tornou a primeira empresa de panela elétrica de arroz do Japão. Nosso modelo - Panela de Arroz da Xiaomi - pode cozinhar não apenas arroz. “Este é um ótimo dispositivo para fazer não apenas arroz, mas outros tipos de pratos. Pode cozinhar sopas, doces e muito mais ”, diz o anúncio. Mas o mais importante é a presença de um módulo wi-fi, software com recursos de automação e mais de 200 receitas instaladas por software. "O caminho para uma casa inteligente através do estômago é correto", pensou o autor e decidiu.
O Xiaomi Rice Cooker, como convém a um dispositivo digital, é externamente muito atraente, agrada a sua forma redonda e minimalismo geral. Para configurá-lo e usá-lo, o fabricante oferece o aplicativo Mi Home. Depois de registrar a conta Mi, o programa encontra com facilidade um novo dispositivo e você o registra na sua rede local. A interface do aplicativo não é a pior, fornece ferramentas básicas de automação e pode receber notificações dos dispositivos. No entanto, existem desvantagens significativas. Nem todo mundo pode ficar satisfeito com o envio de informações ao desenvolvedor sobre cada clique do usuário. E uma expressão desagradável é frequentemente encontrada hoje em cores nacionais. Em vez de mais de 200 receitas, apenas quatro são traduzidas e estão disponíveis em idiomas estrangeiros. O resto é exclusivamente para o povo chinês. Quando sua panela de arroz “inteligente” não é capaz de cumprir todos os deveres culinários prometidos, então, veja você, fica triste. Depois de vagar por algum tempo na Internet, um triste autor se deparou com o próximo
projeto interessante (benefícios eternos para o autor). O que acabou se dedicando ao desenvolvimento de um módulo para um determinado Assistente Doméstico.
Assistente de casa
Primeiro, algumas informações gerais. Como nos dizem na
página inicial do HA , ”Este é um software de código aberto para automação residencial inteligente que se concentra no gerenciamento local e na privacidade. Desenvolvido pelo trabalho de uma comunidade aberta de entusiastas, é ótimo para trabalhar em um Raspberry Pi ou servidor local. ” O projeto tem mais de cinco anos, usa python e uma licença Apache 2.0. A versão de lançamento no momento da escrita dessas linhas é 0.99.3.
A HA usa módulos separados (integrações ou componentes) para gerenciar dispositivos. Criar um é bem simples. No site, você encontra um catálogo dos
principais módulos (aprovados e suportados pela comunidade). Entre o número total (1485 peças), existem outros completamente diversos, os nomes amazon, google, xiaomi e até uma vez que o yandex está listado no catálogo.
Vamos tentar
instalar a HA em um ambiente virtual na área de trabalho do Linux. Nós precisaremos do gerenciador de pacotes python3 e pip.
python3 -m venv homeassistant
Depois disso, a
GUI do HA ficará disponível em
http: // localhost: 8123 . Na primeira vez que você fizer login, será necessário criar uma conta de usuário. A interface da web do HA é bastante volumosa. Alguns elementos importantes que merecem ser mencionados no início são a guia Configuração → Geral, onde você pode recarregar facilmente os arquivos de configuração ou o próprio servidor. E também a página Informações na lista de ferramentas dos Desenvolvedores, onde você pode ver os logs de erros.
O HA armazena todos os dados do usuário necessários, no caso do Linux, na pasta de configurações “~ / .homeassistant”. Os arquivos de configuração são gravados no formato
YAML , e o principal é "configuration.yaml". Combina os dados dos módulos, automação, etc. O recurso de importação permite dividir as configurações em arquivos organizados logicamente separados. Os módulos são armazenados nas subpastas "componentes" (integrados) e "custom_components".
Esse conhecimento deve ser suficiente para instalarmos um novo módulo. Copie a pasta "xiaomi_cooker" do nosso repositório para o nosso "~ / .homeassistant / custom_components". De acordo com a descrição, adicione as configurações do módulo ao arquivo "configuration.yaml":
Feito. Após a reinicialização do HA, uma nova entrada de módulo será exibida na seção Geral → Integrações da interface da web.
Qualquer módulo é um determinado conjunto de objetos (entidades) e serviços (serviços, em essência - funções). Os objetos armazenam vários dados recebidos dos dispositivos. Por exemplo, sensor.xiaomi_cooker_temperature é a temperatura da panela de arroz, sun.sun é a posição do sol. Os dados de um objeto são expressos por um valor básico - status (estado) e um conjunto arbitrário de atributos adicionais (atributos). Os serviços são usados para transferir comandos e valores para dispositivos. Por exemplo, xiaomi_cooker.start - o comando para iniciar a operação da panela de arroz, ou homeassistant.check_config - a inicialização da pesquisa de erros nos arquivos de configurações de alta disponibilidade. A lista Ferramentas do desenvolvedor da interface da web contém a seção Serviços, onde você pode visualizar a lista de serviços disponíveis para você e brincar com as chamadas. Perto é a seção Estados, onde, consequentemente, você pode visualizar e alterar os valores dos objetos. Note-se que as alterações nos valores dos objetos na seção Estados são unilaterais. I.e. se, por exemplo, você alterar o estado do objeto lights.state aqui de desligado para ligado, isso não afetará o estado real do dispositivo e, na próxima vez em que os dados do dispositivo forem atualizados, o valor do objeto será substituído por real.
Automação
A principal ferramenta de gerenciamento para uma casa inteligente é a
automação . Você pode adicioná-los e editá-los usando a interface gráfica na seção Geral → Automação ou diretamente no arquivo "automations.yaml". A principal função da automação é chamar serviços quando determinadas condições forem atendidas. Ferramentas básicas para definir as condições para chamar o valor dos objetos, incl. dados de tempo. Existem soluções um pouco mais específicas, como eventos. Como um exemplo simples de automação, forneceremos um código que atualiza os dados de vantagem do autor com um período de 15 minutos:
Deve-se notar que até agora nem toda a automação disponível (por exemplo, a acima) pode ser configurada sem editar o código yaml por meio da interface gráfica, mas os desenvolvedores dizem que estão trabalhando ativamente para eliminar essa desvantagem.
Templating
Após a automação, é hora de falar sobre
modelos (modelos). Vários elementos de configurações nos arquivos yaml permitem usar inserções na
linguagem de script jinja2 . Muitos desses elementos são unidos pelo nome comum 'Modelos', como service_template ou trigger_template. Usando modelos, obtemos acesso aos valores dos
objetos no HA e a capacidade de usar esses dados em expressões matemáticas e lógicas complexas, o que expande bastante o nosso potencial. Como exemplo, vamos usar um código um pouco mais complicado de sensor.umpiro_charge, escrito em "configuration.yaml". Este é o
template_sensor , ou seja, "um sensor que forma dados com base nos valores de outros objetos". Nosso sensor será um análogo de uma bateria gradualmente descarregada:
Deixamos o entity_id em branco porque já adicionamos automação que causará independentemente a atualização dos dados do objeto.
Scripts Python
Por sua vez, os scripts python são uma ferramenta simples para criar novos serviços. Após adicionar a linha: “script python:” a “configuration.yaml”, todos os arquivos com a extensão “.py” que colocamos na pasta “~ / .homeassistant / python_scripts” ficarão disponíveis como serviços com os nomes “python_scripts. < nome_do_arquivo> ”. Seu código é executado em um ambiente predefinido, onde os dados e variáveis hass nos dão acesso aos argumentos da chamada de serviço, bem como aos objetos e serviços de alta disponibilidade. Como exemplo, fornecemos o código do arquivo "charge_set.py" para o serviço "python_scripts.charge_set". Sua função será definir a carga da nossa bateria:
python_scripts / charge_set.py Criando integração
Tudo o que fizemos com a ajuda de modelos e scripts Python, talvez fosse mais fácil fazer isso escrevendo um módulo separado. Como já mencionado, os módulos não oficiais são armazenados na pasta "custom_components". No futuro, precisaremos de um objeto que armazene informações sobre a receita atual da nossa panela de arroz e um serviço que permita alterar esses dados. Com base em um
exemplo da documentação, criaremos um novo módulo para isso, "sobrecarregar". A primeira etapa é o arquivo custom_components / overmind / __ init__.py:
custom_components / overmind / __ init__.py Depois disso, reportaremos o novo módulo ao arquivo de configuração “configuration.yaml”, adicionando uma linha com o nome do módulo: “overmind:”. O problema está resolvido.
Interface do usuário Lovelace
Esse é o nome do HA de
front-end usado. Essa interface gráfica, através da qual um usuário comum é convidado a controlar uma casa inteligente, é a primeira página da interface da web de alta disponibilidade. A interface LUI é formada por cartões de vários tipos, que podem refletir os valores dos objetos, servem para chamar funções e outras tarefas. Os cartões podem ser distribuídos nas páginas (visualização), por analogia com os favoritos do navegador. A configuração é convenientemente organizada através da mesma interface gráfica, mas também é acessível através do código yaml, para o qual também há um editor de texto embutido. Eu recomendo que você consulte a página
https://demo.home-assistant.io/ , onde existem vários exemplos diferentes de configurações da LUI e onde você pode ver, clicar e modificá-las com facilidade.
Exemplo de configuração da GUIFalando sobre as deficiências da interface, infelizmente, os próprios desenvolvedores admitem que o projeto está tentando se sentar simultaneamente nas cadeiras da área de trabalho e do smartphone. A LUI, por padrão, gosta de determinar independentemente a localização e o tamanho dos cartões, o que às vezes pode transformar uma página que parece normal no monitor em uma bagunça na tela do smartphone e vice-versa. Existem algumas ferramentas simples para otimizar a interface, mas, na minha experiência, nem sempre são eficazes.
Eu acho que não faz muito sentido descrever a criação de uma interface usando ferramentas gráficas, então darei alguns exemplos na forma do código yaml que usei. Depois de criar uma página separada (visualização) para a nossa panela de arroz, tentaremos preenchê-la com os elementos mais necessários para que não cause rejeição ao usar a tela do smartphone.
Aqui, tentaremos essas ferramentas muito simples de ordenação de interfaces, que são a pilha horizontal e a pilha vertical. Primeiro, crie uma pilha vertical a partir de cartões dos tipos botão de entidade e sensor. O primeiro servirá para lançar nossa panela de arroz, o segundo - para exibir a temperatura:
O Assistente Doméstico inclui um arquivo de
Ícones de Design de
Materiais , que, por meio de nomes apropriados (por exemplo, mdi: selection), pode ser usado nos itens de configuração. O script (neste caso, não python-, mas yaml-), que costumávamos chamar de serviço, é outra ferramenta conveniente de HA.
Agora combine a pilha vertical acima com o cartão de retrato na pilha agora horizontal. Tudo será tão simples:
Aqui você precisa marcar a linha 'imagem:'. Todos os arquivos que colocamos na pasta '~ / .homeassistant / www' ficam disponíveis no link
http: // localhost / local / filename .
O próximo passo é trabalhar um pouco no botão de chamada de serviço que criamos. Seria conveniente para nós se funcionasse como uma chave seletora, ou seja, on / off, e não da maneira como é feito agora. Isso pode ser alcançado com o uso de um cartão do tipo condicional, cuja exibição na tela pode ser ajustada através da definição de determinadas condições. Abaixo está o código do cartão, que é o botão para desligar a panela de arroz e só é visível se a panela estiver no processo de preparação do prato:
Reescrevendo o código do botão liga / desliga criado anteriormente de maneira semelhante e combinando-o com isso, obtemos um botão que funciona tanto dentro quanto fora.
Complementamos nosso interesse com outro cartão - com o tempo até o final do cozimento (semelhante ao cartão de temperatura) e mais um com os detalhes da receita (personalizada: cartão de receita) exibida. Como resultado, temos algo parecido com isto:
Cartões personalizados
O Assistente de Casa, além da riqueza do conjunto interno de tipos de cartão, é claro, oferece a capacidade de criar o seu próprio. Esses cartões são chamados de cartões personalizados e o javascript é usado para criá-los.
Aqui estão dois exemplos simples de código. É fácil encontrar cartões prontos criados por vários
entusiastas na rede e, se você quiser experimentar, será útil descobrir que existem
módulos js especiais criados para simplificar o trabalho de criação de novos. Minha experiência com javascript continua a querer menos, portanto, como exemplo, darei apenas uma pequena parte do código do cartão usado para selecionar e exibir a receita atual.
Para usar o novo cartão, você precisará adicionar o seguinte código no início do arquivo de configurações da LUI:
cartão de receita resources:
e entre a lista de cartões:
- type: 'custom:recipe-card'
Notificações
Uma parte necessária de uma casa inteligente está enviando mensagens para o usuário. No HA, essas mensagens são chamadas de notificações e existem dois tipos básicos de notificações. O primeiro são notificações persistentes. Para enviá-los, o serviço interno "persistent_notification.create" é usado. Uma lista dessas mensagens está disponível através do ícone de campainha na interface gráfica, elas usam a marcação de remarcação e são essencialmente bastante simples.
Outra ferramenta mais interessante é o módulo de notificação embutido, que através da instalação de módulos adicionais permite enviar mensagens usando
plataformas de terceiros . Como exemplo, considere um
módulo para telegrama .
Para usar o módulo, primeiro, precisamos criar um bot no próprio telegrama. Ao configurar, precisamos do chat_id do nosso usuário e da API do bot de token. Como obter esses dados - descritos em detalhes no link acima, assumimos que estamos prontos. Movendo-se diretamente para a instalação do módulo, primeiro, como já fizemos, copie seu código-fonte para a pasta components e, em seguida, adicione suas configurações ao arquivo "configuration.yaml":
configuration.yaml telegram_bot:
mais configurações para o módulo de notificação:
notify:
O módulo de telegrama nos permite enviar mensagens, fotos ou vídeos. Como exemplo, criaremos automação para enviar uma mensagem com uma foto, notificando-nos do final do cozimento.
Posfácio
O Assistente de residência pode ser de interesse para quem deseja tentar organizar o gerenciamento local de uma casa inteligente. Este é um projeto amplo, interessante, de desenvolvimento aberto e ativo, devido aos esforços da comunidade. A variedade de ferramentas do Assistente Doméstico não pode deixar de se alegrar (não tive tempo de mencionar algumas importantes). Como sinal de menos, pode-se mencionar a relativa complexidade e incompletude da documentação.
PS
Recentemente, em 10 de outubro, houve, não sei se isso pode ser chamado de release, a transição do projeto da versão 0.99 para a versão 0.100.
Citação das Notas da versão:
Bem-vindo às notas de lançamento de mais um lançamento maravilhoso! Não, não estamos indo para 1.0, estamos fazendo 0.100! Sentimos que ainda não estamos prontos com nossas metas para a 1.0, mas estamos progredindo todos os dias. Para uma amostra do que estamos pensando, consulte o blog Modo simples no Home Assistant 1.0.