Saltar al contenido

Hogar conectado · Visualización 3D en tiempo real

Gemelo digital 3D de una vivienda

El gemelo convierte el plano de la casa en la pantalla principal de la domótica: se gira con el dedo, se toca una estancia o una lámpara y responde. La cadena que lo fabrica es reproducible, así que cada cambio en el plano se regenera y se verifica con un script.

Tipo
Producto propio
Sector
Hogar conectado
Solución
Visualización 3D en tiempo real
Periodo
Desde agosto de 2026
Estado
En producción Versión 2.15.1 en el panel de la casa
Render isométrico de la planta 0 de la vivienda modelada, sin techo, con salón, cocina, dormitorios, baños y terraza amueblados.

Resumen ejecutivo

Gemelo 3D navegable de una vivienda dentro de Home Assistant: del plano de Sweet Home 3D a un GLB ligero que muestra luces, energía y estancias en vivo.

El plano se dibuja en Sweet Home 3D. Un script en Python extrae del archivo las estancias, los muros, las lámparas y las plantas, y Blender, ejecutado sin interfaz desde Python, convierte la exportación OBJ en un GLB comprimido con Draco y con los objetos nombrados para poder tocarlos. Una tarjeta propia para Lovelace, hecha con three.js, carga ese modelo en la tablet de pared: enciende las lámparas que están encendidas, abre el detalle de cada estancia, muestra el flujo de energía de los paneles a la batería y permite elegir qué estancias limpia la aspiradora.

El reto

  1. La exportación de Sweet Home 3D trae unas 675.000 caras en 1.281 objetos anónimos: se ve bien en un PC, pero no en una tablet, y un clic no distingue la cocina de una maceta.

  2. Reducir polígonos por igual destroza las esquinas de la arquitectura, que es justo lo que hace reconocible una casa, para ahorrar muy poco.

  3. Dentro de Lovelace la tarjeta se desconecta y reconecta con cada cambio de vista, y el navegador solo concede unos 16 contextos WebGL antes de pintar en negro.

  4. Y el panel tiene que arrancar sin internet y sin que la tablet descargue la librería 3D en los paneles que no la usan.

La solución

Una cadena de scripts en Python y Blender que convierte el plano en un GLB con un convenio de nombres (HAB_ para estancias, LUZ_ para lámparas, NIVEL_ para plantas) y un verificador que reabre el archivo generado y comprueba 13 invariantes. La tarjeta three.js usa esos nombres para enlazar cada objeto con su entidad de Home Assistant, con la librería incluida en el propio servidor.

Funcionalidades

Qué hace, pantalla a pantalla

Render isométrico de la planta -1 con garaje, gimnasio, sala de billar, trasteros y la zona de piscina del modelo.

01

Plano navegable por plantas

La casa se gira, se acerca y se mira por dentro. Las plantas superiores se ocultan para ver las inferiores, se pueden mostrar varias a la vez y cada dispositivo recuerda su selección con botones de icono en la barra.

  • Estancias y lámparas con estado

    Tocar el suelo de una estancia abre su detalle en Home Assistant. Las lámparas encendidas brillan con un emisivo cálido y al tocarlas se encienden o apagan. Solo se dibujan las que están asociadas a una entidad real.

  • Energía sobre el plano

    Los paneles solares del tejado brillan según la producción, y unas chispas recorren el camino de los paneles al inversor y del inversor a la batería, en verde al cargar y en azul al descargar.

  • Limpieza por estancias desde el plano

    En la vista de limpieza se tocan las estancias del plano para elegir dónde pasa la aspiradora; quedan marcadas en verde con borde punteado, y desde ahí se lanza, se pausa o se manda a la base.

  • Calidad progresiva

    Mientras se gira, el render es directo para seguir el dedo. Al soltar se promedian entre 12 y 32 fotogramas desplazados con una secuencia de Halton, con oclusión ambiental y sombras suaves, y la calidad se ajusta según el dispositivo.

  • Muebles realistas sustitutos

    Los muebles más visibles se sustituyen por modelos CC0 de Poly Haven colocados en la caja exacta del original. Un script de Blender los reduce, los apoya en el suelo y los deja listos para la tablet.

