Patrones y buenas prácticas
Tres patrones cubren la mayoría de los artefactos. Todos usan el runtime
Undercromo.gvar.
Dashboard en vivo
Sección titulada «Dashboard en vivo»Observa varias gVar y refleja sus valores en la pantalla:
const { gvar } = window.Undercromo;
gvar.observe(["temperatura", "humedad", "estado"], (valor, clave) => { document.querySelector("#" + clave).textContent = valor;}, { immediate: true });Control
Sección titulada «Control»Un botón (o slider) que escribe una gVar, y la UI que refleja el estado real:
const boton = document.querySelector("#luz");
boton.addEventListener("click", async () => { try { await gvar.write("encender", !gvar.peek("encendido")); } catch (e) { alert("Sin permiso de control."); }});
gvar.observe("encendido", (on) => { boton.classList.toggle("activo", on === true);}, { immediate: true });Gráfica de telemetría
Sección titulada «Gráfica de telemetría»gvar.observeSeries("temperaturas", () => { const { points } = gvar.peekProjectedSeries("temperaturas", { maxPoints: 100, timeMode: "clock", }); dibujar(points);}, { immediate: true });Buenas prácticas
Sección titulada «Buenas prácticas»- Observa, no encuestes. Usa
observe/observeSeriesen vez desetIntervalconpeek. Es más eficiente y siempre estás al día. { immediate: true }para pintar de una con el valor actual al suscribirte.- Cancela lo que ya no uses.
observedevuelve una función; guárdala y llámala cuando quites ese elemento de la UI, para no acumular suscripciones. writesiempre contry/catch. Puede fallar por permisos, visibilidad o red.- Refleja el estado real, no la intención del usuario: tras un
write, deja que unobserveconfirme lo que pasó en el hardware. - Series recortadas: para gráficas usa
projectSeries/peekProjectedSeriesy supoints, nunca la posición en el arreglo. - Considera el gateway caído.
status().gatewayOnline === falsesignifica que los things no están en línea; muestra ese estado en vez de datos congelados.
const s = gvar.status();if (!s.gatewayOnline) { document.querySelector("#estado").textContent = "Dispositivo desconectado";}