Socket.IOでセンサー&MongoDB〜AngularJSアプリ間の通信を行う:Arduinoで始めるWeb技術者のためのIoT入門(6)(1/3 ページ)
家電〜Webアプリ間の双方向通信をSocket.IOで行うアプリについて、サーバー側のArduino連携やMongoDBへのデータ保存などと、クライアント側のAngularJSに分けて動作を解説します。
前回の「MEANスタックで家電制御アプリを作るための設計・準備と温度湿度センサーからのデータ読み取り」に引き続き、スマートフォンから家電を操作するためのWebシステムを作っていきます。前回は設計指針を解説し、anugular-fullstackジェネレーターでアプリケーションのひな型を作成しました。
今回は、Arduinoとの通信部分、Model定義、UIについて解説しながら完成を目指します。今回のコードはGitHubに公開していますので、下記のコマンドでダウンロードしてください。
git clone https://github.com/iwanaga/hemsjs.git
angular-fullstackで生成されたコードの解説
まずは、ジェネレーターで生成したコード構成を把握して、全体像をつかみます。
サーバー側
◇app.js
サーバーを起動する際、まずこのファイルを実行します。Socket.IOサービスとの連携処理は、このファイルでrequireしています。今回組み込むArduinoとの通信サービスも、このファイルでrequireしてコードの統一感を維持します。
◇api
このディレクトリにはAPIエンドポイントに関するファイルを配置します。下記コマンドを実行すると、ここにファイルが生成されます。このひな型を基にして、コードを書いていきます。
yo angular-fullstack:endpoint {リソース名}
◇index.js
リソース固有のルーティングを定義します。
- *.model.js
mongooseのmodelメソッドを使って、スキーマ定義を記述します。詳細は後ほど解説します。
- *.socket.js
angular-fullstackの工夫が見られるファイルです。リソース固有のSocket.IOイベント処理を記述します。今回は、MongoDBへの保存が完了したときに、クライアントへemitする処理を定義します。
◇config
listen portやexpressミドルウェアを指定するファイルがあります。注目すべきファイルは下記のsocketio.jsです。
- socketio.js
Socket.IOの「接続時」と「切断時」の挙動を定義します。ファイルが肥大化しないように工夫してあり、onConnect関数が重要な役割を持っています。
クライアント側
◇app
UIコンポーネントのファイルを配置します。下記のコマンドを実行すると、ここにファイルが生成されます。
yo angular-fullstack:route {コンポーネント名}
◇components
複数のコントローラーで利用するサービスが格納されています。Socket.IOをラップしたsocketサービスの実体もここにあります。
◇e2e
end to endテストのファイルを配置します。
- *.po.js
「po」とは「Page Object」の略です。テストで利用するDOMを取得してエクスポートするだけの内容になっています。他のテストでも再利用可能にするために、テスト本体のファイルから分離しています。テスト実行時はAngularJSのend to endテストフレームワークである「Protractor」のAPIを利用して「バインドしているデータの変数名でエレメントを取得する」といったことも可能です。
- *.spec.js
テストの本体です。beforeEachでPage Objectをインポートし、結合テストを行います。
Copyright © ITmedia, Inc. All Rights Reserved.
関連記事
- 忘れずに手を洗おう……ビッグデータとIoTの活用例
張り紙に頼る代わりに、センサーとInternet of Things(IoT)、ビッグデータといった技術を活用して手洗い忘れ防止を実現したケースを紹介する。 - 確定不能なデータたち――IoT時代を受け止めるOracle NoSQL、JSON Anywhere
エンタープライズを指向するOracle NoSQL、マルチデバイスでのデータハンドリングのための環境を整備するCouchbase、適用用途は異なるものの、IoT時代を見据えた開発を進める2つの非RDBをウォッチした。 - 冷蔵庫は「無実」――シマンテックがスパム発信元を調査
「インターネットにつながったスマート家電から75万通以上のスパムメールが発信された」という報道に関して、シマンテックは2014年1月27日、実際に感染していたのは同じホームネットワーク内のWindows搭載PCであり、冷蔵庫は「無実だ」とするブログを公開した。 - 「俺たちのJavaは、まだまだこれからだ」未来の鍵はInternet of Thingsにあり?〜JavaOne 2013まとめレポート(前編)
Java開発者の年次カンファレンス、JavaOne 2013がサンフランシスコで9月22〜26日に開催された。3つの基調講演、そして400を超えるセッションが行われるなど、圧巻のボリュームは、まさに「Java開発者の祭典」といえる。基調講演と主なセッション、全体の雰囲気を前中後編に分けてレポートする。 - IoTをクラウドで管理、「Microsoft Azure Intelligent Systems Service」プレビュー公開
米マイクロソフトは2014年4月15日、デバイスやセンサーといった「モノのインターネット」(IoT)からのデータを収集し、ビジネスインテリジェンスツールと結び付けて分析する「Microsoft Azure Intelligent Systems Service」の限定パブリックプレビューを公開した。