Websocketを介したRaspberryの管理

Raspberry Piは世界中で非常に人気がありました。 しかし、アマチュアの開発者の多くは、インターネットからデバイスにアクセスする問題に直面しています。 原則として、DDNSを使用するか、静的IPアドレスを購入する必要があります。 両方のオプションには、ルーターのセットアップが含まれますが、これは万人向けではなく、常に利用できるとは限りません。 さらに、インターネットからデバイスへの直接アクセスを開くことには、特定のセキュリティリスクが伴います。



この問題を解決する非常に一般的な方法は、サーバーとクライアントが相互に接続する中間サーバーを使用することです。

このスキームは、VNCViewer、AmmyyAdminなど、さまざまなリモートアクセスパッケージで非常に広く使用されています。



オプション1-DDNS



画像



オプション2-静的IPアドレス



画像



オプション3-中間サーバーを使用する



画像



この接続スキームは、MQTT over Websocketsプロトコルを介して実装できますが、メッセージサイズのプロトコル制限がなく、より明確なセキュリティモデルを使用して、JSON指向で拡張可能な非常にシンプルなものを実装することは興味深いものでした。



プロトコルの選択は明らかでした。 WebSocketは、ブラウザおよびほとんどのプラットフォームとプログラミング言語で長い間サポートされています。



データバスモデルは簡単です。



WebSocketサーバーは、無制限の数のチャンネルをサポートします。 各チャネルは、オープンとパスワード保護の両方が可能です。 チャネルは、少なくとも1つのクライアントが接続されている間のみ存在します。 サーバーに基本的に保存されるデータはありません。 パスワードは、チャネルに接続する最初のクライアントによって設定されます。 パスワードを持たない/間違ったパスワードをもつクライアントは、チャンネルに入ることができません。



チャネルはメッセージのコンテナです。 メッセージには、1つまたは複数の受信者を対象とするアドレスメッセージ(コマンド)、チャネルに接続されているすべてのクライアントが受信する応答メッセージおよびブロードキャストメッセージの3種類があります。



画像



このようなスキームにより、多くの消費者に共通のハブを比較的安全に使用できます。 設定、サーバー上のユーザー生成(MQTTなど)、アクセスキーの生成などは必要ありません。



メッセージはどこにも保存されず、ログに記録されず、WSSセキュアプロトコルを介して送信されません。

メッセージはJSONオブジェクトです。 バイナリ情報は、Base64エンコード文字列として送信されます。



プロジェクトコードはGitHubで入手できます。現在のハブはここにあります

プロジェクトは、.net上のWebSocketサーバー、サーバーに接続するWebクライアントアプリケーション、およびraspberry pi用のpythonアプリケーションで構成されます。



Webアプリケーションは、WebSocketサーバーと対話する唯一の可能な方法とはほど遠いものです。 たとえば、ウェブカメライベントを「リッスン」し、ある種のクラウドストレージに写真を保存するクラウドクライアントを簡単に作成できます。



このアーキテクチャにより、チャンネルごとに無制限の数のラズベリーパイとクライアントを接続できます。

たとえば、何らかのセキュリティ/空調/スマートホームシステムを構築する場合は、すべてのラズベリーを1つのチャネルに配置して、すべてまたは一部のインスタンスにコマンドを一度に送信できます。



ブロードキャストイベント「ブロードキャスト」は、すべてのネットワーク参加者を受信します。



アプリケーションの機能に関するいくつかの言葉



  1. ファイルシステムへのリモートアクセス。 写真、音声ファイル、その他のファイルを視聴、ダウンロード、アップロードできます。 数テラバイトの写真のアーカイブ全体を携帯電話に入れないことは非常に便利です。 まあ、またはアーカイブで何かを探す必要がある場合。
  2. PiCameraでは、オンデマンドとウェブカメラモードの両方で画像を受信できます。 マイクから音を受信するとともに、安価なセキュリティソリューションとして使用できます。 接続されたpiカメラが必要です。
  3. ラズベリーにサウンドレコーディングを送信するか、マイクからレコーディングを受信します。 一部のセキュリティタスクと、猫や子供との音声対話の両方に使用できます。 それぞれテレビ/スピーカーとマイクへの接続が必要です。
  4. テレビのオン/オフ/フォーカスを切り替えます。 CECプロト​​コルにより、HDMIケーブルを介してテレビを制御できます。 recberryにcec-clientをインストールする必要があります。
  5. テレビに音声およびテキスト情報を表示します。 この機能には、テレビの電源を入れてフォーカスを受信し、音声信号を伴うテキストメッセージを表示することが含まれます。 子どもたちに宿題をリモートで強制する必要がある場合に便利です。
  6. リモート画像表示。 家族を驚かせ、突然家族のテレビに冒険の写真を表示したい場合、この機能はそのためだけのものです。 PCまたは電話の写真を選択して、raspberryに送信します。
  7. 湿度、温度に関するデータの取得。 Raspberryは、指定された周期でブロードキャストメッセージを送信します。 湿度と温度に加えて、メッセージには温度とプロセッサの負荷、ディスクとメモリの負荷に関する情報が含まれています。 一緒に、リモートI / Oポート制御は、屋内気候のリモート制御として使用できます。 温度を測定するには、温度センサーDHT11($ 1)が必要です。
  8. I / Oポートの管理 これにより、選択したGPIOポートから情報を読み取り、それらに信号を出力できます。 スイッチ、電球、ベルの状態を取得でき、リレーを介してより深刻なデバイスを制御できます。
  9. コマンドのリモートスタートにより、raspberryでシェルコマンドを実行できます。 たとえば、フォトアルバムまたはムービーの表示を開始します。 この可能性があなたにとって安全でないと思われる場合、この機能を無効にすることができます。




画像

続行するには...



All Articles