高木のブログ

SwitchBot用のGem作った

2021/06/28

スマートリモコンをNature RemoからSwitchBotに乗り換えてからいろいろなSwitchBotの製品を使うようになったので、Rubyで操作できるようにAPIクライアントのGemを作った

switchbotのネームスペースを使うのはかなり躊躇したが、ちゃんとメンテする覚悟ができたので使わせてもらった

https://rubygems.org/gems/switchbot

ytkg/switchbot - GitHub

使い方

インストール

Gemfile
gem 'switchbot'
$ bundle install

もしくは

$ gem install switchbot

初期化

require 'switchbot'

client = Switchbot::Client.new('YOUR_TOKEN')

デバイス一覧を取得

client.devices
#=> {:status_code=>100,
#    :body=>
#     {:device_list=>
#       [{:device_id=>"500291B269BE",
#         :device_name=>"Living Room Humidifier",
#         :device_type=>"Humidifier",
#         :enable_cloud_service=>true,
#         :hub_device_id=>"000000000000"}],
#      :infrared_remote_list=>
#       [{:device_id=>"02-202008110034-13",
#         :device_name=>"Living Room TV",
#         :remote_type=>"TV",
#         :hub_device_id=>"FA7310762361"}]},
#    :message=>"success"}

デバイスのステータスを取得

client.status(device_id: 'C271111EC0AB')
# or
client.device('C271111EC0AB').status
#=> {:status_code=>100,
#    :body=>
#     {:device_id=>"C271111EC0AB",
#      :device_type=>"Meter",
#      :hub_device_id=>"FA7310762361",
#      :humidity=>52,
#      :temperature=>26.1},
#    :message=>"success"}

コマンドを実行

client.commands(device_id: 'C271111EC0AB', command: 'turnOn')
# or
client.device('C271111EC0AB').commands(command: 'turnOn')
# or
client.device('C271111EC0AB').on
#=> {:status_code=>100,
#    :body=>{},
#    :message=>"success"}

使用例

スマート加湿器

SwitchBotのスマート加湿器が止まっていたら起動させるスクリプトで書いたものをRubyで書き直す

app.rb
require 'switchbot'

client = Switchbot::Client.new('YOUR_TOKEN')
humidifier = client.device('DEVICE_ID')

humidifier.on if humidifier.off?

onとoff?のメソッドしか使わなかったのでDeviceクラスを使ったが、一応Humidifierクラスもあってそれ使えばモードの切り替えも可能

humidifier = client.humidifier('DEVICE_ID')

humidifier.low
humidifier.medium
humidifier.high

ライト

これは製品ではなくて、SwitchBot Hubにリモコン登録したライトのこと

電源のオン・オフはもちろん、明るさの調整ができる

light = client.light('DEVICE_ID')

light.on
light.brightness_up
light.brightness_down
light.off

Issue、Pull Request大歓迎

一応最低限操作はできるけど、まだまだ未完成なので協力してくれる方募集中
いくつかのAPIクライアントGemの書き方を参考にして作ってみたがこれいいのか自信がない
こうした方がいいとかこの書き方はまずいとかあったら教えてくれたら嬉しい


Written by ytkg, Twitter, GitHub

Pixela