Ir para o conteúdo

46 — Integração cisterna HAOS (MonitorSonoff) ↔ Issabel/Asterisk

Checklist do que falta fazer neste repositório (lorentz-vps-stack) para o Home Assistant OS (MonitorSonoff / cisterna) conseguir tocar ramais Issabel quando a boia pede água.

Consumidor: projeto MonitorSonoff — pacote docs/haos/lab_boia_voip.yaml, secrets cisterna_asterisk_*, doc docs/HA-OS-BOIA-VOIP.md.

Estado actual (2026-09-24): o HAOS já alerta o supervisor via NVoIP (chamada) + Zenvia (SMS) em toda boia ON. Asterisk/Issabel é o caminho local (ramais lab / softphone), ainda não operacional porque este stack não tem ARI e o AMI não está aberto ao Pi.


Contexto

Lado Papel
HAOS (Pi) Detecta boia switch.10026e6fe0_power → dispara alerta
NVoIP + Zenvia Já em produção no HAOS (telemóvel do supervisor)
Issabel nesta VPS (2.25.92.168 / orbitall.app) Tocar softphones SIP/1001–1005 (lab)
3CX homelab.my3cx.com.br Só UI (telefonista/chat). Ramal 1000 é 3CX — não existe no Asterisk Issabel

Placeholders que o MonitorSonoff não deve usar (incorrectos):

https://orbitall.app:8088/...PJSIP/1000   ❌

Formato alvo (após ARI):

http://2.25.92.168:8088/ari/channels?endpoint=SIP/1001&extension=s&context=from-internal&priority=1&callerId=Cisterna&timeout=45

Gap no stack (o que falta aqui)

Item Situação no lorentz-vps-stack Acção
HTTP Asterisk :8088 Existe (http_custom.conf.template, bind HTTP) Manter interno; ACL só HAOS/VPN
ARI (ari.conf + user) Ausente Provisionar (Opção A)
AMI :5038 Existe (CTI: LORENTZ_CTI_AMI_*) Estender permit ao HAOS ou Opção B
Caddy /ari Sem proxy Não publicar ARI na internet
Ramais lab SIP/1001–1005, from-internal (doc 44) Usar estes endpoints
Tronco Issabel → 3CX Não no repo Opcional (só se quiser tocar 1000/1001 3CX)

Política de portas (doc 14): não expor :8088 nem :5038 à internet.


Opção A — ARI REST (alinhada ao pacote HA actual)

O HA usa rest_command → POST /ari/channels?....

A1. Template + script de provisionamento

Criar no repo:

  1. config/templates/asterisk/ari.conf.template (exemplo):
[general]
enabled = yes
pretty = yes

[cisterna_haos]
type = user
read_only = no
password = {{CISTERNA_ARI_PASSWORD}}
  1. scripts/configure-issabel-ari-haos.sh que:
  2. gera password forte (ou lê .env: CISTERNA_ARI_USER, CISTERNA_ARI_PASSWORD)
  3. aplica o template dentro do container issabel-prod (/etc/asterisk/ari.conf ou include custom)
  4. confirma http.conf / http_custom.conf com enabled=yes, bindport=8088
  5. asterisk -rx "module reload res_ari.so" (e dependências)
  6. imprime o header Basic para colar no HAOS

  7. Variáveis em .env.example:

CISTERNA_ARI_USER=cisterna_haos
CISTERNA_ARI_PASSWORD=ChangeMe_AriCisterna!
# Rede do Pi HAOS (Tailscale / LAN / WireGuard) — firewall host
CISTERNA_HAOS_ALLOW_CIDR=100.x.y.z/32

A2. Firewall / ACL

  • Host / UFW / painel Hostinger: permitir TCP 8088 apenas do IP/CIDR do HAOS (ou interface VPN).
  • Não abrir 8088/0.0.0.0 nem mapear https://orbitall.app:8088 no Caddy.

A3. Teste na VPS

# Na VPS (ou a partir do HAOS na VPN)
curl -sS -u 'cisterna_haos:SENHA' -X POST \
  'http://127.0.0.1:8088/ari/channels?endpoint=SIP/1001&extension=s&context=from-internal&priority=1&callerId=Cisterna&timeout=45'

Esperado: softphone 1001 a tocar; HTTP 2xx com JSON de canal.

