IoT+WEBのためのホームサーバ計画

ホームサーバっていうとなんか、
どっかのメーカーのどっかの製品みたいな感じですけど、
いや、それはそれでいいんですけど、
あれこれ汎用的にIoT機器を接続したり、操作しようと思うと、
そんな簡単にいくわけでもないので、
ここでは、IoT+WEBのための、汎用的なものを作ります。
RaspberryPiで。

それに接続するものは、仕様の則っていれば、プラグアンドプレイ的に接続できて、、
みたいなものを作ります。
だから仕様からですね。
Actorは4人。

  • スマフォくん。外部からコントロールするために。
  • サーバくん。これはスマフォくんが外部からアクセスできるのはサーバくんしかいないからです。
  • ホームサーバくん。
  • IoTくん。
    ※正確にはここでは、【IoTコントローラくん】みたいな方が近いかな。

それぞれの接続方法です。
これは、接続が完了した後の図ではありますが。

① スマフォ  ➡  サーバ
⇒普通にWEBです。httpsですね。
② サーバ ➡ スマフォ
⇒WebSocketまたは、MQTT over WebSocketあたりでしょう
③ サーバ ➡ ホームサーバ
⇒WebSocketまたは、MQTT over WebSocketあたりでしょう
④ ホームサーバ ➡ サーバ
⇒普通にhttpsです。
⑤ ホームサーバ ➡ IoTくん
⇒PrivateなN/Wなのでなんでもいいのですが、ここでは独自TCP/IPプロトコルにします
⑥ IoTくん ➡ ホームサーバ
⇒PrivateなN/Wなのでなんでもいいのですが、ここでは独自TCP/IPプロトコルにします

いくつかのトピックを。
●ホームサーバもIoTくんも、DHCPが前提なので、互いにIPとか知らない。
●ホームサーバ は有線LAN
●IoTくんは、有線または無線LAN。
●サーバってだれがどこに準備するのさ!

では、説明を。

まず、IoTくんが、PrivateN/Wに参加するとこから始まります。
電源を入れ、有線LANにつなぎましょう。(無線LANも基本的には同じですが、WPSとかします)
そしたら、ブロードキャストでUDP投げちゃいます。
これが、IoTくんからホームサーバに到達し、IoTくんのIPをゲットです。
その後、ホームサーバは、IoTくんに、TCP/IPして、
 『IoTくんが何者で』
 『IoTくんがどんなことができて』
 『IoTくんがどんな命令に対応して、どんな命令でどんな挙動をするか』
をやりとりします。

IoTくんは複数あることが前提で、ホームサーバはそれを管理しています。
ホームサーバは、はじめての起動時に、サーバへアクセスし、【固有ID 】 をもらって保存しときます。

その後、WebSocketして接続しっぱなしっぽい状態を作ります。
サーバは、ホームサーバの、【固有ID】を知っているのみで、『その固有IDのホームサーバが接続されているかどうかだけ』を管理します。

さて一方、スマフォは、サーバへユーザ/パスワード登録しますが、このときに、【固有ID】が必要となります。

そう、スマフォは、【固有ID】を知るすべがありません。
ここでは2つ準備します。

●ホームサーバに2行くらいのLCDを取り付けておいて、そこに表示させます。
●ホームサーバの接続直後30分くらいで、『同じグローバルIPから接続してきた場合』に、ユーザ登録を可能にします。この場合は、スマフォくん側は【固有ID】をしらないまま登録することになります。
※同じネットワークから無線LANで接続しているという前提です

さて、実際に使われるときは、
スマフォが指定されたURLにアクセスすると、
サーバがホームサーバに、
『何できるか教えて!』というリクエストをかけて、
その一覧を表示させて、どれかを選ぶと、必要な入力項目の入力画面を表示させます。
必要な入力項目っていったって、ボタンを押すだけだったらボタンが表示されるだけです。

さて、ボタンが押されたとしたら、サーバはホームサーバにリクエストをかけ、それを受けたホームサーバが、IoTくんに実行命令をかけるということになります。
ここ、非同期です。

IoTくんがなんらか情報を返す場合には、
IoTくんから独自プロトコルでホームサーバへ、
そして、ホームサーバからサーバへ、
そしてサーバからスマフォへPUSHされるという仕組みです。

理論的には、ストリーミングとかもできるわけですが、、
サーバの負荷が心配です。

さて、サーバはどこで誰が準備するという話ですが、これはもう、

仲間の中のそれっぽい人

に頼みましょう。
っていうと、『IoTを普及させたいいろんな人』に準備してもらいたいとこですね。

そう、その基本的なソフトウェアを全て提供しようって話なのです。
まぁ、RaspberryPiにLCDをつけるということがだれにでもできるわけでもないので、
そこはあとで考えます。

もちろん

AmazonのAWS-IoT
https://docs.aws.amazon.com/ja_jp/iot/latest/developerguide/what-is-aws-iot.html
SLACKをつかってIoT
https://seleck.cc/184
みたいなことは今や普通のことですが、今回の主題はここではなくて、

【IoT機器をプライベートなN/Wに参加させるだけですぐIoTが外部コントロールできる環境】

を作るというところが主題なのです。

コメントする

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です