本文へジャンプします。

IoTデバイスハブを活用して郵便受け監視システムを作ってみた

こんにちは。見習いエンジニアの大橋です。

宅配便や郵便物が届く予定があるのに外出しなければならない日は、不在中に宅配業者が来ていないか気になって仕方がありません。帰宅するまでに宅配業者が来てしまったかどうか、すでに不在連絡票が郵便受けに入れられてしまったかどうかは、出かけている間にも知りたくなってしまうものでしょう。

そこで、今回は「IoTデバイスハブ」を活用し、宅配物や郵便物が届いたときにメールで伝えてくれたり、遠方にいてもスマートフォンからWebで郵便受けの状態を確認できる「郵便受け監視システム」を作ってみました。

システム概要

mailbox-observer1
こちらが今回製作した郵便受け監視システムの構成とデータの流れになります。
主な構成要素はRaspberry Pi, サーバー, IoTデバイスハブ, ESS, オブジェクトストレージですね。

mailbox-observer3

まずは郵便物の通知フローから説明します。Raspberry Piは、郵便受けの「受け口」の状態をチルトスイッチによって監視します。郵便物が「受け口」に投函される(=チルトスイッチが傾く)と、

  1. Raspberry Piに取り付けられたWebカメラが郵便受け内部の写真を撮影し、オブジェクトストレージにアップロードします。
  2. 次に、写真が撮られたことを通知するためのイベントをIoTデバイスハブに送信します。
  3. イベントを受け取ったIoTデバイスハブは、そのデータをWebhooksスマートモジュールに設定されたURLへ転送します。
  4. 通知を受けたサーバーは、ESSにメールの送信を依頼します。
  5. ESSは、ユーザーに対してメールを配信します。

mailbox-observer2

次に郵便物の撮影フローを説明します。ユーザーは郵便物が投函された時の画像以外に、遠隔地からWebアプリを用いることによって、郵便受けの現状の撮影をRaspberry Piに命令し、その画像を取得することができます。郵便物撮影フローは、ユーザーの操作に起因する処理とWebアプリの動作に分解することができます。ここでは、Webアプリの動作を括弧書きで示します。

  1. ユーザーはWebアプリにアクセスします。
  2. Webアプリはオブジェクトストレージにアップロードされている画像を取得し、表示します。(また、Webアプリは自動で、定期的にオブジェクトストレージから画像を取得し続けます。)
  3. ユーザーがWebアプリを用いてコマンドを発行します。
  4. IoTデバイスハブはコマンドをRaspberry Piに転送します。
  5. コマンドを受け取ったRaspberry Piは、Webカメラによる撮影を行い、その画像をオブジェクトストレージにアップロードします。
  6. Webアプリはオブジェクトストレージから画像を再取得し、ユーザーに対して表示します。

ニフティクラウド側の準備

ニフティクラウドのコントロールパネルから各サービスの準備を整えていきます。まず、画面右上のユーザー名をクリック、アカウントメニューを開き、アカウント管理を選択します。ここで、

  • ニフティクラウドアカウントのAPIキー
  • ニフティクラウドアカウントのシークレットキー

をお控えください。後の設定で必要となります。

IoTデバイスハブの設定

クラウドユーザーガイド(IoTデバイスハブ:プロジェクトの作成)を参考にしながら、

  • プロジェクトの作成
  • デバイスの登録
  • アプリの登録
  • ユーザーの登録
  • Webhookスマートモジュールの登録

を進めていきます。webhookスマートモジュールについては、Event WebhookのURLに、以下のようなURLを設定してください。
http://${ご自身で用意されたサーバーのIPアドレス}:5000/api/events
参考:クラウドユーザーガイド(IoTデバイスハブ:Webhooks スマートモジュールを利用する)

また、IoTデバイスハブの設定作業では、

  • デバイスID
  • デバイスAPIキー
  • WebhookのURL
  • Webhookキー
  • デバイスハブユーザーのAPIキー(アプリシミュレーターからご確認頂けます)

をメモを取るなどしてお控えください。

ESSの設定

ess_info
ダッシュボードにて、「認証キーの表示」をクリック、

  • SMTPユーザー名
  • SMTPパスワード

を確認し、控えます。

次に、下記を参考にして送信元および送信先となるアドレスを登録します。
クラウドヘルプ(ESS:メールアドレス新規登録)

このとき、登録したメールアドレスを控えてください。

オブジェクトストレージの設定

NIFTY Cloud ニフティクラウドクラウドヘルプ(ストレージ:バケット作成)を参考にバケットを作成します。

また、作成したバケット名を控えます。

Raspberry Pi 3側の準備

Raspberry Piの設定を行います。

以下のようにしてインプットプルアップ回路を組みます。
mailbox-observer_fritzing

赤=3.3V, 黒=GND, 白=21 です。

必要なパッケージ、ライブラリーをインストールしていきます。

$ sudo apt-get update
$ sudo apt-get install git
$ sudo apt-get install fswebcam
$ sudo apt-get install wiringpi
$ sudo pip3 install git+git://github.com/pachicourse/mode-py.git
$ sudo pip3 install wiringpi

