# PROJECT — Boiler Tuya Energy (Dublin) Dashboard **somente leitura** do interruptor Tuya do boiler. Consome logs ON/OFF da nuvem Tuya, grava SQLite e estima kWh/€. **Não mede watts** (o hardware CB01-SBL não tem sensor). **Não liga/desliga** o relé. **Atualizado:** 2026-09-08 **URL:** https://boiler.myvexx.com/ **Fallback:** https://r630.myvexx.com/boiler/ **Separado do R630:** Tapo P110 continua em https://r630.myvexx.com/ (VM500 :8787) ## O que o sistema faz - Sincroniza `switch_1` (status + logs) da Tuya Cloud EU - Guarda eventos em SQLite (`switch_events`) - Relatório por intervalo de datas (kWh e €) - Export CSV - Tarifa Electric Ireland ValueReward 4%: **€0,3652/kWh** (fatura 23 Jul 2026, 0,3490 ex. IVA × 0,96 × 1,09) - Potência assumida da resistência: **2,3 kW** - Poll a cada 5 minutos ## Fórmula `kWh = 2,3 kW × (minutos ON / 60)` `€ = kWh × 0,3652` Termóstato interno do boiler pode reduzir o consumo real. ## Stack / onde corre | Item | Valor | |---|---| | Host | BIG CT **120** `web-traefik` | | Pasta live | `/opt/boiler-energy` | | Serviço | `boiler-energy.service` (user `boiler`) | | Porta | **8788** | | Traefik | `Host(boiler.myvexx.com)` → `http://127.0.0.1:8788` | | Túnel | `7233d455-…` **config remota** Cloudflare (`config_src: cloudflare`) | | Device Tuya | `bfaf766aa915197295qju6` · CB01-SBL · categoria `kg` | | DB | `/opt/boiler-energy/data/boiler.db` (não versionar) | Credenciais Tuya: `boiler.env` no CT120 (não no Git). Token DNS: `Infra-Network/SECRETS_CLOUDFLARE_MYVEXX.md`. ## Fora de escopo - Medição real de corrente/tensão neste interruptor - Controlo ON/OFF pelo dashboard - Alterar `/etc/network/interfaces` do Proxmox - Misturar com o Tapo do R630 ## Histórico detalhado e conectividade (2026-09-08) O SQLite preserva eventos Tuya além da janela de retenção da nuvem: - `switch_events`: transições ON/OFF normalizadas - `device_events`: log bruto com `event_id`, origem, código e valor - `event_id=1`: dispositivo online - `event_id=2`: dispositivo offline (Wi-Fi/nuvem) - `event_id=5`: comando enviado ao dispositivo - `event_id=7`: estado reportado pelo dispositivo O relatório por período contém: 1. Resumo diário: dia da semana, quantidade de ligações, minutos ON, kWh, custo, desconexões e tempo offline. 2. Cada sessão: horário ON, horário OFF, duração, consumo/custo estimado e origem. 3. Conectividade: início offline, retorno online e duração de cada queda. 4. Agregação por dia da semana. 5. CSV com linhas `dia`, `ligacao` e `desconexao`. ### Identidade de quem ligou A API Tuya **não fornece nome, email ou ID do utilizador** neste log. `event_from` permite apenas classificar a origem: | Código | Origem | |---|---| | 1 | dispositivo (inclui botão físico/estado reportado) | | 2 | app/cliente | | 3 | plataforma de terceiros/automação | | 4 | nuvem | Logo, `app/cliente` prova que veio de um cliente, mas não distingue Roger de outro membro da casa. Só é possível inferir uma pessoa se ela for a única com acesso; não é prova técnica. Backups de implantação: código e DB anteriores em `/opt/boiler-energy/*.bak-20260908-1712`.