9
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 3 years have passed since last update.

スマートライト「Yeelight」をPythonからクラウドを使わずに制御する

Posted at

yeelight.jpg
(写真はソフトバンクセレクションの製品紹介ページより)

3行まとめ

  • Yeelightはクラウドに依存せず、ローカルネットワーク経由で制御でき、APIが公開されている。
  • APIを実装したPythonパッケージもあり、短いコードで制御できる。
  • しかも比較的安価なので、おうちハックには最適のスマートライト。

1. はじめに

 2020年4月24日、ソフトバンクC&Sよりスマートライト「Yeelight」が日本国内向けに発売されました。
このスマートライトには「LAN Control」(後述)という機能があり以前から気になっていましたが、日本で発売されたので早速購入して、Pythonから制御してみました。もちろん技適もバッチリです。

2. Yeelightとは

 「Yeelight」(日本語公式ページ)はスマートライトのブランド名で、スマートフォンや家電で有名な「Xiaomi」(小米科技、シャオミ)の製品です。
電球形、テープ形、ランタン形と様々な製品がありますが、ここでは電球形のスマートライトについて述べます。

 今回購入したモデル「YLDP13YL」は、Wi-Fi接続、24ビットカラー(約1677万色)、スマートスピーカー対応(Google Home、Alexa、Apple HomeKit)と、一般的な電球形スマートライトと同じような特徴を持ちますが、「LAN Control」という特徴的な機能を持ちます。

 「LAN Control」については後述しますが、Yeelightのその他の仕様についてはソフトバンクセレクションの製品紹介ページなどをご参照ください。

 上記のソフトバンクセレクションの他、Amazon.co.jp、ヨドバシ.comなどから購入することができます。

サイト モデル 1個 2個セット 4個セット
Amazon.co.jp マルチカラー 3,300円 5,940円 11,880円
電球色(調光のみ) 2,200円 3,960円 7,920円
ヨドバシ.com マルチカラー 3,630円 - -

3. LAN Controlとは

 Yeelightの特徴的な機能「LAN Control」は、その名の通りLAN(Local Area Network)を経由してライトを制御するための機能で、しかもそのAPIが公開されています。
クラウドを経由せず、LAN内で完結するため、遅延の少ない制御を行うことができます。
また、APIが公開されているため、独自アプリからの制御も自由自在です。

 詳しくはYeelightの開発者向けページをご参照ください。(ページのロードが激遅なので気長にどうぞ)

4. yeelightパッケージ

 前述のAPI仕様を読むまでもなく、Pythonであれば有志によるyeelightパッケージが公開されており、簡単に制御することができます。本記事の執筆時点では0.5.1でした。

mac$ pip install yeelight==0.5.1

 APIは大きくライトの探索(ディスカバリ)と制御に分かれています。それぞれ、見てみます。

4.1. 探索

 Yeelightをセットアップし、「LAN Control」を有効化すると、yeelight.discover_bulbs()でライトを検出することができます。
内部的にはUDPマルチキャストを使用しているので、それが到達する範囲内から実施する必要があります。(一般的には、同じWi-Fiネットワークに接続されていれば大丈夫かと思います)

 具体例を以下に示します。

mac$ python
Python 3.7.0 (default, Jun 28 2018, 07:39:16)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import yeelight
>>> yeelight.discover_bulbs()
[{'ip': '192.168.1.81', 'port': 55443, 'capabilities': {'id': '0x0000000012429e65', 'model': 'color4', 'fw_ver': '27', 'support': 'get_prop set_default set_power toggle set_bright set_scene cron_add cron_get cron_del start_cf stop_cf set_ct_abx adjust_ct set_name set_adjust adjust_bright adjust_color set_rgb set_hsv set_music', 'power': 'on', 'bright': '100', 'color_mode': '2', 'ct': '2000', 'rgb': '9109504', 'hue': '0', 'sat': '100', 'name': ''}}]

 なお、ライトのIPアドレスが既に分かっている場合、この手順は不要です。ライトのIPアドレスはYeelightアプリからも確認することができます。

4.2. 制御

 ライトのIPアドレスが分かれば、ライトを制御することができます。認証などはありません。ネットワークの構成にはご注意ください。

 具体例を以下に示します。上から順番にライトON、OFF、ON/OFFの切り替え、明るさの設定、RGB値による色の設定、HSV値による色の設定、色温度による色の設定、プロパティの取得の例です。

mac$ python
Python 3.7.0 (default, Jun 28 2018, 07:39:16)
[Clang 4.0.1 (tags/RELEASE_401/final)] :: Anaconda, Inc. on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import yeelight
>>> bulb = yeelight.Bulb("192.168.1.81")
>>> bulb.turn_on()
'ok'
>>> bulb.turn_off()
'ok'
>>> bulb.toggle()
'ok'
>>> bulb.set_brightness(50)
'ok'
>>> bulb.set_rgb(255, 0, 0)
'ok'
>>> bulb.set_hsv(320, 100, 50)
'ok'
>>> bulb.set_color_temp(3000)
'ok'
>>> bulb.get_properties()
{'power': 'on', 'bright': '100', 'ct': '3000', 'rgb': '8432127', 'hue': '221', 'sat': '49', 'color_mode': '2', 'flowing': '0', 'delayoff': '0', 'music_on': '0', 'name': None, 'bg_power': None, 'bg_flowing': None, 'bg_ct': None, 'bg_bright': None, 'bg_hue': None, 'bg_sat': None, 'bg_rgb': None, 'nl_br': None, 'active_mode': None, 'current_brightness': '100'}

 他にもいろいろ機能がありますので、開発者向けのAPI仕様書、yeelightパッケージのAPIリファレンスをご参照ください。

 それでは良いおうちハックを!

9
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
9
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?