A4. Entregar ao MonitorSonoff

No HAOS /config/secrets.yaml (modelo em MonitorSonoff docs/haos/secrets.cisterna_voip):

cisterna_asterisk_ari_auth: "Basic <base64(cisterna_haos:SENHA)>"
cisterna_asterisk_ring_a_url: "http://2.25.92.168:8088/ari/channels?endpoint=SIP/1001&extension=s&context=from-internal&priority=1&callerId=Cisterna&timeout=45"
cisterna_asterisk_ring_b_url: "http://2.25.92.168:8088/ari/channels?endpoint=SIP/1002&extension=s&context=from-internal&priority=1&callerId=Cisterna&timeout=45"
  • Se o Pi chega à VPS por Tailscale, usar o IP Tailscale da VPS em vez de 2.25.92.168.
  • Activar input_boolean.cisterna_voip_asterisk no HAOS.
  • rest_command já usa verify_ssl: false (HTTP).

Opção B — AMI (já parcialmente no stack; alternativa ao ARI)

AMI já serve o LorentzCTI (scripts/configure-issabel-ami-docker.sh, permit=172.16.0.0/12).

Para o HAOS:

  1. Estender o script (ou novo configure-issabel-ami-haos.sh) com permit=<CIDR_HAOS> em manager_custom.conf.
  2. No HAOS: HACS asterisk-hass-integration → serviço asterisk.originate para SIP/1001 e SIP/1002.
  3. Adaptar lab_boia_voip.yaml (substituir rest_command ARI por serviços AMI) ou manter ARI como caminho preferido e AMI só como fallback.

Credenciais de referência no .env (não expor à internet):

  • LORENTZ_CTI_AMI_USER / LORENTZ_CTI_AMI_SECRET (ou user AMI dedicado cisterna_haos só com originate).

Softphones / destinos

Destino HA (rótulo) Endpoint Asterisk Notas
A SIP/1001 Lab homolog + WebRTC opcional (doc 14, doc 44)
B SIP/1002 Segundo agente lab
1000 / 1001 3CX — Só com tronco Issabel↔3CX (fora de âmbito até existir dialplan)

Garantir MicroSIP / Webphone registados em 1001/1002 antes do teste de aceite.


Checklist de implementação (este repo)

  • [ ] Decidir Opção A (ARI) e/ou Opção B (AMI)
  • [ ] Template ari.conf + script configure-issabel-ari-haos.sh (se A)
  • [ ] Entradas .env.example (CISTERNA_ARI_*, CISTERNA_HAOS_ALLOW_CIDR)
  • [ ] Firewall: :8088 e/ou :5038 só para CIDR do HAOS/VPN
  • [ ] Confirmar lab: peers SIP/1001–1002 registados e a tocar
  • [ ] Teste curl ARI ou originate AMI a partir da rede do Pi
  • [ ] Documentar no CHANGELOG + atualizar 33 — Checklist teste
  • [ ] Passar secrets ao MonitorSonoff e ligar cisterna_voip_asterisk

Opcional / fase 2:

  • [ ] Tronco Issabel → 3CX para ramais 1000/1001 do homelab
  • [ ] Proxy Caddy autenticado (evitar) — preferir VPN + IP privado
  • [ ] Dialplan dedicado context=cisterna-alerta em vez de from-internal + s

Critérios de aceite

  1. Softphone 1001 toca após originate a partir do HAOS (ou curl na mesma rede).
  2. Softphone 1002 toca (destino B).
  3. Porta 8088/5038 não responde a partir da internet pública (apenas ACL).
  4. Boia ON no HAOS continua a enviar NVoIP+Zenvia; com Asterisk ligado, também tocam os ramais Issabel.
  5. Falha ARI/AMI não bloqueia NVoIP (continue_on_error no pacote HA).

Referências

Doc / path Uso
14 — WebRTC / WSS HTTP 8088 interno; não expor
44 — Lab homologação Ramais 1001–1005
43 — Issabel URA Hostinger VPS 2.25.92.168
config/templates/asterisk/http_custom.conf.template bind :8088
scripts/configure-issabel-ami-docker.sh Padrão AMI CTI
MonitorSonoff docs/HA-OS-BOIA-VOIP.md Consumidor HAOS
MonitorSonoff docs/haos/lab_boia_voip.yaml Automações boia → VoIP