> ## Documentation Index
> Fetch the complete documentation index at: https://docs.unicontrol.me/llms.txt
> Use this file to discover all available pages before exploring further.

# Templates

> Use valores dinâmicos do gatilho e das entidades em condições e ações

# Templates

Templates permitem usar **valores dinâmicos** em uma automação. Em vez de um texto fixo como "Placa detectada", você pode escrever `Placa {{ trigger.plate }} detectada`, e a notificação chega como "Placa ABC1D23 detectada".

Um template é qualquer trecho entre `{{` e `}}`. Ele é substituído pelo valor correspondente **no momento em que a automação executa**.

## Onde usar

| Lugar | Como funciona |
| - | - |
| **Ações** (notificação, serviço, evento, comando remoto) | Qualquer campo de texto aceita templates. Ex.: título, mensagem, URL do anexo, dados do serviço. |
| **Condição "Template"** | Uma comparação que precisa ser verdadeira para a automação continuar. |

> [!NOTE]
>
> Nas ações dentro de **Repetir** e **Condicional (Choose)** os templates também funcionam e enxergam os mesmos dados do gatilho.

## O que pode ir dentro de `{{ }}`

### Dados do gatilho: `trigger.<campo>`

Cada gatilho envia informações sobre o que aconteceu. Use `trigger.` seguido do nome do campo. Campos com subcampos são acessados com ponto, por exemplo `trigger.event_data.codigo`.

| Gatilho | Campos disponíveis |
| - | - |
| Todos | `trigger.trigger_type`, `trigger.trigger_id` |
| Mudança de estado | `trigger.entity_id`, `trigger.from`, `trigger.to`, `trigger.state`, `trigger.attributes.<nome>` |
| Estado numérico | `trigger.entity_id`, `trigger.value`, `trigger.state`, `trigger.attributes.<nome>` |
| Horário | `trigger.at`, `trigger.fired_at` |
| Placa detectada | `trigger.plate`, `trigger.normalized_plate`, `trigger.confidence`, `trigger.camera_entity_id`, `trigger.snapshot_url`, `trigger.detected_at` |
| Tag | `trigger.tag_id`, `trigger.device_id` |
| Evento | `trigger.event_type`, `trigger.event_data.<campo>` |
| MQTT | `trigger.topic`, `trigger.payload` |
| Webhook | `trigger.webhook_id`, `trigger.data.<campo>` |
| Serviço chamado | `trigger.domain`, `trigger.service`, `trigger.data.<campo>` |
| Botão de notificação | `trigger.action` |

### Estado de uma entidade: `<entity_id>.state`

Escreva o `entity_id` da entidade seguido de `.state`. O valor é o estado **atual** no momento da execução.

```
{{ sensor.temperatura_sala.state }}
{{ light.cozinha.state }}
```

### Atributo de uma entidade: `<entity_id>.attributes.<nome>`

```
{{ sensor.temperatura_sala.attributes.unit_of_measurement }}
{{ light.cozinha.attributes.brightness }}
```

> [!TIP]
>
> Para descobrir o `entity_id` e os atributos de uma entidade, abra a entidade no Portal e veja os detalhes.

### Data e hora atual: `now`

| Template | Resultado |
| - | - |
| `{{ now.time }}` | Hora atual, ex.: `14:32:05` |
| `{{ now.date }}` | Data atual, ex.: `2026-10-24` |
| `{{ now }}` | Data e hora completas (ISO) |

### Valor padrão: `| padrão`

Se o valor não existir (ou estiver vazio), o template vira texto vazio. Para mostrar outra coisa, use `|` seguido do valor padrão:

```
{{ trigger.attributes.friendly_name | 'Dispositivo desconhecido' }}
```

## Exemplos em ações

> **Notificar a placa detectada com a foto**
>
> Gatilho: **Placa detectada**. Ação: **Enviar notificação**.
>
> * **Título:** `Portaria`
> * **Mensagem:** `Placa {{ trigger.plate }} detectada às {{ now.time }}`
> * **URL do attachment:** `{{ trigger.snapshot_url }}`
>
> Resultado: "Placa ABC1D23 detectada às 14:32:05", com a foto da câmera anexada.

> **Avisar qual porta abriu**
>
> Gatilho: **Mudança de estado** em várias portas, com `to: on`. Ação: **Enviar notificação**.
>
> * **Mensagem:** `{{ trigger.attributes.friendly_name }} foi aberta`
>
> Resultado: "Porta da garagem foi aberta".

> **Informar a temperatura em uma notificação**
>
> * **Mensagem:** `Sala: {{ sensor.temperatura_sala.state }}{{ sensor.temperatura_sala.attributes.unit_of_measurement }}`
>
> Resultado: "Sala: 23.5°C".

> **Usar um valor do gatilho nos dados de um serviço**
>
> Gatilho: **Estado numérico** de um sensor de luminosidade. Ação: **Chamar serviço** `light.turn_on`, com os dados em JSON:
>
> ```json theme={null}
> { "brightness": "{{ trigger.value }}" }
> ```
>
> Quando o campo contém **somente** um template, o tipo original é mantido (número, verdadeiro/falso). Por isso `brightness` chega como número, e não como texto.

## Condição Template

A condição template compara um valor com outro. Formato:

```
{{ valor operador comparação }}
```

Operadores aceitos: `==` (igual), `!=` (diferente), `>`, `<`, `>=`, `<=`.

* `==` e `!=` comparam o texto exatamente (diferencia maiúsculas de minúsculas).
* `>`, `<`, `>=`, `<=` só funcionam com números. Se algum dos lados não for número, a condição é falsa.
* Textos podem ser escritos com aspas simples ou duplas: `'on'` ou `"on"`.
* Sem operador, a condição é verdadeira quando o valor for `on`, `true`, `yes` ou `1`.

| Exemplo | Quando é verdadeira |
| - | - |
| `{{ trigger.plate == 'ABC1D23' }}` | A placa lida é ABC1D23 |
| `{{ trigger.confidence >= 0.9 }}` | A leitura tem confiança de 90% ou mais |
| `{{ sensor.temperatura_sala.state > 25 }}` | A sala está acima de 25 graus |
| `{{ light.sala.state != 'on' }}` | A luz da sala não está ligada |
| `{{ binary_sensor.porta.state }}` | A porta está aberta (`on`) |
| `{{ trigger.event_data.codigo == 42 }}` | O evento chegou com código 42 |

> [!WARNING]
>
> Cada condição template aceita **uma** comparação. Para combinar várias (`e`/`ou`), adicione mais de uma condição ou use os operadores lógicos **AND/OR/NOT**.

## Limitações

* Não há lógica dentro do template (`if`, `for`, cálculos ou filtros). Para decidir entre ações diferentes, use a ação **Condicional (Choose)**.
* Se a entidade nunca enviou um estado desde que o servidor de automações iniciou, ela ainda não é conhecida: o template vira texto vazio e a condição é falsa.
* Os campos de configuração (serviço, entidade alvo, tempo de atraso) aceitam templates, mas o resultado precisa ser um valor válido para aquele campo.

## Dica: descobrir o que o gatilho enviou

Abra o [histórico da automação](https://docs.unicontrol.me/automacoes/historico-e-traces.md) e veja o passo **trigger** de uma execução. Ali aparecem todos os campos que o gatilho enviou, e cada um pode ser usado como `trigger.<campo>`.

No editor de automações, os blocos de condição e de ação têm o link **"Usar valores dinâmicos (templates)"**, que lista as variáveis do gatilho escolhido e exemplos prontos para copiar.


This documentation is built and hosted on [Mintlify](https://mintlify.com), a developer documentation platform.