2010-09-27 5 views
5

Actualmente estoy trabajando en un proyecto en el que intento controlar un dispositivo integrado a través de un sitio web orientado a Internet. La idea es que un usuario pueda ir a un sitio web y decirle a este dispositivo que realice algún tipo de acción. Una acción en el sitio web se traduciría en una serie de comandos CLI y luego se enviaría al dispositivo. La comunicación podría ir en ambos sentidos en el futuro, pero ahora mismo me estoy enfocando de servidor a dispositivo.Creación de un sitio web para comunicarse con un dispositivo incorporado

El servidor web es una pila LAMP que usa Python (Django) y el dispositivo con el que intento comunicarme es una placa Beagle que ejecuta eLinux. Solo existiría un dispositivo en comunicación con el servidor en cualquier momento.

Tengo todas las partes funcionales escritas en el lado del servidor y del dispositivo, pero estoy teniendo problemas para descifrar cómo escribir la capa de comunicación. Uno de mis grandes problemas es que el dispositivo será móvil y se moverá ubicaciones cada pocos días. Por lo tanto, no puedo garantizar una dirección IP estática para el dispositivo. Mi conocimiento de programación de redes es bastante mínimo, así que no tengo una gran idea sobre dónde empezar.

¿Alguien tiene alguna idea o recurso sobre cómo puedo comenzar a desarrollar este tipo de comunicación?

Gracias!

Respuesta

3

Simplemente puede registrar un nombre de host dinámico usando un proveedor como DynDNS y hacer que el dispositivo actualice su IP en ese sitio web para que el nombre de host dinámico siempre apunte a la IP del dispositivo. Hay muchos clientes, scripts, etc. disponibles para Linux eso hace exactamente eso.

+0

+1: Probablemente más simple que escribir algo para que el dispositivo se conecte. ¿Por qué inventar la rueda, verdad? :) –

3

Si el servidor va a ser estático, siempre puede hacer que el dispositivo establezca una conexión con el servidor para informar su dirección IP.

Puede escribir a simple UDP server para que el dispositivo escuche las comunicaciones entrantes y luego write a client in python para que su servidor web llame.

2

Mi modo normal de conducta (por cierto, ya que podría tener que pasar por NAT y similares) es haber establecido el dispositivo de un túnel SSH inverso que sólo 'llama a casa': http://www.howtoforge.com/reverse-ssh-tunneling

Eso sí, SSH las conexiones se rompen de vez en cuando, así que establecí un método de latido en el servidor, y si el cliente (Beagle Board) pierde una cantidad determinada de latidos, deja que destruya el túnel & crea uno nuevo.

+0

Me gustaría ir a esta opción porque su dispositivo cliente podría no tener una dirección IP pública en algunas redes telefónicas. –

+0

En realidad, el operador dijo que sería móvil (no estático) y no está conectado a un módem o teléfono móvil. La respuesta de Wrikken es una buena sugerencia :) –

0

el dispositivo será móvil y se moverá ubicaciones cada pocos días. Por lo tanto, no puedo garantizar una dirección IP estática para el dispositivo.

Su dispositivo puede ser un cliente del sitio web.

Su sitio web tiene dos interfaces.

  1. Interfaz HTML para las personas.

  2. Una interfaz no HTML para el dispositivo. Como cliente de un sitio web, el dispositivo necesitará una biblioteca HTTP del lado del cliente para enviar una solicitud al sitio web. Esta solicitud incluirá la dirección IP del dispositivo, más todos los malarky usuales enterrados en una solicitud HTTP.(Hay un montón de cabeceras estándar que son enviados en una solicitud)

Una vez que el dispositivo ha hecho su petición inicial, entonces su sitio web puede guardar el estado actual del dispositivo y comunicarse con él a través de otro protocolo si quiero hacer eso (supongo que "tengo todas las partes funcionales escritas en el lado del servidor y del dispositivo" significa que tiene algún otro protocolo para controlar el dispositivo, y este protocolo no se basa en HTTP.)

Podría ser el más simple a la larga para hacer que el dispositivo sondee el sitio web en busca de comandos o actualizaciones o cosas. De esta forma, el dispositivo es un cliente web puro que usa solo HTTP, y su sitio web es un servidor web puro, que usa solo HTTP. Entonces no necesitas tu segundo protocolo más especializado. Usar solo HTTP significa que puede usar SSL para asegurar una comunicación segura.

Si su dispositivo utiliza HTTP para obtener comandos y actualizaciones, deberá buscar una representación utilizable para datos que puedan codificarse fácilmente en solicitudes y respuestas HTTP. Las opciones incluyen XML, JSON y YAML. Siempre puedes inventar tu propio formato de datos; sin embargo, probablemente será más feliz depurando un formato estandarizado como JSON.

Construir estas dos interfaces en Django es bastante trivial. Simplemente tendrá algunas URL que son para personas y otras para su dispositivo. Tendrá funciones de visualización para personas que devuelven páginas HTML y funciones para su dispositivo que devuelven mensajes JSON o XML.

Cuestiones relacionadas