Estrategia Q4 — testing de smart home (v1)¶
Primera síntesis de Q4 + el gap "digital twin" registrado por el usuario. Cinco capas de testing, de la más barata a la más profunda, aplicadas a HA configs + Z2M + ESPHome. La pieza central: el twin del mini-PC sirve como integration test environment, no como replica de prod.
Contexto¶
Sin tests, ni el agente AI ni el humano pueden confiar en un upgrade o un cambio. Con tests, "no tinkering" deja de depender de la fe en que las cosas funcionen tras un cambio. Esta página define qué tests valen la pena en cada nivel y cómo se ejecutan en el setup propuesto.
Contenido¶
Las 5 capas¶
Capa 1 — Static checks (yamllint, prek, ha check-config)¶
- Costo: gratis, segundos.
- Cubre: errores sintácticos, indentación, referencias rotas en YAML.
- Cuándo corre:
pre-commithook + CI en cada push.
Capa 2 — Unit tests de automations (pytest + hass-mock)¶
- Costo: medio (requiere armar fixtures + mocks).
- Cubre: ¿la automation se dispara cuando esperamos? ¿la acción correcta?
- Cuándo corre: CI en cada PR.
- Stack: pytest +
hass-mocko pytest-homeassistant-custom-component.
Ejemplo conceptual:
async def test_motion_light_triggers(hass: HomeAssistant):
# arrange: setup mock state
hass.states.async_set("binary_sensor.motion_cocina", "off")
hass.states.async_set("light.cocina", "off")
# act: trigger
hass.states.async_set("binary_sensor.motion_cocina", "on")
await hass.async_block_till_done()
# assert
assert hass.states.get("light.cocina").state == "on"
Capa 3 — Integration tests en twin (MQTT injection + real Z2M sintético)¶
- Costo: alto (requiere armar el twin).
- Cubre: ¿el stack completo (Z2M → MQTT → HA → automation → light command) funciona end-to-end?
- Cuándo corre: trigger manual o agente AI antes de promover cambios al essentials.
- Stack: mini-PC con HA Container + Mosquitto separado del prod + script que publica MQTT messages sintéticos.
Ver gap "Digital twin via MQTT injection" en gaps.md (página por crear).
Capa 4 — Smoke tests post-deploy¶
- Costo: bajo (script bash + curl).
- Cubre: ¿los essentials siguen vivos tras un cambio?
- Cuándo corre: cron cada N minutos + tras cada deploy.
- Stack: Gatus + scripts custom que prueban "luz cocina toggleable", "sensor entrada reporta", etc.
Capa 5 — Multi-agent review (Dan Malone pattern)¶
- Costo: medio (1 hora de tokens + tiempo del usuario para revisar reports).
- Cubre: dead code, security, anti-patterns, duplicate IDs, entity mismatches.
- Cuándo corre: quarterly (cron mensual o vía agente).
- Stack: 5 agentes paralelos con prompts especializados. Ver ../sources/dan-malone-ai-patterns-ha.
Mapping a la trayectoria del agente¶
Cruzar con q10-ai-tooling-strategy-v1 mes-por-mes:
| Mes | Tests obligatorios | Tests opcionales |
|---|---|---|
| 1 | Capa 1 + Capa 4 (smoke tests básicos) | — |
| 2-3 | + Capa 2 unit tests | Capa 5 review manual |
| 4-6 | + Capa 3 twin integration | Capa 5 quarterly review |
| 6+ | Todas | — |
Pipeline CI propuesta (GitHub Actions)¶
name: HA tests
on: [push, pull_request]
jobs:
static:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- run: |
yamllint .
prek run --all-files
# ha check-config requires ha binary; skipped or via docker
unit:
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v4
- uses: actions/setup-python@v5
- run: |
pip install pytest pytest-homeassistant-custom-component
pytest tests/
Capa 3 (integration) NO va en CI público — corre en el mini-PC porque requiere el twin físico.
Aplicación específica a Zigbee¶
Las automations que dependen de devices Zigbee son las más frágiles post-upgrade. Cobertura recomendada:
- Snapshot tests del state esperado tras cada upgrade (capa 2).
- Integration test con MQTT injection que reproduce "device X reporta off, automation Y debería disparar Z" (capa 3).
- Smoke test post-upgrade que pinguea los 5-10 devices más críticos vía MQTT o HA REST API (capa 4).
Aplicación específica a ESPHome¶
- OTA testing: antes de flashear firmware nuevo, build local + check con
esphome compile(esto ya lo hace ESPHome CLI; agregar a CI). - Snapshot del state esperado: para devices custom, después del flash el agent verifica que las entities esperadas aparecen en HA.
- Rollback automático: ESPHome ya soporta dual-bank firmware; si el device no reporta en N min post-flash, rollback automático.
Relaciones¶
- Implementa: Q4 (testing) v1.
- Habilita: Q10 (el agente usa estos tests como gates antes de promover cambios).
- Resuelve parcialmente: gap "digital twin" (capa 3).
- Apoya: ha-upgrade-reliability-strategy (smoke tests post-upgrade).
Citas / evidencia¶
- Stack canónico pytest + prek + snapshot — ../sources/ha-developer-testing-docs.
- Multi-agent review pattern — ../sources/dan-malone-ai-patterns-ha.
Abierto / gaps¶
- Page concreta
techniques/digital-twin-via-mqtt-injection(capa 3 detallada). - Patrón concreto de hass-mock + pytest aplicado a YAML real del usuario (no del HA core).
- Repo público de tests-de-automations-de-usuario para usar como referencia.
- Recorder replay testing — usar 7 días de history del Yellow como integration test temporal.