Automações
Variáveis de Gatilho
Para transportar contexto do evento até as ações, variáveis de gatilho expõem dados como entity_id, estado anterior, estado novo, payload MQTT, horário e user_id. Em Home Assistant, o objeto trigger muda conforme a plataforma do gatilho e pode conter campos distintos. O recurso evita consultas adicionais e permite mensagens específicas. A limitação é o acoplamento ao schema: campos ausentes, tipos diferentes e payloads não validados causam falhas, exigindo defaults seguros, testes e documentação.
⚙ Definição Técnica
Variáveis de gatilho são os dados capturados ou derivados no instante em que um evento inicia a automação e disponibilizados para condições, templates, ações, logs e scripts. Servem para preservar contexto sem consultar novamente a origem. O conjunto depende da plataforma: um gatilho de estado pode fornecer entidade, from_state e to_state; MQTT pode oferecer topic, payload e payload_json; webhook pode trazer body, query e cabeçalhos filtrados; calendário pode incluir início, fim e descrição. A implantação exige motor que exponha o objeto, documentação do schema, tratamento de campos opcionais e validação de dados externos. Usar a variável errada ou assumir um tipo fixo pode interromper a execução ou produzir ação incorreta.
Tipos comuns de gatilhos
Variáveis de mudança de estado
Gatilhos de estado normalmente oferecem estado anterior e novo, entidade, atributo e horário. Isso permite informar “a porta mudou de fechada para aberta” sem consultar o estado atual. O snapshot é importante porque o dispositivo pode mudar novamente antes da ação. Contudo, objetos restaurados após reinício podem ter contextos especiais. from_state pode ser null na criação da entidade. to_state pode conter atributos grandes. A automação precisa testar existência e distinguir transição real de atualização de atributo. Em Home Assistant, mudanças em atributos podem ou não acionar conforme configuração. Para mensagens, use valores amigáveis com fallback. Para decisões críticas, compare também o estado atual quando a ação ocorre, pois o snapshot descreve o evento, não necessariamente a realidade presente.
Variáveis de payload MQTT
O objeto pode incluir topic, payload bruto, payload_json, qos e outras informações. Um sensor publica {"temperature":28.4,"unit":"C","ts":...}. A automação extrai os campos. O payload é entrada externa e precisa de validação: tamanho, JSON válido, tipos, limites, unidade e timestamp. Não monte nomes de serviço ou entidades diretamente a partir de strings não controladas. A autenticação do broker e ACLs limitam quem publica. QoS 1 pode entregar duplicatas; event_id ou estado desejado ajuda. Retained messages podem disparar após reconexão e representar dado antigo. Use timestamp e política de frescor. O requisito de implantação é um broker configurado com credenciais, TLS quando aplicável e tópicos bem definidos.
Variáveis de webhook e API
Webhooks podem fornecer método, query, corpo, caminho e metadados autenticados. Cabeçalhos sensíveis devem ser consumidos pela camada de validação e não expostos indiscriminadamente ao template. O corpo JSON precisa de schema. Um event_id sustenta idempotência. Um timestamp assinado limita replay. A automação pode usar device_id e event_type para roteamento, mas deve aplicar allowlist. Retornar erro 4xx para payload inválido evita processamento. Como o emissor pode retentar, a variável de request_id deve ser propagada aos logs. Se a resposta precisa incluir resultado, não bloqueie a conexão por uma ação física longa; persista os dados e responda 202 quando o contrato permitir.
Variáveis temporais e de calendário
Um gatilho temporal pode expor horário agendado, deslocamento, evento de calendário e atributos. A automação pode calcular atraso entre previsto e real e descartar execução tardia. Em calendários, dados como summary e description são texto externo; não devem ser interpretados como comando sem parsing restrito. Eventos de dia inteiro, fusos e recorrências exigem tratamento. Um texto “desligar alarme” numa agenda compartilhada não deve executar serviço privilegiado apenas por conter frase. Prefira campos estruturados ou calendários dedicados. Se o sistema reinicia e recupera evento, a variável pode refletir horário original. Registre ambos.
Variáveis de contexto e usuário
Alguns eventos carregam user_id, parent_id, context_id ou origem da execução. Esses campos ajudam a distinguir ação manual, automação, serviço e usuário autenticado. Eles não existem em todos os gatilhos. Um botão físico pode não ter user_id. Uma chamada de API pode ter conta de serviço. Não use ausência como prova de anonimato malicioso nem presença como autorização suficiente. A plataforma de permissões deve decidir. O contexto serve para auditoria, prevenção de loops e personalização. Pode-se evitar que uma automação reaja a mudança produzida por ela mesma, comparando parent_id ou marcadores, mas a semântica varia por motor e versão.
Considerações de Implementação
O schema muda conforme o tipo de gatilho
Não existe conjunto universal. trigger.to_state funciona em estado, mas não em horário. payload_json existe em MQTT se o corpo é JSON válido. Webhook possui estrutura própria. Templates compartilhados precisam testar campos com is defined, default e checagem de tipo. Um default não deve transformar erro em permissão. Se a ação exige dado, falhe de forma visível e registre. Documente exemplos reais de cada objeto. Atualizações de plataforma ou integração podem alterar. Testes automatizados com fixtures reduzem regressão. Um blueprint deve declarar quais plataformas aceita e não fingir compatibilidade universal.
Dados externos precisam ser tratados como não confiáveis
Payload, query, texto de calendário e eventos de integrações podem conter valores inesperados ou maliciosos. Valide tipo, faixa, comprimento e enumeração. Faça escape ao produzir mensagens ou HTML. Nunca use eval. Não construa chamada arbitrária de serviço a partir de payload. Separe autenticação e lógica. Para uma automação que ajusta temperatura, aceite apenas números de 16–30 °C e zonas conhecidas. Rejeite o restante. Registre event_id e motivo sem gravar segredos. O fato de o dado estar numa variável interna não o torna seguro.
Snapshot do gatilho e estado atual respondem perguntas diferentes
A variável preserva o que ocorreu. A consulta atual mostra o que existe agora. Em uma notificação de porta, o snapshot explica a abertura. Se a mensagem demora 2 min e a porta já fechou, pode ser útil dizer “abriu e já está fechada”. Para uma ação de segurança, valide o estado atual antes. Em automações com delay ou fila, a diferença cresce. Capturar variáveis no início evita que templates tardios leiam objetos alterados. O desenho deve decidir conscientemente qual tempo é relevante.
Logs devem preservar contexto sem vazar dados sensíveis
Variáveis ajudam no diagnóstico, mas payloads podem conter tokens, localização, nomes e conteúdo pessoal. Registre apenas campos necessários. Redija Authorization, cookies e segredos. Defina retenção. Use request_id, trigger_id, entity_id e status para correlação. Em traces exportados, aplique o mesmo cuidado. Um dump completo é conveniente e arriscado. A observabilidade precisa equilibrar utilidade e privacidade. Em residências, histórico de presença e acesso merece proteção equivalente a outros dados pessoais.