Shelly 是一家专注于智能家居领域的公司,提供智能插座、智能灯泡、智能开关等产品。该公司的产品具有可靠性高、易于使用和成本效益高等特点,深受用户喜爱。
据统计,Shelly 的智能家居产品在欧洲市场占有率较高,特别是在东欧市场,Shelly 产品的市场份额已经超过了 10%。Shelly 的产品也广泛应用于工业自动化领域,得到了众多企业的认可。
Shelly 的智能插座可以通过三方接入方式,与其他智能家居设备进行联动,从而实现更多的智能化场景。使用 Shelly 的智能插座,用户可以通过手机 APP 远程控制插座的开关状态,还可以设置定时开关、倒计时等功能,方便用户的生活。
除了智能插座,Shelly 还推出了智能灯泡、智能开关等多种产品,为用户提供全方位的智能家居解决方案。在智能家居市场中,Shelly 的产品备受关注,得到了广大用户的认可。

添加设备

想要深入了解Shelly的设备开放情况,首先的有设备。添加一个设备到自己的账号下,我这里用的是 plus-plug-s ,欧规的。
notion image
notion image
下面是一些相关的产品资料:
 
使用Shelly cloud app来配网
notion image
配网就是和普通的智能设备一样,先选择设备要添加的WiFi,输入密码,然后搜索设备的AP热点,这时候点击添加,手机会连上这个设备开的AP热点,APP与设备进行一些通信后,重连会有外网的路由器,这时候APP向服务器注册设备,完成整个添加流程。
这里有个问题:这个plug-s是有蓝牙的,不懂为什么配网不走蓝牙添加,交互体验会好很多,我也尝试了蓝牙添加,一直没有搜到设备。
notion image
notion image
配网完成后,可以在路由器的后台看到一个名为 shellyplug-s 开头的设备连接。
notion image
notion image
 
通过路由器后台可以看到,连接的是欧洲的谷歌云服务器,端口应该自定义的,不是mqtt的默认端口,协议方面没有抓包看,从控制端的协议来看,应该是websocket json格式。
notion image
notion image
APP 抓包查看控制和实时接收设备变化用的什么技术方案
控制,是直接发送HTTP请求去控制的
notion image
notion image
而实时状态,是通过websocket来同步的
notion image
notion image

个人云云对接到shelly

首先,先在网页版或者APP的个人设置里面获取个人的云端秘钥和服务器地址。记下备用。
notion image
构造HTTP请求,这里的`server_uri`和`auth_key` 就是刚才获取的秘钥和云端地址。需要注意的是`device_id`是在设备信息页面的十六进制的值,十进制的不管用。
获取设备状态:
notion image
notion image
控制设备开关:
notion image
实时状态变化可以通过websocket连接监听变化事件,这里使用的TOKEN,可以通过OAUTH授权获取,但是根据文档我获取一直失败。
notion image
这里我就直接使用APP抓包获取到的TOKEN进行连接了,也是可以使用的。实时状态和控制都可以通过websocket连接进行。
notion image

商务云云对接到shelly

公司云云对接Shelly,就是通过公司服务器,可以为多人提供控制Shelly设备,与个人使用的云对接方式基本没有区别。只是公司接入可能会涉及商务。
首先,需要与官方邮件联系,获取到itg和token,作为获取jwt的认证凭证。
notion image
然后在服务器(需要有公网IP,可以没有域名)上起一个http server,实现个post接口,比如拿python来快速实现一个。作为绑定完账号后的回调接口。示例代码:
使用检查下服务情况
notion image
notion image
 
构建绑定地址并访问,如 https://my.shelly.cloud/integrator.html?itg=TAG&cb=http://localhost:8999
notion image
 
如果账号下没有设备的话,绑定流程不算成功,显示如下
notion image
这个绑定页面实际上就是进行登录,然后获取设备列表,用户选择了设备之后,再进行一个同步。
notion image
 
账号下有设备页面如下,这时候就可以选择设备进行授权了,每个设备都可以单独给查看和控制权限。
notion image
当之前已经授权过一个设备时,在账号下再新增设备,不会自动同步到第三方,需要重新授权该设备。
notion image
绑定成功后会提示:
notion image
此时回调接口(回调地址需要是公网地址,不能是本机起的服务)会收到POST请求,请求里面会包含设备的名字。目前看在APP上改名字不会实时同步到三方接口这边,只有重新绑定时候才能更新。
notion image
 
接着就可以通过wss连接,连接到shelly的云服务器,实时监听和处理设备变化消息。连接wss示例(需要执行 npm i ws 安装下依赖库)。HOST 参数的值就是上面用户绑定并选设备时候请求到回调地址中带的。
连接成功如:
notion image
 
绑定完成之后websocket连接就可以收到设备相关消息
notion image
 
取消授权时候收到的回调请求
notion image
取消控制授权后发送控制消息返回
notion image
 
开关状态变化时候websocket收到的消息
notion image
正常放置状态下,状态也会不定时报上来。目前看间隔没有明显规律,但不会太频繁
notion image
 
控制设备时候的消息
notion image
在离线消息同步
notion image
 
 

Shelly 局域网访问设备页面

notion image
局域网可以多设置一些选项
notion image
配置mqtt连接,需要本地先起一个mqtt服务端,或者用其他公有的mqtt云,这里我本地用docker起了个emqx的服务端,然后再简单配置下连接mqtt的配置。
notion image
notion image
配置了mqtt连接后,可以看到,状态上报是30s间隔
notion image
上报的消息如下,topic表示了协议字段,payload为具体值。这时候设备和Shelly的云端连接是断开的,用APP不能控制设备。
notion image
在局域网下,能打开debug日志,方便提供给官方售后定位问题。
notion image
notion image
 
还能设置一些开关事件的HTTP调用,比如这里设置打开开关时候请求一个地址
notion image
notion image
 
设置AP漫游,当信号强度大于设定值时,优先连入该AP点
notion image
 

Shelly 网页版访问设备

notion image

Shelly APP 访问设备页面

notion image

📎 参考链接

Google Nest恒温器云云对接流程【转载】国际化与本地化
Loading...