הורדת שירים באיכות גבוהה
לקנות ויאגרה
תרגום עברית עברית
бинарные опционы в россии
קמגרה למכירה
ламода промо коды

Internet de las cosas

Así se refieren ahora al envío y recepción de información a Internet por aparatos. Es un concepto algo viejo pero que en los últimos años vino tomando fuerza. Asusta un poco que los aparatos tomen decisiones en forma autónoma, y nos termine pasando lo de Matrix, tranqui, mientras podamos programarlos todavía tenemos el poder.

A causa del tsunami de 2011, que devastó gran parte de Japón, incluyendo la planta nuclear de Fukushima, pasó a tener vital importancia la medición de radioactividad por parte de instrumentos Geiger que subían automáticamente los valores registrados a la web, específicamente a Pachube. Según leo por ahí, a los pocos días, miles de personas conectaron dispositivos de este tipo para que suban los valores de radiación detectados.

Pachube ahora se llama Xively, y provee una plataforma (PaaS, del inglés Platform as a service) para subir datos en tiempo real, además de una API disponible para varios lenguajes -entre ellos python- como así también a través de la amada consola usando curl (command line tool for transferring data with URL syntax).

Si bien la API está en github con licencia BSD, no estoy seguro que tan libre es la plataforma. Más allá de esto, uno puede elegir compartir sus datos, y según leo en sus FAQs la info ahora también será de ellos, cosa que no me molesta, “compartí con tus hermanos me decía mi vieja”:

I’m concerned about my data, who owns it?

We are too, that’s why Xively’s Terms of Service put you in control! You own your data. You choose whether to share all, part, or none of it. You choose who you want to share it with. You choose the terms that you want to share it under. You can view our terms of service here: https://secure.logmein.com/policies/privacy.aspx
 

Entonces, supongamos que hasta tanto no armemos nuestro propio servidor para atender esta info usamos xively. Supongamos que tenemos un arduino midiendo alguna variable. Supongamos que Sabella no nos considera argentinos. Supongamos que aún no mandamos a Internet directamente desde arduino porque no lo probamos y también te pido que supongas que usamos un router liberado con OpenWRT para agarrar estas medidas que nos escupe arduino. Entonces, conectamos el router y la placa arduino mediante USB y ahora, cazamos esto haciendo uso de pyserial, y lo mostramos en pantalla, para ver qué llega:

#!/usr/bin/env python
import sys, serial
import time
import datetime
 
port = '/dev/ttyACM0'
ser = serial.Serial(port, 9600)
while True:
    try:
        line = ser.readline()
        print datetime.datetime.fromtimestamp(time.time()).strftime('%Y-%m-%d %H:%M:%S'), line
        print line
    except KeyboardInterrupt:
        print 'exiting'
        break

Fijate que ahí estoy usando un timestamp generado desde python que NO es lo recomendado, pero como aún no tengo un RTC en arduino que me tire la hora, lo uso para probar. Ojo, capaz no te anda el diálogo entre los dos aparatos, te está faltanto instalar en OWRT:

opkg install python pyserial kmod-usb-acm

Ahora voy a dejar para el lector entusiasta y aplicado que con esos datos leídos por el puerto genere un JSON llamado update_feed_historical.json, que por ejemplo contenga datos históricos de un mismo sensor. Se tendría que verse algo así:

{
  "version":"1.0.0",
   "datastreams" : [ {
        "id" : "sensor1",
        "datapoints":[
        {"at":"2014-05-01T19:35:43Z","value":"42"},
        {"at":"2013-04-01T19:40:43Z","value":"84"},
        {"at":"2013-04-01T19:45:43Z","value":"41"},
        {"at":"2013-04-01T19:50:43Z","value":"83"}
        ],
        "current_value" : "40"
    }
  ]
}

Ahora, nuestro router podría ejecutar un script desde el cron, ponele una vez por día, y me sube todo lo registrado a xively. Entonces, el contenido del script bash tendría algo así:

curl --request PUT \
     --data-binary @update_feed_historical.json \
     --header "X-ApiKey: TU_KEY" https://api.xively.com/v2/feeds/TU_FEED

Bien, muy domingo es hoy y me estoy recuperando de una migraña terrible, razón por la cual escribí esto a las apuradas y con poca claridad. Pero resumamos para que lo entienda alguien más que yo.

  • Leemos con Arduino el valor de sus sensores y lo escupo por el puerto USB (pendiente de publicar acá, ya se viene, en breve, NO seas ansiosa!)
  • Conecto un router SOHO al que previamente le reemplazamos el firmware con una distro de GNU/Linux llamada OpenWRT.
  • Programamos un script python dentro del router, que agarre cada tanto lo que reciba por USB y lo vaya agregando a un archivo JSON con la estructura que necesita xively (ver en el sitio oficial)
  • Cada otro tanto, mas espaciado que el tanto previo, ejecutamos un script bash que usa curl para subir el bloque de datos a xively

Por último, supongamos que me creés que todo esto anda 20 puntos!

Y ahora sí, lo que todos estábamos esperando:

Te encontrare donde pueda,
me llevarás hasta el cielo,
perdurarás en el aire
mientras te vuelvo un sueño

Leave a Comment


NOTE - You can use these HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>

Social Widgets powered by AB-WebLog.com.

Social Widgets powered by AB-WebLog.com.

Social Widgets powered by AB-WebLog.com.