Cómo funciona

Del plano a la tablet

  1. Plano en Sweet Home 3D

    La vivienda se modela con estancias, muros, muebles y lámparas en varias plantas. Es el único archivo que se edita a mano.

  2. Datos de la casa

    Un script en Python lee el Home.xml del archivo y genera un JSON con estancias, lámparas, niveles y la fórmula para pasar de centímetros con Y hacia el sur a metros con Y hacia arriba.

  3. Exportación OBJ

    El exportador de Sweet Home 3D coloca cada mueble con su rotación, escala y texturas; no se reimplementa porque es la parte más delicada.

  4. Conversión en Blender

    Blender sin interfaz clasifica materiales y cristales, reduce polígonos de forma desigual, renombra por convenio, fusiona por material y exporta a GLB con Draco.

  5. Verificación

    Un segundo script reabre el GLB escrito en disco y comprueba 13 invariantes, como materiales opacos, nombres y posiciones de estancias y lámparas.

  6. Tarjeta en Lovelace

    La tarjeta three.js carga el modelo bajo demanda, enlaza cada objeto con su entidad de Home Assistant y se actualiza con cada cambio de estado.

Arquitectura

Cómo está construido

Plano · gemelo-digital-3d 5 capas · 15 piezas
  1. Modelado

    • Sweet Home 3D (plano por plantas)
    • Exportador OBJ con texturas
    • De Modelado a Procesado: Home.xml y OBJ
  2. Procesado

    • Extracción de datos en Python desde Home.xml
    • Blender headless con scripts en Python
    • Verificador de 13 invariantes
    • Generador de texturas periódicas por FFT
    • De Procesado a Artefactos: GLB verificado y JSON
  3. Artefactos

    • casa.glb con compresión Draco
    • casa_datos.json con estancias, lámparas y niveles
    • Muebles sustitutos en GLB
    • De Artefactos a Visor: carga bajo demanda
  4. Visor

    • Tarjeta Lovelace propia con three.js r169 incluido en el servidor
    • GLTFLoader y DRACOLoader
    • Render progresivo con GTAO y bloom
    • Perfiles de calidad alta, media y baja
    • De Datos en vivo a Visor: estados de Home Assistant
    • De Visor a Datos en vivo: encender, limpiar, abrir detalle
  5. Datos en vivo

    • Home Assistant (luces, energía, aspiradora)
    • Sensores solares publicados por MQTT

Tecnologías

Stack verificado en el código

Interfaz

  • three.js

Backend

  • Python

IoT, domótica y 3D

  • Sweet Home 3D
  • Blender
  • Home Assistant
  • glTF / GLB

Calidad

  • pytest

Ingeniería

Cómo se planteó y se construyó

  1. Cadena de producción (agosto de 2026)

    En agosto de 2026 se monta la cadena completa: extracción de datos del plano, conversión en Blender con reducción desigual de polígonos y Draco, convenio de nombres y verificador. La primera tarjeta carga el modelo en Lovelace con estancias y lámparas que se pueden tocar.

  2. Interacción y plantas (principios de octubre de 2026)

    La tarjeta gana control de aparatos desde el plano, botones de icono para mostrar varias plantas a la vez y la corrección de objetos que se veían duplicados por compartir material con la chimenea del salón.

  3. Energía y realismo (mediados de octubre de 2026)

    Llegan los paneles solares sobre el tejado con brillo según la producción y el flujo de energía hacia el inversor y la batería. El render pasa a ser progresivo y los muebles más visibles se sustituyen por modelos CC0.

  4. Limpieza y versión 2.15 (finales de octubre de 2026)

    La vista de limpieza permite elegir estancias en el plano para la aspiradora. El 25 de octubre se despliega la versión 2.15.1 con un estilo visual nuevo y una portada renderizada en Cycles.

Retos técnicos resueltos

