Gestión de frambuesa a través de websockets

La Raspberry Pi ha ganado una inmensa popularidad en todo el mundo. Sin embargo, muchos de los desarrolladores aficionados se enfrentan al problema de acceder al dispositivo desde Internet. Como regla general, debe conjurar con DDNS o comprar una dirección IP estática. Ambas opciones implican configurar un enrutador, que no es para todos y no siempre está disponible. Además, la apertura del acceso directo al dispositivo desde Internet conlleva ciertos riesgos de seguridad.

Una forma extremadamente común de resolver este problema es utilizar un servidor intermedio a través del cual el servidor y el cliente se conectan entre sí.
El esquema es extremadamente utilizado en varios paquetes de acceso remoto: VNCViewer, AmmyyAdmin, etc.

Opción 1-DDNS

imagen

Opción 2 - Dirección IP estática

imagen

Opción 3: usar un servidor intermedio

imagen

Este esquema de conexión se puede implementar a través del protocolo MQTT sobre Websockets, pero fue interesante para mí implementar algo mucho más simple, orientado a JSON, extensible, sin restricciones de protocolo en el tamaño del mensaje y con un modelo de seguridad más obvio.

La elección del protocolo fue obvia. WebSocket ha sido respaldado por los navegadores y la mayoría de las plataformas y lenguajes de programación.

El modelo de bus de datos es trivial:

WebSocket Server admite una cantidad ilimitada de canales. Cada canal puede estar abierto o protegido con contraseña. Un canal existe solo mientras tiene al menos un cliente conectado. No hay datos almacenados fundamentalmente en el servidor. La contraseña la establece el primer cliente que se conecta al canal. Los clientes sin contraseña / con una contraseña incorrecta no podrán ingresar al canal.

Un canal es un contenedor de mensajes. Los mensajes son de tres tipos: mensajes de dirección (comandos), que están destinados a uno o varios destinatarios, mensajes de respuesta y mensajes de difusión que serán recibidos por todos los clientes conectados al canal.

imagen

Tal esquema permite el uso de centros comunes para muchos consumidores de manera relativamente segura ya que no hay necesidad de configuraciones, generación de usuarios en el servidor (como en MQTT), generación de claves de acceso, etc.

Los mensajes no se guardan en ninguna parte, no se registran y transmiten a través del protocolo seguro wss.
Los mensajes son objetos JSON escritos a máquina. La información binaria se transmite como una cadena codificada en Base64.

El código del proyecto está disponible en GitHub y el centro actual que puede encontrar aquí .
El proyecto consiste en un servidor WebSocket en .net, una aplicación de cliente web que se conecta al servidor y una aplicación python para raspberry pi.

Una aplicación web está lejos de ser la única forma posible de interactuar con un servidor websocket. Por ejemplo, puede escribir fácilmente un cliente en la nube que "escuchará" los eventos de la cámara web y guardará imágenes en algún tipo de almacenamiento en la nube.

La arquitectura le permite conectar un número ilimitado de raspberry pi y clientes por canal.
Por ejemplo, si desea construir algún tipo de sistema de seguridad / control climático / hogar inteligente, puede poner toda la frambuesa en un canal y enviar comandos a todas o algunas instancias a la vez.

Los eventos de transmisión "transmisión" recibirán a todos los participantes de la red.

Algunas palabras sobre las características de la aplicación.


  1. Acceso remoto al sistema de archivos. Puede ver, descargar y cargar imágenes, archivos de sonido y otros archivos. Es bastante conveniente no llevar todo su archivo de fotos de varios terabytes en su teléfono. Bueno, o si necesitas buscar algo en los archivos.
  2. PiCamera le permite recibir una imagen bajo demanda y en modo cámara web. Junto con la recepción de sonido de un micrófono, se puede usar como una solución de seguridad barata. Requiere una cámara pi conectada.
  3. Envíe grabaciones de sonido a frambuesa o reciba grabaciones de un micrófono. Se puede usar tanto para algunas tareas de seguridad como para la interacción de voz con gatos o niños. Requiere conexión a un televisor / altavoz y micrófono, respectivamente.
  4. Enciende / apaga / consigue el foco del televisor. El protocolo CEC le permite controlar su televisor mediante un cable HDMI. Debe instalar cec-client en frambuesa.
  5. Muestra información de audio y texto en el televisor. Esta función incluye encender y recibir el foco en el televisor y mostrar un mensaje de texto, acompañado de una señal de sonido. Es conveniente si necesita forzar de forma remota a los niños a hacer la tarea.
  6. Visualización remota de imágenes. Si desea sorprender a su familia y mostrar de repente una foto de sus aventuras en un televisor familiar, entonces esta función es solo para eso. Seleccione cualquier imagen de su PC o teléfono y envíela a raspberry.
  7. Obtención de datos sobre humedad, temperatura. Raspberry envía un mensaje de difusión con una periodicidad especificada. Además de la humedad y la temperatura, el mensaje contiene información sobre la temperatura y la carga del procesador, el disco y la carga de memoria. Juntos, el control remoto del puerto de E / S se puede usar como control remoto del clima interior. Se requiere un sensor de temperatura DHT11 ($ 1) para medir la temperatura.
  8. Administrar puertos de E / S Permite leer información de los puertos GPIO seleccionados y enviarles una señal. Puede obtener el estado de los interruptores, bombillas, timbres y, a través del control del relé, algunos dispositivos más serios.
  9. El inicio remoto de comandos permite ejecutar cualquier comando de shell en frambuesa. Por ejemplo, comience a ver un álbum de fotos o una película. Si tal oportunidad le parece insegura, esta función se puede deshabilitar.


imagen
Continuará ...

Source: https://habr.com/ru/post/447496/


All Articles