# HomeCore

Piloto: **https://transbook.mx/homecore/**. Conserva las cuentas, hogares y
habitaciones creados durante el desarrollo. No requiere túnel SSH para usar
el piloto. No se ha inicializado Git, conforme a lo acordado.

Implementado:

- Registro por usuario único, correo opcional y sesiones.
- Hogares, habitaciones, miembros y perfiles infantiles administrados.
- Registro y credenciales de dispositivos por habitación.
- Monitoreo de temperatura/humedad, última lectura, historial y presencia.
- WebSocket autenticado, simulador y firmware para ESP32 DevKit V1.

## Usar una ESP32

Entra como propietario al hogar y abre **Monitoreo → Agregar dispositivo**.
Asigna nombre y habitación. Guarda el UID y la clave mostrados una sola vez.
Descarga el firmware desde el enlace de instalación o desde:

https://transbook.mx/homecore/assets/HomeCoreMonitor.zip

Sigue la [guía de carga](firmware/esp32-reference/README.md). Primera prueba:
lecturas simuladas desde la ESP32, sin sensor. El dominio y CA están
preparados. Falta cargarlo en la placa física y verificarla en el hogar.
WebSocket público: `wss://transbook.mx/homecore/ws`.

Niños: solo ven dispositivos y lecturas de las habitaciones asignadas.
No pueden registrar dispositivos, cambiar claves ni pausar equipos.
Todavía no hay comandos físicos, automatizaciones o escenas.

## Servicios del piloto

```bash
sudo systemctl status homecore-database homecore-php homecore-websocket
```

Servicios persistentes de MariaDB privado, PHP-FPM exclusivo y Node, con
reinicio al fallar y arranque al reiniciar el servidor. Los datos existentes
siguen en `~/.local/share/homecore-dev` (nombre histórico). Las credenciales
separadas de PHP y transporte están en `~/.config/homecore`, fuera de htdocs.
El mantenimiento diario conserva 30 días de historial y la última muestra
de cada dispositivo. No detener database-dev.sh mientras se use el piloto.

Apache expone solo /homecore y /homecore/ws sobre el HTTPS de Transbook.
PHP-FPM usa 127.0.0.1:9074 y Node 127.0.0.1:8080. MariaDB no escucha TCP.
La página principal de Transbook sigue en su DocumentRoot existente.

## Desarrollo y pruebas

El servidor local de PHP sigue disponible con `bash deployment/scripts/dev.sh`
en `127.0.0.1:8091`. Ese proceso es para desarrollo; el piloto público usa FPM.
No iniciar un segundo WebSocket sobre la base del piloto.

```bash
python3 backend/tests/smoke.py
python3 backend/tests/accounts.py
export PATH="$HOME/.local/share/homecore-tools/node-v24.21.0-linux-x64/bin:$PATH"
npm --prefix websocket-server test
```

Las pruebas crean bases temporales que eliminan al terminar. Para navegador
móvil automatizado ver [websocket-server/README.md](websocket-server/README.md).
Los secretos de ejemplo son ficticios; el código lee variables de entorno,
no carga .env automáticamente. Las migraciones se aplican con una cuenta
DDL mediante `php backend/bin/migrate.php`.

Documentación: [API](docs/api.md), [protocolo](docs/websocket-protocol.md),
[decisiones](docs/decisions.md), [despliegue](docs/deployment-bitnami.md).

## Sensor real confirmado

Steren ARD-360 (DHT11) de cuatro patas, alimentado a 3V3, datos GPIO27
y resistencia 10 kΩ. [Guía](firmware/esp32-reference/ARD-360.md) y
[paquete de carga](https://transbook.mx/homecore/assets/HomeCoreARD360.zip).
El mismo UID/token se conserva al pasar de simulación a sensor.

Alertas de temperatura, humedad y falta de lecturas: [guía de uso y operación](docs/alerts.md).
Las configura el propietario desde cada dispositivo. La evaluación funciona
mediante `homecore-alerts.timer` aun con el navegador cerrado.