mode-pyライブラリーは、今回のために製作した、Python3でIoTデバイスハブを容易に扱えるようにするためのライブラリーです。

必要な環境変数をセットします。
$ sudo vi /etc/environment

export DH_DEVICE_ID=${デバイスID}
export DH_DEVICE_API_KEY=${デバイスAPIキー}
export DH_ENDPOINT='iot-device.jp-east-1.api.cloud.nifty.com'
export NC_API_KEY=${ニフティクラウドアカウントのAPIキー}
export NC_SECRET_KEY=${ニフティクラウドアカウントのシークレットキー}
export OS_BUCKET_NAME=${バケット名}
export OS_ENDPOINT='jp-east-2.os.cloud.nifty.com'

次に、sourceコマンドを実行します。
$ source /etc/environment

今回製作したプログラム、mailbox-observerをRaspberry Piにデプロイし、実行します。

$ git clone https://github.com/pachicourse/mailbox-observer
$ cd mailbox-observer/raspi
$ sudo -E python3 mailbox_observer.py

Server側の準備

サーバーの設定を行います。OSはUbuntu 16.04 64bit Plain (Ubuntu 64bit)を想定しています。

サーバーがお手元にない場合、ニフティクラウドコンピューティングをお使いください。コンピューティングをご利用頂ける場合には、ファイアウォール設定でIoTデバイスハブのIPアドレス(164.70.5.141, 164.70.5.142)を許可してください。

必要なライブラリー、パッケージをインストールします。

$ sudo apt-get update
$ sudo apt-get install python3-pip
$ sudo apt-get install git
$ sudo pip3 install git+git://github.com/pachicourse/mode-py.git
$ sudo pip3 install Flask Flask-API

環境変数をセットします。
$ sudo vi /etc/environment

export ESS_SMTP_ID=${SMTPユーザー名}
export ESS_SMTP_PASS=${SMTPパスワード}
export SMTP_HOST='ess-smtp.cloud.nifty.com'
export MAIL_ADDRESS=${郵便物受け取り通知先メールアドレス}
export WEBHOOK_URL=${WebhookのURL}
export WEBHOOK_KEY=${Webhookキー}
export NC_API_KEY=${ニフティクラウドアカウントのAPIキー}
export NC_SECRET_KEY=${ニフティクラウドアカウントのシークレットキー}
export OS_ENDPOINT='jp-east-2.os.cloud.nifty.com'
export OS_BUCKET_NAME=${バケット名}
export DH_ENDPOINT='iot-device.jp-east-1.api.cloud.nifty.com'
export DH_USER_API_KEY=${デバイスハブのユーザーAPIキー}
export DH_DEVICE_ID=${デバイスID}

次に、sourceコマンドを実行します。
$ source /etc/environment

mailbox-observerをサーバーにデプロイし、config.iniファイルの作成・設定を行います。

$ git clone https://github.com/pachicourse/mailbox-observer
$ cd mailbox-observer/server
$ vi config.ini

以下のように設定します。

[user]
name=${お好きなユーザー名}
password=${パスワード}

実行します。

$ python3 mailbox_observer.py

動作

自宅に設置・運用してみました。
mailbox-observer_setting_raspi_640

準備を終え、Raspberry Pi側でプログラムを実行した後にチルトスイッチを傾けると、Webカメラで撮影された写真がオブジェクトストレージに送られます。さらに、指定したメールアドレスにメールが届きます。
mailbox-observer_mail

では、ちゃんと撮影ができているかWebアプリ側から見て見ましょう。以下のURLにアクセスします。
http://${ご自身で用意されたサーバーのIPアドレス}:5000
アクセスしたら、右上のSign inボタンを押すと、以下のような入力画面になるので、config.iniに設定したユーザー名とパスワードでログインします。
mailbox-observer_sign_in

すると、オブジェクトストレージにアップロードされている写真が表示されます。Ratake a Pictureボタンを押せば、Raspberry Piに対してコマンドが発行され、画像が更新されます。どうやらお寿司屋さんのチラシが投函されているようです。
mailbox-observer_check_picture2

まとめ

いかがでしたか?前回の記事ではイベント送信のみでしたが、今回はコマンドの送信も交えて行ってみました。今回製作した監視システムは、郵便受けの監視のみならず、人物の入退室チェックや防犯などにも応用できると思います。

IoTデバイスハブを活用すれば、デバイスやアプリ、ユーザーの管理といった部分から、デバイスへのコマンド送信、アプリへのイベント送信などといったことを管理しやすく、また、簡単に行えます。もし、サーバーのIPアドレスが変わったとしても、所属するデバイスの設定をいちいち書き換える…といったことはせずに、IoTデバイスハブから設定を変えることで解決できます。また、サーバー側からは、コマンドの送信をIoTデバイスハブを中継することによって、デバイスのIPアドレスを意識することなくデバイスを操作することができます。特に、今回のシステムのように、各家庭に設置するようなタイプかつ取り付け先が変わる可能性のあるデバイスでは、このような機能は大変便利です。是非ご利用ください。

-——————————-
参考サイト
Kensuke Kosaka’s Blog Flaskで認証

