スイッチボット温湿度計データをpythonでツイートする(備忘録)

環境(前提)

  • SwitchBot 温湿度計(すでにセットアップ済みで、ハブミニと接続できていること)
  • SwitchBot ハブミニ(ハブでもOK)
  • Switchbot アカウント(普通にSwitchbotを使っていれば持っているはず)
  • ツイッターアカウント情報(Tweepyを動かすためのアクセストークンなども)

SwitchBotのトークンを取得する

  1. SwitchBotのアプリを開きます。
  2. 「プロフィール」→「設定」
  3. 「アプリバージョン」を連打10回くらい?
  4. 連打すると開発者向けオプションが出てくるのでタップする
  5. すると、トークンが出てくるので、トークンをコピーしてメールなど使って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に投稿することができます。(コードのきれいさは無視してるので、各自きれいにしていただければと思います。)
なにかの参考になればと思います。

にゃんこ
  • にゃんこ
  • よく遊ぶゲームは
    ・CitiesSkylines
    ・RUST
    ・TransportFever2
    です。
    使える言語は
    C++、Pythonぐらいです
    趣味としては旅行だったり、メルカリ・ヤフオクで売ってたりします

コメントする

メールアドレスが公開されることはありません。 が付いている欄は必須項目です

日本語が含まれない投稿は無視されますのでご注意ください。(スパム対策)