環境(前提)
- SwitchBot 温湿度計(すでにセットアップ済みで、ハブミニと接続できていること)
- SwitchBot ハブミニ(ハブでもOK)
- Switchbot アカウント(普通にSwitchbotを使っていれば持っているはず)
- ツイッターアカウント情報(Tweepyを動かすためのアクセストークンなども)
SwitchBotのトークンを取得する
- SwitchBotのアプリを開きます。
- 「プロフィール」→「設定」
- 「アプリバージョン」を連打10回くらい?
- 連打すると開発者向けオプションが出てくるのでタップする
- すると、トークンが出てくるので、トークンをコピーしてメールなど使ってPCに送る。
TwitterのAPIを使うときのアクセストークンなどの取得
- 「TwitterAPI 作成」と検索して調べるとわかりやすいサイトがいろいろあるので、そちらを参照してください。
- 私は以下を参考にさせていただきました。
- 必要なのは、「consumer_key , consumer_secret , access_token , access_token_secret」です。
Switchbot温湿度計のデータを取得する
pythonで以下のように記述します。
Switchbotのトークンと、温湿度計の名前を書き換えてください。私の場合は「温湿度計」というシンプルな名前だったのでそのように記述しています。
足りないモジュール等はpipなどでインストールしてください。
import requests
import json
import sys
# Please get your access token via switchbot app
header = {"Authorization": "ここにトークンをいれる"}
# 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 deviceId for hygrometer of "your hygrometer device name" in all device information
device_id = [device['deviceId'] for device in devices['body']['deviceList'] if "温湿度計" in device['deviceName']]
# 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)
res=json.loads(response.text)
print(res['body']['temperature'])
print(res['body']['humidity'])
これを実行してうまくいけば、温度と湿度が出力されます。
Twitterに投稿する
まずは以下の文を記述し、実行してみてください。対象のアカウントにツイートされると成功です。
またトークンなどは書き換えてください。
tweepyがない場合はインストールしてください。
#tweetを投稿
import tweepy
# 取得した各種キーを格納-----------------------------------------------------
consumer_key ="入力してください"
consumer_secret ="入力してください"
access_token="入力してください"
access_token_secret ="入力してください"
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
#-------------------------------------------------------------------------
# ツイートを投稿
api.update_status("テスト投稿")
自動で温度をツイートさせる
上記までできたので、今度は完成形を作成します。
import requests
import json
import sys
# Please get your access token via switchbot app
header = {"Authorization": "ここにトークンをいれる"}
# 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 deviceId for hygrometer of "your hygrometer device name" in all device information
device_id = [device['deviceId'] for device in devices['body']['deviceList'] if "温湿度計" in device['deviceName']]
# 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)
res=json.loads(response.text)
print(res['body']['temperature'])
print(res['body']['humidity'])
temp=res['body']['temperature']
hum=res['body']['humidity'])
import tweepy
# 取得した各種キーを格納-----------------------------------------------------
consumer_key ="入力してください"
consumer_secret ="入力してください"
access_token="入力してください"
access_token_secret ="入力してください"
# Twitterオブジェクトの生成
auth = tweepy.OAuthHandler(consumer_key, consumer_secret)
auth.set_access_token(access_token, access_token_secret)
api = tweepy.API(auth)
#-------------------------------------------------------------------------
# ツイートを投稿
api.update_status("今の部屋の温度は"+str(temp)+"℃、湿度は"+str(hum)+"%")
このプログラムを実行させるとSwitchBot温湿度計のデータをTwitterに投稿することができます。(コードのきれいさは無視してるので、各自きれいにしていただければと思います。)
なにかの参考になればと思います。