Patrones y buenas prácticas
This content is not available in your language yet.
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";}