LoginSignup
0
1

More than 1 year has passed since last update.

Raspberry PiとSwitchbotを使って自然に起きられる光目覚ましを作ってみた(python)

Last updated at Posted at 2022-07-02

はじめに

スマートホーム化第2弾です!今回は光目覚ましを作ってみたいと思います。

Raspberry Pi zero WHとSwitchBotのテープライトを買ってみました〜!
IMG_4637.jpg

IMG_4863.jpg

私はとても寝起きが悪いので、光を徐々に明るくすることで自然にスッキリ起きられるところを目指します!!

必要なもの

  • SwitchBotテープライト
  • Raspberry Pi
  • microSDカード
  • microUSBケーブル

準備

テープライトの設置

テープライトの背面にあるシールをはがして、設置したいところに貼り付けます。
5mあるので、必要に応じて切断します。

今回はデスクとベッドにつけてみました!

IMG_4855.jpg

かっこいい!!!
色のレパートリーが沢山あるので、気分によって変えたりしても楽しそうです。

Raspberry Piの準備

Raspberry Pi Imagerのインストール

公式サイトからRaspberry Pi Imagerをダウンロードします。

microSDカードをPCに接続した状態で、アプリを起動します。

スクリーンショット 2022-07-02 19.44.57.png

OSは「Raspberry Pi OS(32-bit)」を選択し、右下の設定アイコンをクリックします。

以下の設定で保存します

  • SSHを有効(パスワード認証を使う)
  • ユーザー名とパスワードを設定
    • ※2022年版のRaspberry Pi OSではユーザー、パスワード設定が必須になったみたいです
  • ロケール設定

ストレージはmicroSDカードを選択し、「書き込む」ボタンを押します。

10分くらい経つと書き込みが完了します。

SSH有効化

設定に使うファイルはこちらを使用させていただきました。

ダウンロードしたzipファイルを解凍すると、以下のファイルがあります。
スクリーンショット 2022-07-02 22.53.30.png

wpa_supplicant.confを開き、WifiのSSIDとパスワードを入力します。
sshファイルとwpa_supplicant.confをmicroSDカードに入れて準備は完了です。

Raspberry Piの起動

Raspberry PiにmicroSDカードを差し込み、microUSBケーブルで電源と接続します。
(無線接続できるようになっているので、PCと接続しなくても大丈夫です)

点滅が消えたら、PCでターミナルを立ち上げ、以下のコマンドを入れます。

ssh pi@raspberrypi.local

(yes/no[fingerprint])が出たらyesと入力

passwordを聞かれたら、↑で設定したパスワードを入力

スクリーンショット 2022-07-02 23.14.53.png
無事Raspberry Piに接続できました!

Pythonのプログラムを動かす

vi auto_light.py

で以下のコードを保存します

import requests
import json
import sys
import time
import datetime


def getLightId():
    response = requests.get(
        "https://api.switch-bot.com/v1.0/devices", headers=header)
    devices = json.loads(response.text)
    deskLightId = [device["deviceId"] for device in devices['body']
                   ['deviceList'] if "デスクライト(アプリで登録したデバイス名)" == device['deviceName']]
    bedLightId = [device["deviceId"] for device in devices['body']
                  ['deviceList'] if "ベッドライト(アプリで登録したデバイス名)" == device['deviceName']]
    lightList = deskLightId + bedLightId
    return lightList


if __name__ == "__main__":
    wakeUptime = sys.argv[1]
    print(wakeUptime, "時に起きたいな〜")
    header = {"Authorization": "(Switchbotのトークン)"}
    try:
        while True:
            now = datetime.datetime.now()
            if now.hour == int(wakeUptime) - 1:
                lightList = getLightId()
                for light in lightList:
                    url = "https://api.switch-bot.com/v1.0/devices/" + light + "/commands"
                    brightness = {
                        "command": "setBrightness",
                        "parameter": str(100*now.minute/60),
                        "commandType": "command"
                    }
                    requests.post(url, headers=header,
                                  data=json.dumps(brightness))
                print("ライトがついたよ!")
            elif now.hour == int(wakeUptime) + 1:
                lightList = getLightId()
                for light in lightList:
                    url = "https://api.switch-bot.com/v1.0/devices/" + light + "/commands"
                    off = {
                        "command": "turnOff",
                        "parameter": "default",
                        "comandType": "command"
                    }
                    requests.post(url, headers=header, data=json.dumps(off))
                print("ライトが消えたよ!")
            else:
                print("時間外だよ!")
            time.sleep(60)

    except KeyboardInterrupt:
        sys.exit(0)
python auto_light.py 8

で実行!(8のところは起きたい時間を入力)

起きたい時間の1時間前から徐々に電気が明るくなり、起きたい時間の1時間後に自動で電気が消せるようになりました!

1時間前
IMG_4856.jpg

30分前
IMG_4857.jpg

起きたい時間
IMG_4854.jpg

最後に

今回はRaspberry Piでpythonのコードを実行するだけでしたが、
カメラやセンサをつけてAIと組み合わせてみても面白そう!!夢がひろがりますね〜!

(明日はスッキリ起きられるといいな…)

参考資料

【初心者向け】ラズパイの初期設定をするよ【win/mac対応】
2022年版のRaspberry Pi OSではユーザー、パスワード設定が必須に
【SwitchBot】API を使って Python でライトをいじってみた

0
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
1