ニフティクラウド 導入相談窓口
ニフティクラウド 無料セミナー

閉じる

閉じる

クラウドブログ編集部

クラウドブログ編集部

ニフティクラウド ユーザーブログ編集部のアカウントです。 編集部からのお知らせや、レギュラーライター以外のゲストによる寄稿記事を掲載していきます。

浜中 慶

浜中 慶

1980年、神奈川県生まれ。2003年ニフティ入社。 ポータルサイト開発を中心に、音楽配信サービス、CGMサービスなど様々なプロジェクトに企画/デザイン/システム担当として参加。現在は@niftyのポータルサービス向けコンテンツ管理システムの企画/開発/運用を担当。

吉田 雄哉

吉田 雄哉

株式会社co-meetingの創業メンバー。「取締役&External- facing Technologist」と名乗り新しいIT技術を広く伝える活動とWebアプリケーション開発を行う毎日。パッケージベンダーでのSaaS立上げ・製造業の情報システム部門で企画やPM・受託開発と従事してきたため、ベンダーサイドとユーザサイド の両方の視点を持ち合わせる。

石田 健亮

石田 健亮

株式会社ドリーム・アーツで小売事業者向けSaaS「Shopらん」を企画、開発。メインの仕事はプログラマーだがサーバー管理や営業もこなすユーティリティプレイヤー。最近好きな事はパフォーマンスチューニング。特に並列化プログラミングがマイブーム。キライなことはデータセンターでの作業。騒音と乾燥が弱点。ニフティクラウドでデータセンターに行く必要が無くなったことが本当の利点だ と思っている。

五月女 雄一

五月女 雄一

ニフティでは「インフラを守る簡単な様で奥が深いお仕事」をしています。 夢はインフラの気持ちが読めるエンジニアになること。

わたなべ かずひろ

わたなべ かずひろ

専門学校卒業後、ソフトウェア開発会社で電力系統制御システムの開発に従事。その後、CD-ROM等マルチメディア系PCソフトの開発を経て、1998年フリーランスに。 2000年8月に株式会社イーツーの設立に参画。携帯を含む様々なWeb系のシステム開発に携わる。現在はiPhone/Androidアプリなどの開発も手がけている。

市角

市角

ニフティクラウドのコントロールパネル設計・開発をメインに、たまにインフラの運用やお手伝いもやっていたりします。コントロールパネルや新機能の活用方法、アイデアなどを中心に書いていく予定です。

仲山 昌宏

仲山 昌宏

歌って踊れるインフラエンジニア兼、PHPもRubyもJavaも書くPerl使い。 物理サーバの運用に飽きて、フルラックに格安サーバ詰めて自宅プライベートクラウドを構築中。 今年は個人的には分散処理を攻めていきます。

猪飼 賢広

猪飼 賢広

1984年、愛知県名古屋市生まれ。大学は福島県にある某大学。2008年ニフティに入社。 開発系部署に配属後、主に各種テーマサイト開発のシステム面調整、開発進行管理役などとして参加。 現在もPC・ガラケーサイトの開発まわりを担当。インフラまわりを触る案件にも携わっており、日々修行中。 好きな芸人はなかやまきんに君とレイザーラモンRG。

久江 裕之

久江 裕之

ニフティクラウドのインフラ運用、OS提供の仕事をしています。 新しいOSやイメージが出る時にこのブログでご紹介いたします。入社5年目。一流のインフラエンジニアを目指して日々勉強中。

竹内 豪

竹内 豪

ニフティクラウド エンジニア

山口

山口

ニフティクラウドの基盤設計、新サービス/アライアンス/インフラ企画、その他雑用全般を担当しています。 クラウドに欲しい機能や、こんなふうに使ってほしいという想いが共有できれば良いですね。

芳中 隆幸

芳中 隆幸

ニフティクラウドの開発、運用を担当しています。

酒井 浩平

酒井 浩平

ニフティクラウドの中にいます。 ネットワークまわりの運用・開発や自動化などに取り組んでいます。 すべてのエンジニアを幸せにすることを目指しています。

higebu

higebu

ニフティクラウド IaaSのエンジニアです。 ネットワーク、DRサービス with VMware vCloud® Air™ Technology辺りの担当をしています。

武田

武田

ニフティクラウドの開発・運用を担当しています。 各種機能の内容についてなどで執筆させていただく予定です。

福澤真

福澤真

ニフティクラウドのコンパネ開発、運用をしています。

森藤 大地

森藤 大地

データに関する仕事が好きです。

宮原徹

宮原徹

日本仮想化技術株式会社 代表取締役社長兼CEO。仮想化技術に関するコンサルタントとして長年活動しており、特にベンチマークテストによる性能評価を得意としている。

荒谷翔

荒谷翔

株式会社はてなでMackerelのセールスデベロッパーとして勤務しています

東條 望

東條 望

2014年にニフティへ中途入社。 入社後から現在まで、ニフティクラウドのサービス企画・開発を担当しています。 各サービスの紹介を執筆させていただく予定です。

世良迪夫

世良迪夫

ニフティクラウドのRDBなどを担当しています