Lectura de sensores mediante JSON

JSON, acrónimo de JavaScript Object Notation, es un formato ligero para el intercambio de datos. JSON es un subconjunto de la notación literal de objetos de JavaScript que no requiere el uso de XML. La simplicidad de JSON ha dado lugar a la generalización de su uso, especialmente como alternativa a XML en AJAX. Una de las supuestas ventajas de JSON sobre XML como formato de intercambio de datos en este contexto es que es mucho más sencillo  escribir un analizador sintáctico (parser) de JSON. En JavaScript, un texto JSON se puede analizar fácilmente usando el procedimiento eval(), lo cual ha sido fundamental para que JSON haya sido aceptado por parte de la comunidad de desarrolladores AJAX, debido a la ubicuidad de JavaScript en casi cualquier navegador web.

Cada vez hay más soporte de JSON mediante el uso de paquetes escritos por terceras partes. La lista de lenguajes soportados incluye ActionScript, C, C++, C#, ColdFusion, Common Lisp, Delphi, E, Eiffel, Java, JavaScript, ML, Objective-C, Objective CAML, Perl, PHP, Python, Rebol, Ruby, Lua y Visual FoxPro.

Una vez hecho este corta-y-pega de Wikipedia y dado que JSON es un formato en auge en el mundillo de los Web Services, Roomba Wi-fi Remote también tiene un archivo accesible como lo son los XML roomba.xml y rwr.xml pero en formato JSON.

El fichero en cuestión se actualiza a la vez que sus hermanos en XML de manera que los valores que aparecen en este fichero se actualizan cada 500ms (muy a tener en cuenta para Distance y Angle).

Ya hemos apuntado varias veces que para hacer una lectura correcta y eficiente de los sensores lo mejor es utilizar el Gateway o modo Transparente siempre que se sepa lo que se hace y se tengan en cuenta los modos Full, Safe, etc descritos en la especificación SCI de iRobot Roomba.

roomba.json

El fichero que contiene la información en formato JSON es roomba.json, accesible desde http://IP_de_tu_Roomba_Wi-fi_Remote/roomba.json y que concuerda exactamente con roomba.xml en cuanto a contenido de datos: Una estructura superior llamada response con hijos tipo rX, uno para cada sensor y cada sensor con sus valores para el nombre descrito en la especificación SCI de iRobot y para el último valor actualizado desde el proceso automatizado del Roomba Wi-fi Remote.

A continuación la estructura de este fichero:

{
  "response": {
    "r0": {
      "name": "Bumps Wheeldrops",
      "value": "VALOR"
    },
    "r1": {
      "name": "Wall",
      "value": "VALOR"
    },
    "r2": {
      "name": "Cliff Left",
      "value": "VALOR"
    },
    "r3": {
      "name": "Cliff Front Left",
      "value": "VALOR"
    },
    "r4": {
      "name": "Cliff Front Right",
      "value": "VALOR"
    },
    "r5": {
      "name": "'Cliff Right'",
      "value": "VALOR"
    },
    "r6": {
      "name": "Virtual Wall",
      "value": "VALOR"
    },
    "r7": {
      "name": "Motor Overcurrents",
      "value": "VALOR"
    },
    "r8": {
      "name": "Dirt Detector - Left",
      "value": "VALOR"
    },
    "r9": {
      "name": "Dirt Detector - Right",
      "value": "VALOR"
    },
    "r10": {
      "name": "Remote Opcode",
      "value": "VALOR"
    },
    "r11": {
      "name": "Buttons",
      "value": "VALOR"
    },
    "r12": {
      "name": "Distance",
      "value": "VALOR"
    },
    "r13": {
      "name": "'Angle'",
      "value": "VALOR"
    },
    "r14": {
      "name": "Charging State",
      "value": "VALOR"
    },
    "r15": {
      "name": "Voltage",
      "value": "VALOR"
    },
    "r16": {
      "name": "Current",
      "value": "VALOR"
    },
    "r17": {
      "name": "Temperature",
      "value": "VALOR"
    },
    "r18": {
      "name": "Charge",
      "value": "VALOR"
    },
    "r19": {
      "name": "Capacity",
      "value": "VALOR"
    }
  }
}
Tagged with: , , ,
Posted in Desarrolladores, RooWifi: Roomba Wi-Fi Remote