2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

ラズパイとSwitchbotの温湿度計を使用してLINEに部屋の温湿度を通知したい。

Last updated at Posted at 2022-05-10

はじめに

私はワンちゃん(トイプードル)と一緒に暮らしていて、お留守番をさせているときは
部屋にSwitchbotのカメラと温湿度計を配置して、SwitchbotのIphoneAppで確認できるように
しているのですが、仕事が忙しい時などはアプリを開く暇などなく、室内の温度を確認する
頻度が少ない!と感じました。
そんなことをしていたら部屋の温度が知らないうちに急激に上がった時などがあったら危ない!
と思い、LINEに通知させてIphoneの画面でわかるようにしればよいじゃんと思い、そのベースとなる
仕組みができたのでここに記そう思いまいた。

目次

1.使用物
2.シーケンス図
3.開発手順
4.おわりに

1. 使用物

  • Raspberrypi4
  • SwitchBot温湿度計

2. シーケンス図

3. 開発手順

1.LINE通知

まず、LINEの通知部分については下記リンクを参考にさせていただきました。

LINEのトークンを発行してトークンと送信文字列をパラメーターに
'https://notify-api.line.me/api/notify' にリクエストします。
Tokenはコード内に埋め込みたくなかったので下記のようにローカルでもち、
都度、ファイル読み出しするようにしました。

   #LineTokenの文字列取得
   f = open ('LineToken.txt')    
   line_token = f.readline()
   f.close ( )

2.Switchbot温湿度計から温湿度取得

Switchbotの温湿度計から情報取得する部分については下記リンクを参考にさせていただきました。

Switchbotについてもアプリからトークンを発行します。
トークンをパラメーターに 'https://api.switch-bot.com/v1.0/devices' にリクエストすると
アプリで表示されているSwitchbotの機器のすべてのステータスが取得できます。

今回は、温湿度計のステータス取得を行いたいので下記のように、まず、温湿度計のdevice_idを取得するために
レスポンスデータから "deviceType""Meter" のものの device_idを取得します。

   # Get all device information in your switchbot hub
   response = requests.get("https://api.switch-bot.com/v1.0/devices", headers=header)
   devices  = json.loads(response.text)

   # Get switchbot bot "deviceId" in all device information
   #if部分を取得したい温湿度計(Meter)に変更
   device_id  = [device["deviceId"] for device in devices['body']['deviceList'] if "Meter" == device["deviceType"]]

次に、上記で取得したdevice_idをもとにステータス(温度、湿度、その他)を取得したいので下記のようにリクエストをします。

    # call hygrometer state via switchbot api
    url = "https://api.switch-bot.com/v1.0/devices/" + device_id[0] + '/status'
    response = requests.get(url, headers=header)

これで各実行部分の作成ができました。

3.Main.pyの作成

下記コードでSwitchbot温湿度計からの取得部分とLINEへの通知部分を実行します。

import Switchbot_temp
import LINE_Notification
import json

#実行
def main():
    humid,temp = Temp_Get()
    Line(humid,temp)


def Temp_Get():
    #Switchbotの温湿度計よりstate取得
    resp = Switchbot_temp.Switchbot_Temp_get()
    
    #print(resp.text)   #debugprint

    bot               = json.loads(resp.text)
    deviceId          = bot['body']['deviceId']
    humidity:float    = bot['body']['humidity']
    temperature:float = bot['body']['temperature']

    #debug print
    #print("deviceId    : " + deviceId )
    #print("humidity    : " , humidity )
    #print("temperature : " , temperature )

    return humidity,temperature

def Line(humid:float,temp:float):

    text = "湿度は {0} %で、温度は {1} ℃です。"
    send_text = text.format(humid,temp)
    LINE_Notification.send_line_message(send_text)


if __name__ == "__main__":
    main()

上記をラズパイ上で実行させます。

4. おわりに

今回、初めてQiitaに投稿致しました。
今後も少しずつアウトプットの場として投稿し続けれたらと思います。

GitHubにも本ソースを上げておりますので見ていただけたら幸いです。

2
6
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
2
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?