Yeelight介绍
1. 介绍
Yeelight是小米生态链中的WiFi智能灯泡,本文介绍它的接入和控制实现;
Yeelight使用的是自定义的私有协议,该协议采用了类似SSDP的发现机制和基于JSON的控制命令
2. 接入
Yeelight并没有配备网关(Hub),为了将其接入到平台中,需要配置所在网络的SSID和密码以供其使用
Yeelight设备采用的是SmartConfig/QuickConnect方式,这是不对外开放的.
SmartConfig是没有人机交互界面WiFi设备接入网络的安全方式,各厂商实现均不相同
其接入详情已有网友进行了截获,可参考<Xiaomi's MiHome Binary protocol>
3. 发现
这里的发现是指平台发现Yeelight的能力,采用的是类似SSDP的发现机制
3.1 SSDP
SSDP,Simple Service Discovery Protocol,简单服务发现协议,用于发现网络中的设备和服务
SSDP协议构建在HTTPU和HTTPMU之上;HTTPU是以UDP实现的HTTP协议,HTTPMU是广播的HTTPU
SSDP协议有两种角色: Device和Control Point
SSDP消息分为设备查询消息(M-SEARCH)、设备通知消息(NOTIFY)两种
3.1.1 查询消息
SSDP查询消息有组播(multicast)和单播(unicast)两种,由Control Point进行发送
其中组播实例如下
M-SEARCH * HTTP/1.1 /* 消息头 */
HOST: 239.255.255.250: /* 地址和端口 */
MAN:
"ssdp:discover"
/* 固定值 */
MX: seconds to delay response /* 最长等待时间 */
ST: search target /* 服务查询目标 */
USER-AGENT: OS/version UPnP/1.1 product/version /* 可选, UPnP厂商指定 */
对于单播消息,其HOST字段为hostname:portNumber
查询响应消息,一般如下
HTTP/1.1 OK
CACHE-CONTROL: max-age = seconds until advertisement expires
DATE: when response was generated
EXT:
LOCATION: URL for UPnP description for root device
SERVER: OS/version UPnP/1.1 product/version
ST: search target
USN: composite identifier for the advertisement
3.1.2 通知消息
SSDP通知消息有两种: 设备在线消息(Device available)和设备离线消息(Device unavailable);由Device进行发送
设备在线消息实例如下
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:
CACHE-CONTROL: max-age = seconds until advertisement expires
LOCATION: URL for UPnP description for root device
NT: notification type
NTS: ssdp:alive
SERVER: OS/version UPnP/1.1 product/version
USN: composite identifier for the advertisement
设备离线消息实例如下
NOTIFY * HTTP/1.1
HOST: 239.255.255.250:
NT: notification type
NTS: ssdp:byebye
USN: composite identifier for the advertisement
3.2 Yeelight发现
Yeelight服务的发现过程如下图所示
Yeelight使用修改过的SSDP协议,使用查询和通知消息
3.2.1 Yeelight查询消息
查询消息如下
M-SEARCH * HTTP/1.1
HOST:
239.255.255.250:1982
MAN:
"ssdp:discover"
ST: wifi_bulb
查询回应消息如下
HTTP/1.1 OK
Cache-Control: max-age=
Date:
Ext:
Location: yeelight://192.168.1.239:55443
Server: POSIX UPnP/1.0 YGLC/
id: 0x000000000015243f
model: color
fw_ver:
support: get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb
power: on
bright:
color_mode:
ct:
rgb:
hue:
sat:
name: my_bulb
其中support字段显示了设备所有支持的控制方法
3.2.2 Yeelight通知消息
通知消息如下
NOTIFY * HTTP/1.1
Host: 239.255.255.250:
Cache-Control: max-age=
Location: yeelight://192.168.1.239:55443
NTS: ssdp:alive
Server: POSIX, UPnP/1.0 YGLC/
id: 0x000000000015243f
model: color
fw_ver:
support: get_prop set_default set_power toggle set_bright start_cf stop_cf set_scene cron_add cron_get cron_del set_ct_abx set_rgb
power: on
bright:
color_mode:
ct:
rgb:
hue:
sat:
name: my_bulb
4. 控制
Yeelight设备的控制是基于JSON的自定义协议,以"\r\n"结尾;从Yeelight发现过程中,我们知道了Yeelight设备的IP地址和端口(192.168.1.239:55443),通过连接该地址和端口即可实现对Yeelight的控制
Yeelight控制可分为三种消息: COMMAND、RESULT、NOTIFICATION
4.1 COMMAND消息
平台可以通过COMMAND消息来实现对Yeelight设备的控制,其消息格式如下
其中各字段含义如下
- id_pair: 发送者初始化该字段
- method_pair: 控制方法, 为SUPPORT方法的一种
- params_pair: 不同控制方法有不同的参数
实例如下
目前Yeelight支持的方法如下
4.2 RESULT消息
当Yeelight设备收到COMMAND消息时,会回应一个RESULT消息,包含了COMMAND消息执行或查询的结果
其消息格式如下
各字段含义如下
- id_pair: 与COMMAND消息中id_pair字段相同
- result_pair : 执行结果
执行成功实例如下
执行失败实例如下
查询结果实例如下(COMMAND为get_prop:[power, bright])
4.3 NOTIFICATION消息
当Yeelight设备属性状态改变时,会发送一个NOTIFICATION消息给所有连接的平台,其消息格式如下
其中params_pair格式如下
实例如下
目前Yeelight支持的属性如下
5. Broadlink
Broadlink主打产品是基于WiFi的智能插座,下面大概介绍一下其工作原理
5.1 接入
Broadlink插座的接入并没有使用SmartConfig,而是使用自定义方式
初次购买或者reset后的插座会处于AP模式;用户端连接该AP后,发送包含平台网络SSID和密码的自定义组播报文 ;插座收到报文解析后即可获得SSID和密码,随后加入平台网络
5.2 发现
为了探测Broadlink插座,用户端/平台需要发送自定义组播报文,网络中的Broadlink插座收到组播报文后会回应包含Broadlink设备类型和MAC地址的报文,这样平台就知道了插座的存在
5.3 控制
Broadlink插座在进行控制前需要进行认证,认证后会获取ID和Key,这两个数据被命令报文所需
控制报文比较简单,也是自定义协议;中间还有一个learning mode的命令不知道具体是干啥的
具体的协议细节可参考<Broadlink RM2 network protocol>
可以看出Broadlink完全自己搞了一套,并不具备兼容性和拓展性。
参考:
<UPnP hacks>
<YeeLight library>
<对蓝牙灯泡进行逆向工程>
<UPnP Device Architecture 1.1>
<Yeelight WiFi Light Inter-Operation Specification>
Yeelight介绍的更多相关文章
- CSS3 background-image背景图片相关介绍
这里将会介绍如何通过background-image设置背景图片,以及背景图片的平铺.拉伸.偏移.设置大小等操作. 1. 背景图片样式分类 CSS中设置元素背景图片及其背景图片样式的属性主要以下几个: ...
- MySQL高级知识- MySQL的架构介绍
[TOC] 1.MySQL 简介 概述 MySQL是一个关系型数据库管理系统,由瑞典MySQL AB公司开发,目前属于Oracle公司. MySQL是一种关联数据库管理系统,将数据保存在不同的表中,而 ...
- Windows Server 2012 NIC Teaming介绍及注意事项
Windows Server 2012 NIC Teaming介绍及注意事项 转载自:http://www.it165.net/os/html/201303/4799.html Windows Ser ...
- Linux下服务器端开发流程及相关工具介绍(C++)
去年刚毕业来公司后,做为新人,发现很多东西都没有文档,各种工具和地址都是口口相传的,而且很多时候都是不知道有哪些工具可以使用,所以当时就想把自己接触到的这些东西记录下来,为后来者提供参考,相当于一个路 ...
- JavaScript var关键字、变量的状态、异常处理、命名规范等介绍
本篇主要介绍var关键字.变量的undefined和null状态.异常处理.命名规范. 目录 1. var 关键字:介绍var关键字的使用. 2. 变量的状态:介绍变量的未定义.已定义未赋值.已定义已 ...
- HTML DOM 介绍
本篇主要介绍DOM内容.DOM 节点.节点属性以及获取HTML元素的方法. 目录 1. 介绍 DOM:介绍DOM,以及对DOM分类和功能的说明. 2. DOM 节点:介绍DOM节点分类和节点层次. 3 ...
- HTML 事件(一) 事件的介绍
本篇主要介绍HTML中的事件知识:事件相关术语.DOM事件规范.事件对象. 其他事件文章 1. HTML 事件(一) 事件的介绍 2. HTML 事件(二) 事件的注册与注销 3. HTML 事件(三 ...
- HTML5 介绍
本篇主要介绍HTML5规范的内容和页面上的架构变动. 目录 1. HTML5介绍 1.1 介绍 1.2 内容 1.3 浏览器支持情况 2. 创建HTML5页面 2.1 <!DOCTYPE> ...
- ExtJS 4.2 介绍
本篇介绍ExtJS相关知识,是以ExtJS4.2.1版本为基础进行说明,包括:ExtJS的特点.MVC模式.4.2.1GPL版本资源的下载和说明以及4种主题的演示. 目录 1. 介绍 1.1 说明 1 ...
随机推荐
- Leetcode代码补全——链表
通过补全代码可以更深刻的体会到,链表就是一个存储方式,通过一单元的存储指向下一单元,而查看单元内容通过头部开始的指针依次遍历.这是leetcode里融合两个链表的题目,具体代码如下: #encodin ...
- MyCAT+MySQL 搭建高可用企业级数据库集群——第2章 MyCat入门
2-1 章节综述 2-2 什么是MyCat 2-3 什么是数据库中间层 2-4 MyCat的主要作用 2-5 MyCat基本元素 2-6 MyCat的安装 2-1 章节综述 1.掌握Mycat的基础概 ...
- DPDK 网卡RSS(receive side scaling)简介
网卡RSS(receive side scaling)简介 RSS是一种网卡驱动技术,能让多核系统中跨多个处理器的网络收包处理能力高效能分配.注意:由于同一个核的处理器超线程共享同一个执行引擎,这个效 ...
- Spring MVC温故而知新 – 参数绑定、转发与重定向、异常处理、拦截器
请求参数绑定 当用户发送请求时,根据Spring MVC的请求处理流程,前端控制器会请求处理器映射器返回一个处理器,然后请求处理器适配器之心相应的处理器,此时处理器映射器会调用Spring Mvc 提 ...
- hdu2421(数学,因式分解素数筛)
Xiaoming has just come up with a new way for encryption, by calculating the key from a publicly view ...
- SQL Server 监测语句
qs.creation_time, last_execution_time, total_physical_reads, total_logical_reads, total_logical_writ ...
- 【bzoj2438】[中山市选2011]杀人游戏 Tarjan
题目描述 一位冷血的杀手潜入 Na-wiat,并假装成平民.警察希望能在 N 个人里面,查出谁是杀手.警察能够对每一个人进行查证,假如查证的对象是平民,他会告诉警察,他认识的人, 谁是杀手, 谁是平民 ...
- BZOJ1927 [Sdoi2010]星际竞速 【费用流】
1927: [Sdoi2010]星际竞速 Time Limit: 20 Sec Memory Limit: 259 MB Submit: 2582 Solved: 1601 [Submit][St ...
- 停课day5
一转眼,已经停课五天了. 高二大佬们已经都走了,在机房里面呆着,有时感觉很孤寂. 但是为了能学好竞赛,这些都是在所不惜的. 好像多打打比赛啊,可是cf要FQ,洛谷之类的比赛还不勤. 哎,先去学一发SP ...
- Jquery 获取checkbox的checked问题以及解决方案
转载自:http://www.cnblogs.com/-run/archive/2011/11/16/2251250.html 这个郁闷了,今天写这个功能的时候发现了问题,上网找了好多资料对照,更加纠 ...