Roadmap de Desenvolvimento: Criando um App Desktop para Home Assistant

Um guia de aprendizado e ação, focado em facilidade de criação, para construir seu próprio controlador de casa inteligente para Windows usando tecnologias web (HTML, CSS, JavaScript) com Electron.

Parte 1: Roteiro de Aprendizagem

Este roteiro foca nos conceitos que você precisa dominar, em ordem de complexidade, para ser capaz de construir a aplicação do zero.

Fase 1: Fundamentos da Web Interativa

O objetivo aqui é aprender como fazer uma página web reagir às ações do usuário, sem precisar recarregar a página.

JavaScript e a Manipulação do DOM (Document Object Model)

Fase 2: Comunicação com o Mundo Exterior

Aqui você aprende como fazer sua página buscar informações de outros sistemas na internet.

APIs e JavaScript Assíncrono

Fase 3: Transformando um Site em App Desktop

Nesta fase, você aprende a "empacotar" suas habilidades web em um aplicativo nativo do Windows.

Introdução ao Electron e Ecossistema Node.js

Fase 4: Conectando com o Home Assistant

Aqui você aplica o conhecimento de API especificamente para controlar sua casa inteligente.

A API Específica do Home Assistant

Fase 5: Finalização e Distribuição

O objetivo final é transformar seu projeto em um arquivo instalável que pode ser compartilhado.

Empacotamento e Boas Práticas

Parte 2: Guia Prático do Projeto

Este guia descreve as ações que você precisa tomar, fase a fase, para construir o aplicativo. Ele assume que você está aprendendo os conceitos da Parte 1 em paralelo.

Fase 1: O Protótipo Interativo

Meta: Criar uma página web local que reage a um clique.

Estrutura: Crie uma pasta vazia. Dentro dela, crie os arquivos index.html e script.js.
Interface: No index.html, adicione os elementos essenciais:
  • Um botão para ligar (ex: <button id="btnLigar">Ligar Luz</button>)
  • Um botão para desligar (ex: <button id="btnDesligar">Desligar Luz</button>)
  • Um parágrafo para exibir o status (ex: <p id="status">Status: Desconhecido</p>)
Lembre-se de vincular o script.js ao index.html (<script src="script.js"></script> antes de </body>).
Lógica: No script.js, use document.getElementById() para pegar os botões e o parágrafo. Adicione addEventListener('click', ...) para os botões. Ao serem clicados, as funções devem mudar o .textContent do parágrafo de status (ex: "Luz Ligada!").

Fase 2: Buscando Dados da Web

Meta: Fazer sua página consumir uma API pública para provar que a comunicação funciona.

Escolha uma API: Utilize uma API pública e gratuita. Sugestões:
  • Fatos sobre gatos: https://catfact.ninja/fact (retorna {"fact": "...", "length": ...})
  • Citações do Kanye West: https://api.kanye.rest (retorna {"quote": "..."})
Implemente o fetch: Modifique a função do seu botão (ou crie uma nova). Ao invés de apenas mudar o texto, ela deve usar async/await e fetch() para chamar a API escolhida.
Exiba os Dados: Após receber a resposta da API (que será JSON), use response.json() para parsear os dados. Extraia a informação relevante (ex: data.fact para a API de gatos) e exiba-a no seu parágrafo de status.
Nota: Teste abrindo o index.html diretamente no seu navegador. Verifique o "Console" (F12) para erros.

Fase 3: A Janela do Aplicativo

Meta: Fazer seu protótipo web rodar como um aplicativo de desktop Windows.

Prepare o Ambiente:
  1. Instale o Node.js no seu Windows (inclui NPM).
  2. No terminal (Prompt de Comando ou PowerShell), navegue até a pasta do seu projeto.
  3. Rode npm init -y (isso cria o arquivo package.json).
  4. Rode npm install electron --save-dev para instalar o Electron como dependência de desenvolvimento.
Crie o Processo Principal: Crie um arquivo chamado main.js na raiz do seu projeto. Copie o código básico da seção "Quick Start" da documentação oficial do Electron. O importante é que ele crie uma janela e carregue seu index.html.
Configure o "Start": No arquivo package.json, na seção "scripts", adicione ou modifique o script de inicialização: "start": "electron .".
Execute: No terminal, rode npm start. Sua página web deve agora abrir em uma janela de aplicativo Windows.

Fase 4: O Controle da Casa Inteligente

Meta: Fazer o clique no botão do seu app controlar um dispositivo real.

Obtenha a Credencial: No seu Home Assistant, vá em "Configurações" > "Pessoas" > Seu Perfil de Usuário. Role até o final e crie um "Token de Acesso de Longa Duração". **Copie este token imediatamente!** Ele só é mostrado uma vez.
Identifique o Alvo: No seu Home Assistant, vá em "Configurações" > "Dispositivos e Serviços" > "Entidades". Encontre sua lâmpada e copie o `entity_id` exato (ex: light.lampada_da_sala).
Adapte a Requisição: No seu script.js, modifique a função que estava chamando a API de gatos:
  • Altere a URL para o endereço da API de serviços do seu Home Assistant: http://IP_DO_HA:8123/api/services/light/turn_on (substitua IP_DO_HA pelo IP da sua VM).
  • Mude o método para 'POST'.
  • Adicione os headers, incluindo o Authorization: 'Authorization': 'Bearer SEU_TOKEN_AQUI'.
  • Adicione o body em formato JSON contendo o entity_id da sua lâmpada (ex: body: JSON.stringify({ entity_id: 'light.lampada_da_sala' })).
Teste: Rode npm start no terminal e clique no botão do seu aplicativo. Sua lâmpada física deve acender ou apagar!
Dica de Segurança: Não deixe o token "hardcoded" no script.js em um app real. Use uma solução como electron-store ou peça para o usuário digitar na primeira execução.

Fase 5: O Produto Final

Meta: Transformar seu projeto em um arquivo .exe instalável e independente.

Instale o "Empacotador": No terminal, rode npm install electron-builder --save-dev.
Configure o Build: No seu package.json, adicione a seção "build" com as configurações básicas. Exemplo simplificado:
"build": {
    "appId": "com.seuprojeto.homeassistantcontroller",
    "win": {
        "target": "nsis",
        "icon": "build/icon.ico" // Opcional: Adicione um ícone .ico na pasta 'build'
    }
}
Adicione o Script de Build: Crie um novo script na seção "scripts" do package.json: "dist": "electron-builder".
Gere o Instalador: No terminal, rode o comando npm run dist. Este processo pode levar vários minutos.
Distribua: Após o build, uma nova pasta chamada dist (ou similar) será criada na raiz do seu projeto. Dentro dela, você encontrará o arquivo .exe instalável. Este é seu aplicativo final, pronto para ser compartilhado ou instalado em qualquer computador Windows.