Está en la página 1de 4

JSON ADAFRUIT IO

Datos con ubicación


Para etiquetar sus datos con un valor de ubicación, primero deberá envolverlos en un
objeto JSON o enviarlos al tema MQTT con formato /csv especial.
Envío de JSON
JSON se puede enviar al tema base o al tema /JSON, por
ejemplo, mosfet/feeds/photocell-one o mosfet/feeds/photocell-one/json . 

El formato adecuado para los datos JSON con etiquetas de ubicación es:

Específicamente, los objetos JSON deben incluir una clave de "valor"


y pueden incluir claves "lat", "lon" y "ele". 
Envío de datos JSON a través de Adafruit IO
Debido a que Adafruit IO admite funciones adicionales más allá de un servicio de
intermediación MQTT básico, como el etiquetado de ubicación para puntos de datos,
el servicio admite datos en el formato JSON descrito anteriormente.  A saber:

Esto nos permite almacenar el valor individual 22.587y los datos sobre el valor: su


latitud, longitud y elevación. ¡ Metadatos  !
Pero, ¿qué sucede cuando el valor que desea enviar es en sí mismo JSON? ¡Buenas
noticias! Hay algunas soluciones disponibles para usted en esa situación.
JSON con formato IO
La forma más sencilla de enviar datos JSON a Adafruit IO es envolverlos en el formato
descrito anteriormente. Por ejemplo, si en lugar de 22.587, quisiera enviar algo
como, {"sensor-1":22.587,"sensor-2":13.182}la versión "envuelta" se vería así:

Vale la pena señalar que debido a que Adafruit IO analiza todo el objeto JSON que le
envía, se analizará cualquier JSON válido y, cuando se almacene en nuestro sistema y
se reenvíe a cualquier suscriptor, se volverá a generar. La importancia de esto es que si
publica datos JSON con espacios en blanco, se almacenarán y volverán a
publicar sin espacios en blanco, porque nuestro generador produce el formato JSON
más compacto posible.
 
Cadenas JSON con codificación doble
La segunda forma en que puede enviar datos JSON como un valor es "codificarlos dos
veces" antes de enviarlos, en cuyo caso IO los tratará como una cadena sin procesar.  Si
está utilizando algo como JSON.stringifyla función de JavaScript o
Ruby JSON.generate, la codificación doble significa pasar el
resultado JSON.stringifypor JSON.stringifysegunda vez. En este ejemplo de la consola
de node.js, puede ver la diferencia:

La cadena JSON con doble codificación se puede enviar directamente a través de


Adafruit IO sin la interferencia de nuestro sistema de procesamiento, porque el
sistema de procesamiento no la interpretará como JSON. En su código de recepción,
debido a que el valor pasado incluye comillas dobles, debe llamar a su función de
análisis dos veces para restaurar el objeto JSON.

 
JSON sin formato IO
La tercera forma en que puede enviar datos JSON sin procesar es simplemente
enviarlos. Si Adafruit IO no encuentra una clave de "valor" en el objeto JSON que
envía, tratará todo el blob como texto sin formato y almacenará y reenviará los
datos. Eso significa que con nuestro objeto JSON de ejemplo, el envío de la
cadena {"sensor-1":22.587,"sensor-2":13.182} dará como resultado que {"sensor-
1":22.587,"sensor-2":13.182}se almacene en IO y se envíe a los suscriptores de MQTT.

HEADERS
https://io.adafruit.com/api/docs/#pagination-headers
El encabezado del enlace
Para Adafruit IO Link siempre contiene al menos una URL entre paréntesis angulares, ese
es el enlace a la página de datos que está viendo actualmente. En el ejemplo anterior, la
primera URL es https://io.adafruit.com/api/v2/abachman/feeds/example.counter-1/
data?end_time=2019-05-02+22%3A33%3A22+UTC&limit=250. La primera URL
proporcionada en el encabezado del enlace se puede usar para solicitar el mismo
conjunto de datos nuevamente en el futuro. Incluso si su solicitud original no incluía
ningún parámetro, la URL del enlace incluirá un start_timeparámetro que refleje la hora
en que realizó la solicitud. Así es como podemos asegurarnos de que pueda solicitar los
mismos datos repetidamente.
El valor de enlace de ejemplo anterior también incluye una siguiente sección: rel="next",
<https://io.adafruit.com/api/v2/abachman/feeds/example.counter-1/data?
before=eyJ0aW1lX2lkIjoiMEU0V0RWSk1SNlgxNUgxV0FSR0c2SzFIRUgiLCJmZWVkX2l
kIjoiNzMuMCJ9&end_time=2019-05-02+22%3A33%3A22+UTC&limit=250>. La rel="ne
xt"parte significa que la URL que sigue es un enlace a la siguiente página de
datos. Siempre que haya más datos disponibles, el encabezado del enlace incluirá
una rel="next"URL. Se actualiza en cada solicitud, por lo que puede hojear los datos
realizando una solicitud, analizando el encabezado del enlace para obtener la siguiente
URL y luego usando esa URL para realizar otra solicitud. Si su solicitud inicial
incluye end_time, start_timeo limitparámetros, esos parámetros se incluirán en
la rel="next"URL. Tenga en cuenta que dado que las solicitudes de datos siempre se
ordenan de forma descendentecreated_atfecha (más reciente primero, más antigua al
final), la siguiente página de datos es siempre la siguiente página de datos más antigua.
Cuando se visualiza en una línea de tiempo, el concepto de paginación se ve así:
Tenga en cuenta que los feeds actualizados con frecuencia y de larga duración pueden
tener más de cien páginas de datos. En el ejemplo anterior, con un límite de 250 registros,
se necesitarían 330 solicitudes para obtener todos los datos. Si realiza solicitudes sin un
pequeño retraso en el medio, alcanzará un límite de tasa. Para evitar esto, observe las
respuestas de error HTTP 429 y manéjelas en el código agregando un tiempo de espera de
30 segundos entre solicitudes y solicite el tamaño más grande permitido, en este momento
eso es 1000 registros.
Sin embargo, si su objetivo es almacenar y estudiar los datos fuera de línea, sería mejor que
descargara todo el feed usando el botón Descargar integrado en Adafruit IO en la web.
Puede encontrar un ejemplo de un script de descarga de datos paginados en Python en este
enlace . Pase por los foros o Discord si tiene más preguntas sobre cómo sacar sus datos de
IO.
https://io.adafruit.com/api/docs/#chart-feed-data

También podría gustarte