Verwalten von Himbeeren über Websockets

Der Raspberry Pi hat weltweit immense Popularität erlangt. Viele der Amateurentwickler sind jedoch mit dem Problem konfrontiert, über das Internet auf das Gerät zuzugreifen. In der Regel müssen Sie mit DDNS zaubern oder eine statische IP-Adresse kaufen. Bei beiden Optionen muss ein Router eingerichtet werden, der nicht für jedermann geeignet und nicht immer verfügbar ist. Darüber hinaus birgt die Öffnung des direkten Zugriffs auf das Gerät über das Internet bestimmte Sicherheitsrisiken.

Eine äußerst häufige Methode zur Lösung dieses Problems ist die Verwendung eines Zwischenservers, über den Server und Client eine Verbindung miteinander herstellen.
Das Schema wird in verschiedenen RAS-Paketen sehr häufig verwendet: VNCViewer, AmmyyAdmin usw.

Option 1-DDNS

Bild

Option 2 - Statische IP-Adresse

Bild

Option 3 - Verwenden eines Zwischenservers

Bild

Dieses Verbindungsschema kann über das MQTT-über-Websockets-Protokoll implementiert werden, aber es war für mich interessant, etwas viel Einfacheres, JSON-orientiertes, erweiterbares zu implementieren, ohne Protokollbeschränkungen für die Nachrichtengröße und mit einem offensichtlicheren Sicherheitsmodell.

Die Wahl des Protokolls war offensichtlich. WebSocket wird seit langem von Browsern und den meisten Plattformen und Programmiersprachen unterstützt.

Das Datenbusmodell ist trivial:

WebSocket Server unterstützt eine unbegrenzte Anzahl von Kanälen. Jeder Kanal kann entweder offen oder passwortgeschützt sein. Ein Kanal existiert nur, wenn mindestens ein Client verbunden ist. Grundsätzlich werden keine Daten auf dem Server gespeichert. Das Passwort wird vom ersten Client festgelegt, der eine Verbindung zum Kanal herstellt. Clients ohne Passwort / mit falschem Passwort dürfen den Kanal nicht betreten.

Ein Kanal ist ein Container für Nachrichten. Es gibt drei Arten von Nachrichten: Adressnachrichten (Befehle), die für einen oder mehrere Empfänger bestimmt sind, Antwortnachrichten und Broadcast-Nachrichten, die von allen mit dem Kanal verbundenen Clients empfangen werden.

Bild

Ein solches Schema ermöglicht die Verwendung gemeinsamer Hubs für viele Verbraucher seitdem relativ sicher Einstellungen, Benutzergenerierung auf dem Server (wie in MQTT), Generierung von Zugriffsschlüsseln usw. sind nicht erforderlich.

Nachrichten werden nirgendwo gespeichert, nicht protokolliert und über das sichere Protokoll wss übertragen.
Nachrichten sind typisierte JSON-Objekte. Binäre Informationen werden als Base64-codierte Zeichenfolge übertragen.

Der Projektcode ist auf GitHub verfügbar und den aktuellen Hub finden Sie hier .
Das Projekt besteht aus einem WebSocket-Server auf .net, einer Webclient-Anwendung, die eine Verbindung zum Server herstellt, und einer Python-Anwendung für Himbeer-Pi.

Eine Webanwendung ist bei weitem nicht die einzige Möglichkeit, mit einem Websocket-Server zu interagieren. Sie können beispielsweise ganz einfach einen Cloud-Client schreiben, der Webcam-Ereignisse „abhört“ und Bilder in einer Art Cloud-Speicher speichert.

Die Architektur ermöglicht es Ihnen, eine unbegrenzte Anzahl von Himbeer-Pi und Clients pro Kanal zu verbinden.
Wenn Sie beispielsweise eine Art Sicherheits- / Klimatisierungs- / Smart-Home-System erstellen möchten, können Sie alle Himbeeren auf einen Kanal setzen und Befehle an alle oder einige Instanzen gleichzeitig senden.

Broadcast-Ereignisse "Broadcast" empfängt alle Netzwerkteilnehmer.

Ein paar Worte zu den Funktionen der Anwendung


  1. Fernzugriff auf das Dateisystem. Sie können Bilder, Audiodateien und andere Dateien ansehen, herunterladen und hochladen. Es ist sehr praktisch, nicht Ihr gesamtes Fotoarchiv mit mehreren Terabyte auf Ihrem Telefon zu speichern. Nun, oder wenn Sie in den Archiven nach etwas suchen müssen.
  2. Mit PiCamera können Sie ein Bild sowohl bei Bedarf als auch im Webcam-Modus empfangen. Neben dem Empfang von Ton von einem Mikrofon kann es als kostengünstige Sicherheitslösung verwendet werden. Benötigt eine angeschlossene Pi-Kamera.
  3. Senden Sie Tonaufnahmen an Himbeeren oder empfangen Sie Aufnahmen von einem Mikrofon. Es kann sowohl für einige Sicherheitsaufgaben als auch für die Sprachinteraktion mit Katzen oder Kindern verwendet werden. Erfordert den Anschluss an einen Fernseher / Lautsprecher bzw. ein Mikrofon.
  4. Ein- / Ausschalten / Fokussieren des Fernsehgeräts. Mit dem CEC-Protokoll können Sie Ihr Fernsehgerät über ein HDMI-Kabel steuern. Sie müssen cec-client auf Himbeere installieren.
  5. Zeigen Sie Audio- und Textinformationen auf dem Fernsehgerät an. Diese Funktion umfasst das Einschalten und Empfangen des Fokus auf dem Fernsehgerät sowie das Anzeigen einer Textnachricht mit einem Tonsignal. Es ist praktisch, wenn Sie Kinder aus der Ferne zwingen müssen, Hausaufgaben zu machen.
  6. Remote-Bildanzeige. Wenn Sie Ihre Familie überraschen und plötzlich ein Foto Ihrer Abenteuer auf einem Familienfernseher anzeigen möchten, ist diese Funktion genau das Richtige für Sie. Wählen Sie ein Bild von Ihrem PC oder Telefon aus und senden Sie es an Himbeere.
  7. Daten zu Luftfeuchtigkeit und Temperatur abrufen. Himbeere sendet eine Broadcast-Nachricht mit einer bestimmten Periodizität. Zusätzlich zu Luftfeuchtigkeit und Temperatur enthält die Nachricht Informationen zu Temperatur und Prozessorlast, Festplatten- und Speicherlast. Zusammen kann die Fernbedienung für den E / A-Anschluss als Fernbedienung für das Raumklima verwendet werden. Ein Temperatursensor DHT11 ($ 1) ist erforderlich, um die Temperatur zu messen.
  8. E / A-Ports verwalten Es ermöglicht sowohl das Lesen von Informationen von den ausgewählten GPIO-Ports als auch das Ausgeben eines Signals an diese. Sie können den Status von Schaltern, Glühbirnen, Klingeln und über die Relaissteuerung einige schwerwiegendere Geräte abrufen.
  9. Der Fernstart von Befehlen ermöglicht die Ausführung beliebiger Shell-Befehle auf Himbeeren. Beginnen Sie beispielsweise mit der Anzeige eines Fotoalbums oder Films. Wenn eine solche Gelegenheit für Sie unsicher erscheint, kann diese Funktion deaktiviert werden.


Bild
Fortsetzung folgt ...

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


All Articles