Exemplos Praticos
Receitas prontas combinando varios endpoints da API. Adapte ao seu stack.
1. Sincronizar dashboard externo
Mostre o estado de todas as entidades do usuário num painel próprio.
import os, requests
BASE = "https://portal.unicontrol.me/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['PORTAL_TOKEN']}"}
# Snapshot inicial
states = requests.get(f"{BASE}/entities/states", headers=HEADERS).json()
for s in states:
print(f"{s['entity_id']}: {s['state']}")
# Para atualizacoes em tempo real, conecte ao WebSocket (ver /integrador/websocket)
2. Acionar luz a partir de um sistema legado
Seu ERP detectou que o turno acabou — apague tudo na loja.
#!/bin/bash
TOKEN="pat_..."
ORG="org_loja_centro"
for entity in light.salao light.deposito switch.aviso_neon; do
domain="${entity%%.*}"
curl -s -X POST "https://portal.unicontrol.me/v1/service/$domain/turn_off" \
-H "Authorization: Bearer $TOKEN" \
-H "X-Organization-Id: $ORG" \
-H "Content-Type: application/json" \
-d "{\"entity_id\": \"$entity\"}"
done
3. Disparar automação por webhook do GitHub
Configure um webhook do GitHub apontando para a URL de webhook de uma automação. Quando alguem abrir uma issue, a automação envia uma notificação no Aplicativo Móvel.
- No Portal, crie automação com gatilho Webhook e copie a URL.
- No GitHub, adicione webhook em Settings → Webhooks com
application/json.
- Pronto — o body do GitHub fica disponível em
{{ trigger.json }} nas ações.
4. Relatório diario de consumo (histórico)
from datetime import datetime, timedelta
import requests, os
BASE = "https://portal.unicontrol.me/v1"
TOKEN = os.environ["PORTAL_TOKEN"]
end = datetime.utcnow()
start = end - timedelta(days=1)
resp = requests.get(
f"{BASE}/history",
params={
"start": start.isoformat() + "Z",
"end": end.isoformat() + "Z",
"entity_id": "sensor.consumo_energia"
},
headers={"Authorization": f"Bearer {TOKEN}"}
)
pontos = resp.json().get("sensor.consumo_energia", [])
print(f"{len(pontos)} amostras nas ultimas 24h")
5. Bot do Telegram que liga a luz
# pip install python-telegram-bot requests
import os, requests
from telegram.ext import Application, CommandHandler
PORTAL = "https://portal.unicontrol.me/v1"
HEADERS = {"Authorization": f"Bearer {os.environ['PORTAL_TOKEN']}"}
async def luz_on(update, _):
requests.post(
f"{PORTAL}/service/light/turn_on",
json={"entity_id": "light.sala"},
headers=HEADERS,
)
await update.message.reply_text("Luz da sala ligada")
app = Application.builder().token(os.environ["TELEGRAM_TOKEN"]).build()
app.add_handler(CommandHandler("luz_on", luz_on))
app.run_polling()
6. n8n / Zapier / Make
Configure um nodo HTTP request com:
- Method:
POST
- URL:
https://portal.unicontrol.me/v1/service/{domain}/{service}
- Headers:
Authorization: Bearer pat_...
- Body (JSON):
{ "entity_id": "...", "data": { ... } }
Para receber eventos do Portal, exponha um endpoint no n8n/Zapier e configure uma automação com ação Chamar URL apontando para ele.
7. Multi-tenant SaaS sobre o Portal
Você esta construindo um SaaS que opera sobre varias contas Portal. Padrão recomendado:
- Cada cliente final gera um PAT e cola na sua aplicação.
- Cada cliente seleciona qual organização do Portal usar.
- Sua aplicação armazena
{ user_id, portal_token, portal_org_id }.
- Cada chamada usa esses três valores nos headers.
function portalRequest(client: ClientCreds, path: string, init: RequestInit = {}) {
return fetch(`https://portal.unicontrol.me/v1${path}`, {
...init,
headers: {
...init.headers,
"Authorization": `Bearer ${client.portal_token}`,
"X-Organization-Id": client.portal_org_id,
},
});
}
Eduque seus usuários a revogar o token no Portal quando descontratarem sua plataforma — isso garante que você perde o acesso imediatamente.