Gérer Raspberry via des websockets

Le Raspberry Pi a acquis une immense popularité dans le monde entier. Cependant, de nombreux développeurs amateurs sont confrontés au problème d'accès à l'appareil depuis Internet. En règle générale, vous devez conjurer avec DDNS ou acheter une adresse IP statique. Les deux options impliquent la configuration d'un routeur, qui n'est pas pour tout le monde et n'est pas toujours disponible. De plus, l'ouverture d'un accès direct à l'appareil depuis Internet comporte certains risques de sécurité.

Une façon extrêmement courante de résoudre ce problème consiste à utiliser un serveur intermédiaire par lequel le serveur et le client se connectent l'un à l'autre.
Le schéma est extrêmement largement utilisé dans divers packages d'accès à distance: VNCViewer, AmmyyAdmin, etc.

Option 1-DDNS

image

Option 2 - Adresse IP statique

image

Option 3 - utiliser un serveur intermédiaire

image

Ce schéma de connexion peut être implémenté via le protocole MQTT sur Websockets, mais il était intéressant pour moi d'implémenter quelque chose de beaucoup plus simple, orienté JSON, extensible, sans restrictions de protocole sur la taille des messages et avec un modèle de sécurité plus évident.

Le choix du protocole était évident. WebSocket est depuis longtemps pris en charge par les navigateurs et la plupart des plateformes et langages de programmation.

Le modèle de bus de données est trivial:

WebSocket Server prend en charge un nombre illimité de canaux. Chaque canal peut être ouvert ou protégé par mot de passe. Un canal n'existe que lorsqu'il a au moins un client connecté. Aucune donnée n'est fondamentalement stockée sur le serveur. Le mot de passe est défini par le premier client se connectant au canal. Les clients sans mot de passe / avec un mot de passe incorrect ne seront pas autorisés dans le canal.

Un canal est un conteneur de messages. Les messages sont de trois types: les messages d'adresse (commandes), qui sont destinés à un ou plusieurs destinataires, les messages de réponse et les messages de diffusion qui seront reçus par tous les clients connectés au canal.

image

Un tel schéma permet l'utilisation de hubs communs pour de nombreux consommateurs de manière relativement sûre, car il n'y a pas besoin de réglages, de génération d'utilisateurs sur le serveur (comme dans MQTT), de génération de clés d'accès, etc.

Les messages ne sont enregistrés nulle part, ni enregistrés ni transmis via le protocole sécurisé wss.
Les messages sont des objets JSON typés. Les informations binaires sont transmises sous la forme d'une chaîne codée Base64.

Le code du projet est disponible sur GitHub , et le hub actuel que vous pouvez trouver ici .
Le projet consiste en un serveur WebSocket sur .net, une application client Web qui se connecte au serveur et une application python pour raspberry pi.

Une application web est loin d'être le seul moyen possible d'interagir avec un serveur websocket. Par exemple, vous pouvez facilement écrire un client cloud qui «écoutera» les événements de la webcam et enregistrera des images sur une sorte de stockage cloud.

L'architecture vous permet de connecter un nombre illimité de Raspberry Pi et de clients par canal.
Par exemple, si vous souhaitez créer une sorte de système de sécurité / contrôle climatique / maison intelligente, vous pouvez mettre toutes les framboises sur un canal et envoyer des commandes à toutes ou à certaines instances à la fois.

Les événements de diffusion "diffusion" recevront tous les participants du réseau.

Quelques mots sur les fonctionnalités de l'application


  1. Accès à distance au système de fichiers. Vous pouvez regarder, télécharger et télécharger des images, des fichiers audio et d'autres fichiers. Il est très pratique de ne pas transporter l'intégralité de vos archives multi-téraoctets de photos sur votre téléphone. Eh bien, ou si vous avez besoin de chercher quelque chose dans les archives.
  2. PiCamera vous permet de recevoir une image à la demande et en mode webcam. En plus de recevoir le son d'un microphone, il peut être utilisé comme une solution de sécurité bon marché. Nécessite une caméra pi connectée.
  3. Envoyez des enregistrements sonores à la framboise ou recevez des enregistrements d'un microphone. Il peut être utilisé à la fois pour certaines tâches de sécurité et pour l'interaction vocale avec des chats ou des enfants. Nécessite une connexion à un téléviseur / haut-parleur et un microphone, respectivement.
  4. Allumez / éteignez / obtenez la mise au point du téléviseur. Le protocole CEC vous permet de contrôler votre téléviseur via un câble HDMI. Vous devez installer cec-client sur framboise.
  5. Affichez les informations audio et texte sur le téléviseur. Cette fonction comprend l'allumage et la réception de la mise au point sur le téléviseur et l'affichage d'un message texte, accompagné d'un signal sonore. C'est pratique si vous devez forcer à distance les enfants à faire leurs devoirs.
  6. Affichage d'image à distance. Si vous voulez surprendre votre famille et afficher soudainement une photo de vos aventures sur un téléviseur familial, cette fonction est faite pour ça. Sélectionnez une image de votre PC ou téléphone et envoyez-la à la framboise.
  7. Obtention de données sur l'humidité, la température. Raspberry envoie un message de diffusion avec une périodicité spécifiée. En plus de l'humidité et de la température, le message contient des informations sur la température et la charge du processeur, le chargement du disque et de la mémoire. Ensemble, le contrôle du port d'E / S à distance peut être utilisé comme télécommande du climat intérieur. Un capteur de température DHT11 (1 $) est nécessaire pour mesurer la température.
  8. Gérer les ports d'E / S Il permet à la fois de lire les informations des ports GPIO sélectionnés et de leur envoyer un signal. Vous pouvez obtenir l'état des interrupteurs, des ampoules, des sonneries et, via le relais, contrôler certains appareils plus graves.
  9. Le démarrage à distance des commandes permet d'exécuter toutes les commandes shell sur la framboise. Par exemple, commencez à visualiser un album photo ou un film. Si une telle opportunité vous semble dangereuse, cette fonction peut être désactivée.


image
À suivre ...

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


All Articles