91 lines
3.6 KiB
Markdown
91 lines
3.6 KiB
Markdown
# 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`.
|
||
|
||
## QA live 2026-09-08 (amostra 01-08 Set)
|
||
|
||
Fonte: dashboard `/api/history` de 2026-09-01 a 2026-09-08.
|
||
|
||
- 16 sessoes (ON->OFF), ~369.6 min, ~14.168 kWh, ~EUR 5.17
|
||
- 4 desconexoes / 4 reconexoes; ~28.7 min offline no periodo
|
||
- event_from: 1=dispositivo, 2=app/cliente, 3=plataforma/automacao, 4=cloud
|
||
- Tuya nao identifica a pessoa na Smart Life (sem nome/email no log)
|
||
- CSV: linhas dia, ligacao, desconexao
|
||
- Backup CT120: tuya_boiler_server.py.bak-20260908-1712, boiler.db.bak-20260908-1712
|
||
|