SwitchBot用のGem作った
2021/06/28
スマートリモコンをNature RemoからSwitchBotに乗り換えてからいろいろなSwitchBotの製品を使うようになったので、Rubyで操作できるようにAPIクライアントのGemを作った
switchbotのネームスペースを使うのはかなり躊躇したが、ちゃんとメンテする覚悟ができたので使わせてもらった
https://rubygems.org/gems/switchbot
使い方
インストール
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の書き方を参考にして作ってみたがこれいいのか自信がない
こうした方がいいとかこの書き方はまずいとかあったら教えてくれたら嬉しい