Skip to content

Patrones y buenas prácticas

This content is not available in your language yet.

Cuatro patrones cubren la mayoría de los artefactos. Todos parten de que gVar ya está cargado cuando tu código empieza a correr.

No hay inicialización: se lee y se refresca.

setInterval(() => {
console.log("miVariable:", gVar.miVariable);
}, 500);
const claves = ["temperatura", "humedad", "estado"];
setInterval(() => {
for (const clave of claves) {
document.querySelector("#" + clave).textContent = gVar[clave] ?? "";
}
}, 500);

Un botón que escribe una gVar, y la UI que refleja el estado real:

const boton = document.querySelector("#luz");
boton.addEventListener("click", () => {
gVar.encender = !gVar.encender;
});
setInterval(() => {
boton.classList.toggle("activo", gVar.encendido === true);
}, 500);
setInterval(() => {
const proj = plotSerie("temperaturas", { maxPoints: 100, timeMode: "clock" });
if (!proj) return;
dibujar(proj.points.map((p) => p.label), proj.points.map((p) => p.y));
}, 500);
NecesidadHerramienta
Adquisición constante y fiable de datos del hardwareboardCode del thing, no el artefacto.
Registrar eventos del usuariopushData desde el artefacto.
Leer gVar y actualizar la pantallasetInterval(..., 500).
Animar entre valoresrequestAnimationFrame.
  • Relee cada 500 ms. Es el ritmo con el que la plataforma sincroniza; leer gVar es local y no genera tráfico.
  • pushData, nunca push() sobre el arreglo de una serie: el segundo pierde la marca de tiempo.
  • Series recortadas: para gráficas usa plotSerie; el eje X sale de point.label y el valor de point.y, nunca de point.x ni de la posición en el arreglo.
  • Comprueba el null de plotSerie antes de dibujar: significa que la serie todavía no tiene datos.
  • Considera el gateway caído. gVarStatus.gatewayOnline === false significa que los things no están en línea; muestra ese estado en vez de datos congelados.
setInterval(() => {
const texto = gVarStatus.gatewayOnline ? "Conectado" : "Dispositivo desconectado";
document.querySelector("#estado").textContent = texto;
}, 500);

Cuando el usuario cambia de pestaña, el navegador congela o ralentiza los timers. Un artefacto en segundo plano deja de refrescar la UI y deja de generar datos con pushData: lo que no se ejecutó, no ocurrió. La plataforma también pausa la sincronización mientras la pestaña está oculta y la retoma al volver.

Conclusión práctica: la adquisición de datos vive en el thing, no en el artefacto. Un artefacto es la interfaz, no el registrador.

AcciónQué pasa
gVar.config.avanzado.x = 2Los cambios anidados de más de un nivel no se detectan. Reasigna el objeto completo.
structuredClone(gVar)Falla: gVar es un Proxy. Usa { ...gVar }.
gVar.serie.push(x)Viaja sin marca de tiempo. Usa pushData.
pushData desde dos pestañas a la vezSolo escribe la que tenga el rol; la otra avisa por console.warn.
boardCode y artefacto alimentando la misma serieMarcas de tiempo desordenadas: elige un solo escritor por serie.