From 5a64e0897fe1621636445cdfa504beb56630f7d0 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?PontualTech=20/=20Karl=C3=A3o?= Date: Sun, 10 May 2026 18:34:02 -0300 Subject: [PATCH] =?UTF-8?q?feat(iot):=20controle=20Smart=20Life/Tuya=20?= =?UTF-8?q?=E2=80=94=20Casa=20do=20Barco=20v1.12.0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Servidor (proxy assinado): - server/src/tuya.js: cliente Tuya OpenAPI com HMAC-SHA256 + token cache (2h TTL, retry 1x em token expirado), helpers categoryLabel - 3 endpoints novos em server/src/index.js (todos requireAuth): * GET /api/iot/devices → lista devices da conta Smart Life * GET /api/iot/status/:deviceId → DPs (data points) atuais * POST /api/iot/command/:deviceId → envia comandos {code,value} - Audit log via db.audit('iot_command', ...) pra histórico de toggles - 503 graceful quando TUYA_ACCESS_ID/SECRET ausentes Client (UI): - Card 🏠 Casa do Barco em Arquivo (após Bluetooth, antes Raymarine) - Modal "Adicionar dispositivo" lista devices da conta Smart Life, permite escolher quais aparecem no Shivão (multi-select via toque) - Cards por device com ícone por categoria (cz=tomada, dj=lâmpada, fs=ventilador, kt=ar-cond, sd=robô, etc.) + toggle ON/OFF + status online/offline + tempo desde último ping - Toggle optimistic UI: marca novo estado imediato, reverte se falhar - Polling 10s pra sync de status, pausa em background (economiza Starlink + bateria) - Backoff: 3 falhas consec → marca offline, retry 30s - state.smartDevices[] persistido no localStorage (mesmo padrão btDevices) Setup (admin, 1x): - Karlão precisa criar projeto em iot.tuya.com (5 min, gratuito) e adicionar TUYA_ACCESS_ID + TUYA_ACCESS_SECRET no env Coolify - Documentação completa no .env.example com passo a passo - Sem credenciais: card mostra "⚙ Tuya não configurado" Bumps: - APP_VERSION 1.11.0 → 1.12.0 - sw.js VERSION shivao-v1.11.0 → shivao-v1.12.0 - mobile/package.json + build.gradle (versionCode 32→33) - LATEST_APK_URL atualizado pro release v1.12.0 Fix gitignore: - .env.example em pastas nested (server/.env.example) estava bloqueado por **/.env.* — adicionado !**/.env.example pra liberar. Co-Authored-By: Claude Opus 4.7 (1M context) --- .gitignore | 1 + app/diario-bordo.html | 252 +++++++++++++++++++++- mobile/android/app/build.gradle | 4 +- mobile/android/app/capacitor.build.gradle | 1 + mobile/android/capacitor.settings.gradle | 3 + mobile/package.json | 2 +- server/.env.example | 81 +++++++ server/public/index.html | 252 +++++++++++++++++++++- server/public/sw.js | 2 +- server/src/index.js | 56 ++++- server/src/tuya.js | 165 ++++++++++++++ 11 files changed, 810 insertions(+), 9 deletions(-) create mode 100644 server/.env.example create mode 100644 server/src/tuya.js diff --git a/.gitignore b/.gitignore index 3c55521..5a7c8d1 100644 --- a/.gitignore +++ b/.gitignore @@ -15,6 +15,7 @@ server/data/ !.env.example **/.env **/.env.* +!**/.env.example # OS / IDE .DS_Store diff --git a/app/diario-bordo.html b/app/diario-bordo.html index da6cfb0..fa0fc43 100644 --- a/app/diario-bordo.html +++ b/app/diario-bordo.html @@ -1988,6 +1988,30 @@ Marque zonas de proibição (alarme alto) ou atenção (aviso suave). Detecção
Limitações: iOS Safari não suporta Web Bluetooth. APK Android usa plugin nativo. BMS proprietários (Victron, JBD) podem aparecer mas não expor Battery Service padrão.
+ +
+
🏠 Casa do Barco · Dispositivos Smart Life
+
Controle lâmpadas, tomadas, ventiladores e qualquer dispositivo do app Smart Life (Tuya / Alexa via WiFi 2.4 GHz). Funciona com Starlink ou qualquer internet do barco.
+
Verificando configuração...
+ +
+
Setup (1x): admin precisa configurar credenciais Tuya no servidor (ver .env.example). Depois disso, qualquer dispositivo no Smart Life aparece aqui automático.
+
+ + + +
⚓ Instrumentos Raymarine (gateway NMEA 2000)
@@ -2614,7 +2638,7 @@ Hora: {HORA}