地震が来たら自動で照明が点灯するIoTシステムを作ってみた

  • 2021.02.28
  • IoT
地震が来たら自動で照明が点灯するIoTシステムを作ってみた
えびかずき
えびかずき

こんにちは、えびかずきです。

今回は、地震が来たら自動で照明が点くシステムを作ってみたので紹介します!

こんな人におすすめ:
・RaspberryPiとPythonでIoTを勉強したい
・MESHセンサの使い方を知りたい
・Hueの使い方を知りたい

結果として、以下のシステムが完成しました。

開発環境

サーバー:
RaspberryPi 3B
 OS:Raspbian
 Python:3.7.3
 外部ライブラリ:Flask

センサー:
MESHmoveタグ/sony 

Webhook:
IFTTT

照明:
Philips Hueランプ
Philips Hueブリッジ(第一世代)

やりたいこと

今回やりたいことは、

地震で動きセンサーが倒れたら、その信号をラズパイに送って、IoT対応の電球を光らせるというシステムです。

では順を追って、作り方を紹介していきましょう!

手順

①MESHセンサを準備する

今回のシステムでは、動きセンサーとしてMESHmoveタグ(sony製)を使用します。

動きブロック
https://meshprj.com/jp/products/blocks/MESH-100AC.html

1.MESHレシピを作る

meshアプリから下のように、

センサーの向きが変われば、IFTTTを使ってPOSTリクエストでテキストデータをサーバーに送るようにレシピを作成します。

2.IFTTTでWebhookを設定する

IFTTTのマイページへいき、「CREATE」からアップレット作成に進みます。

IF Thisに「Event from Mesh app received」
Then Thatに「Webhooks」

を選択して、MESHからのデータをWebhookで指定したURLへ届けるというアップレットを作成します。

細かい設定は以下を参考にしてください。

これで、MESHの準備は完了です。

②RaspberryPiにFlaskでサーバーを立てる

続いて、RaspberryPiにFlaskでサーバーを立てていきます。

ディレクトリ構成は以下の通り。

smart_home
    smart_home.py 
    hue.py

# smart_home.py

import requests
from flask import Flask, request
from hue import hue_on, hue_off

app = Flask(__name__)

 # MESH moveタグからのデータ受取り
@app.route("/lamp", methods=['POST'])
def lamp():
    post = request.data.decode()
    if post=="on":
        hue_on()
    elif post =="off":
        hue_off()   
    return post 

if __name__ == "__main__":
    app.run(host="127.0.0.1", port=5000)

hue.pyには、hue BridgeとRaspberryPiを連携するためのプログラムを記述しています。

hueの公式APIを使ってHue Bridgeへ指示を送るのですが、APIを使うために自宅に設置したHue BridgeのIPアドレスとhue API専用のユーザーネームが必要です。

これらの取得方法については次のステップで説明します。

# hue.py

import requests
import time

hue_api = 'http://<hue bridgeのIPアドレス>/api/<username>/lights'

lamp_on = {"on":True, "bri":127,"hue":41442,"sat":75}
lamp_off = {"on":False}

def hue_on():
    requests.put(hue_api + '/6/state', json = lamp_on)

def hue_off():
    requests.put(hue_api + '/6/state', json = lamp_off)

if __name__ == '__main__':
    hue_on()
    time.sleep(5)
    hue_off()

私の場合はこのFlaskで作ったサーバー(というかAPI)を、ngrokのトンネルサービスで公開しました。

詳しい使い方は過去記事を参照ください。

これで、RaspberryPi側の準備は完了です。

③Hue Bridgeを連携する

続いて、Hue BridgeとRaspberryPiを連携していきましょう。

連携方法はHueの公式ガイドに説明がありますので、その通りにやっていきます。

連携には、Hue BridgeのIPアドレスHue APIのユーザーネームを取得する必要があります。

Hue Bridgeのバージョンについて:
・Hue Bridge v1(第一世代)は既に製品サポートが切れていますが、2021/2/28時点で今回の記事で紹介した範囲内では動作に問題ありませんでした。
どうやらラズパイサーバーとHue Bridgeが同じローカルネットワーク内にあれば動作に問題無いようです。
・今回の記事の内容はもちろんHue Bridge v2(第二世代)を使った場合でも、同じ方法で運用可能です。
・ちなみに私が第一世代を使っている理由は、メルカリで安く入手できたからですw

1.Hue BridgeのIPアドレス確認

Philips Hue Bridge v‪1‬のアプリを取得して、まずBridgeを認識させます。

https://apps.apple.com/jp/app/philips-hue-bridge-v1/id1410176656

アプリの「設定」からBridgeのIPアドレスを確認できます。

2.APIユーザーネームの取得

上で確認したIPアドレスを使って、以下のURLへアクセスします。

http://<bridgeの IP address>/debug/clip.html

※私の場合https接続だとうまくいかなかったので、httpでアクセスしています。

すると、以下のような画面が出てきます。

続けて、以下のように入力して、『GET』ボタンを押します。


URL:api/
Message Body:{“devicetype”:”RaspberryPi3″}


※RaspberryPi3の部分は任意のデバイス名を入力

最初エラーになりますが、Bridge本体の通信ボタンを押してから再度実行すると成功します。

すると「Command Response」の欄にusernameが表示されますので、これを使います。

3.hue.pyの編集

hue.pyスクリプトのIPアドレスとusernameの欄に取得したデータを入力します。

これでBridgeの連携は完了です。

④Hue電球を設置する

最後にHue電球を照明を点灯させたい箇所に設置し、アプリで認識させれば全ての手順が完了です。

まとめ

今回は、地震が来たら自動で照明が点灯するシステムをIoTの知識を活かして自作してみました。

センサを使ってラスパイサーバーで処理するという方法を使えば、

いろんな応用ができて楽しいです。

興味のある方はぜひ試してみてください。

参考書籍

この書籍が参考になりました。

Python×ラズパイ×Google Homeの他、Amazon Echoを使ったIoTシステムの紹介もあります。

自宅のスマートホーム化に熱中できておすすめ。

今回使った製品

IoTカテゴリの最新記事