こんにちは、えびかずきです。
今回は、地震が来たら自動で照明が点くシステムを作ってみたので紹介します!
こんな人におすすめ:
・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製)を使用します。
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 v1のアプリを取得して、まずBridgeを認識させます。
アプリの「設定」から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システムの紹介もあります。
自宅のスマートホーム化に熱中できておすすめ。
コメントを書く