Reducir el modelo para una tablet sin estropear la arquitectura.
Reparto desigual: muros, suelos y objetos pequeños solo pasan por disolución planar, que no mueve ningún vértice de la silueta; solo los muebles pesados colapsan aristas hasta un presupuesto. Los cristales se detectan por la opacidad del material con un umbral de 0,9.
Clics que acababan en estancias ocultas al cambiar de planta.
El raycaster de three.js r169 comprueba capas pero no visibilidad. La tarjeta descarta a mano los impactos sobre objetos ocultos o con algún padre oculto, y clona el material por malla para que resaltar una estancia no encienda todas las que lo comparten.
Agotamiento de contextos WebGL al cambiar de vista en Lovelace.
Al desconectarse, la tarjeta para el bucle y programa su destrucción para unos segundos después; si vuelve antes, se cancela y no hay que reconstruir la escena. Un guardarraíl ignora los tamaños de 0×0 que llegan con la vista oculta.
No penalizar a la tablet de pared ni depender de internet.
Los recursos de Lovelace son globales, así que three.js (1,3 MB) se importa de forma dinámica solo cuando se pinta la tarjeta. La librería y el decodificador Draco se sirven desde el propio Home Assistant.

Galería

Más pantallas

Resultados

Lo que se ha medido

Cada cifra lleva su fuente y su fecha. Lo que no se ha medido va aparte, como potencial.

  • 3,1 MB

    de modelo GLB a partir de 54 MB de OBJ exportado

    Cifras de referencia de la cadena en scripts/casa3d/LEEME.md (commit d7d746c) · 2026-08

  • 411

    llamadas de dibujado frente a las 1.281 mallas originales

    Cifras de referencia de la cadena en scripts/casa3d/LEEME.md (commit d7d746c) · 2026-08

Triángulos del modelo antes y después de la conversión

Número de triángulos de la exportación OBJ de Sweet Home 3D y del GLB que carga la tablet tras la reducción desigual en Blender.

Triángulos: de 629.246 en OBJ exportado a 286.355 en GLB para la tablet.

Fuente: scripts/casa3d/LEEME.md, cifras de referencia (commit d7d746c) · Datos a 2026-08-09 · Con el parámetro de presupuesto a 600 la cadena baja a unos 216.000 triángulos para tablets más lentas.

Ver los datos en tabla
Triángulos del modelo antes y después de la conversión
Periodo Triángulos
OBJ exportado 629.246
GLB para la tablet 286.355

Potencial · sin medición propia

  • Sin internet

    el panel 3D carga y funciona con la librería servida desde la propia casa

Cronología

Cómo ha evolucionado

  1. Cadena Sweet Home 3D, Blender y GLB con verificador, y primera tarjeta en Lovelace.

  2. Energía solar y render progresivo sobre el plano 3D.

  3. Limpieza por estancias y versión 2.15.1 desplegada en el panel.

Proyectos relacionados

Más trabajo en esta línea

Ver todos los proyectos
  • Producto propio En producción

    Plataforma domótica sobre Home Assistant

    Hogar conectado · Domótica e IoT

    Domótica de una vivienda sobre Home Assistant: presencia por habitación con radar y Bluetooth, Zigbee, Shelly y avisos de lo que falla en silencio.

    • Home Assistant
    • ESPHome
    • ESP32
    • Zigbee2MQTT
  • Diseño de producto · simulación Portada de la landing de Smart Sun con el titular «Tu casa, ahora piensa con el sol» y un panel de energía solar con producción, consumo, batería y flujo hacia termo, coche y clima.

    Laboratorio I+D Prototipo

    Smart Sun AI, gestión del autoconsumo solar

    Energía solar residencial · Monitorización y gestión de autoconsumo

    Producto de laboratorio para el autoconsumo solar: la medida y las alertas funcionan en una vivienda; el optimizador que decide está en fase de diseño.

    • Python
    • MQTT (Mosquitto)
    • Home Assistant
    • three.js
  • Producto propio En producción

    Jarvis, asistente de voz para el hogar

    Hogar conectado · Asistente de voz con IA

    Asistente de voz para una casa con Home Assistant: palabra de activación propia, órdenes resueltas en código y cuatro proveedores de LLM con respaldo.

    • Python
    • FastAPI
    • HTMX
    • PWA

Hablemos

¿Necesitas desarrollar una solución similar?

Cuéntanos el problema. Te respondemos con un planteamiento claro: qué haríamos, en cuánto tiempo y con qué entregables.