『瀚思彼岸』» 智能家居技术论坛

 找回密码
 立即注册
查看: 5741|回复: 11

[经验分享] 老板厨房电器接入HASS记录

[复制链接]

4

主题

68

帖子

912

积分

论坛技术达人

积分
912
金钱
839
HASS币
0
发表于 2020-2-16 20:26:55 | 显示全部楼层 |阅读模式
本帖最后由 zxytddd 于 2020-2-16 20:31 编辑

被封在家里,刚好可以折腾一下智能。本着拓展HASS使用场景,丰富论坛技术储备(水一贴)的精神,仔细钻研了家里买的老板厨电的智能设备。

0. 先说一下结果
没能完全解决遇到的所有问题,自然也没能做出hass里使用的custom_component。
但是途中遇到了很多坑,以至于目前还没能全部完美解决。但是明天就开始上班了,没时间继续折腾研究了,所以先将目前得到的结论发帖总结。
一方面是给自己做个记录,另一方面也让论坛里的感兴趣的大神提供思路和方法。

1. 家里的老板厨电
目前家里有2个老板的智能厨电,分别是油烟机 SE638与蒸箱HS906。
本帖讨论的方法理论上适用于所有老板牌的电器。


2. 老板厨电的原生控制原理:
经过对老板厨具的app(ROKI智能烹饪)与油烟机的抓包分析,发现所有的控制都使用MQTT协议。
非常简单的MQTT协议,而且没有使用TLS加密。这也就意味着通过抓包可以获取所有所需的数据包。
每个设备(包括手机与电器)都有一个自己的ClientID,ClientID长度为17字节,前5位为型号,后12位为一个独一无二的字符串。
手机和每个设备之间的通信,都是直接通过MQTT协议进行的。
比如说油烟机的ClientID为:SE638p4E715R4Mo00;手机客户端的ClientID为:RKDRD9zMQZ1I1oym2
那么他们2个之间的通信使用如下方式:
手机->油烟机:
    topic: /u/SE638/p4E715R4Mo00
    message: RKDRD9zMQZ1I1oym2+消息类型(1字节)+消息内容
油烟机->手机:
    topic: /u/RKDRD/9zMQZ1I1oym2
    message: SE638p4E715R4Mo00+消息类型(1字节)+消息内容


因此只要知道了消息类型和消息内容的定义,就可以在整个MQTT协议里向电器发送指令了。
经过对手机app的反编译,得到了所有类型的电器的所有的消息类型。

3. 接入HASS
知道了原理,接下来接入HASS就很简单了。一共有以下2个思路:
3.1 模拟手机APP,hass component连接老板mqtt服务器,模拟手机发送mqtt信息
这个方案已经测试成功,但是因为依赖外网,并且需要随时与服务器保持同步,如果以后有固件升级,还要随时追踪老板官方的方案进行更新,因此我没有仔细的写,只是做了个简单的demo。有兴趣的伙伴可以留言,我会把半成品发上来。


3.2 内网DNS劫持MQTT服务器的域名,使厨电连接到局域网内的mqtt服务器上
这样实现真正的局域网控制,彻底断绝未来老板官方更新可能带来的不稳定性与维护成本
本来这个方案在3.1的基础上很好改,但是因为我家里的这个油烟机的MQTT客户端有个bug,导致自己局域网里的mqtt服务器拒绝其连接。所以整个工作暂且搁置。


3.3 暂未解决的bug
油烟机在进行mqtt连接的时候,需要发送2个字段protocol_name 和 protocol_version, 这2个值是需要对应的。
如果是MQTT3.1 则 protocol_name 为 "MQIsdp", protocol_version 为 0x03,
如果是MQTT3.1.1 则 protocol_name 为 "MQTT", protocol_version 为 0x04,
但是油烟机的MQTT Client却偏偏发送的是"MQIsdp"与0x04。因此不匹配,被服务器拒绝。


3.4 bug解决思路
我使用MQTT服务器为docker里搭建的mostuitto-1.6.8。其源码文件handle_connect.c中有一段里写了这个判断的逻辑,只要修改这段代码重新编译即可解决问题。但是对于docker不是很熟悉,不知道如何重新编译docker容器里的程序的源码,所以暂时不知道如何解决。当然更简单的办法是换个不校验这个字段的MQTT服务器,如果哪位大神如果见多识广,还请留言,不胜感激。

4. 总结
虽然问题没能解决,但是本着分享的精神(折腾了一定要水一贴),将目前的结论先发上来。
顺便吐槽一下老板智能的物联网工程师。。。



1.PNG

评分

参与人数 1金钱 +20 收起 理由
+ 20 看好楼主,加油!

查看全部评分

回复

使用道具 举报

1

主题

237

帖子

962

积分

论坛积极会员

积分
962
金钱
725
HASS币
0
发表于 2020-2-16 21:18:37 | 显示全部楼层
鼓励鼓励,你是最棒的!  等你更新!
回复

使用道具 举报

1

主题

98

帖子

484

积分

中级会员

Rank: 3Rank: 3

积分
484
金钱
386
HASS币
0
发表于 2020-2-17 00:01:46 | 显示全部楼层
厉害厉害,感谢楼主提供了一个改造家里智能家电的思路
回复

使用道具 举报

18

主题

593

帖子

4019

积分

版主

Rank: 7Rank: 7Rank: 7

积分
4019
金钱
3411
HASS币
40
发表于 2020-2-17 00:55:46 | 显示全部楼层
虽然没有老板的电器,但持续关注。
回复

使用道具 举报

5

主题

193

帖子

2714

积分

金牌会员

Rank: 6Rank: 6

积分
2714
金钱
2521
HASS币
0
发表于 2020-2-17 12:40:56 | 显示全部楼层
建议自建一个mqtt服务器然后自动同步老板的mqtt服务器。
回复

使用道具 举报

0

主题

90

帖子

761

积分

高级会员

Rank: 4

积分
761
金钱
671
HASS币
0
发表于 2020-2-17 13:03:30 | 显示全部楼层
很棒 参考价值很大
回复

使用道具 举报

6

主题

138

帖子

791

积分

高级会员

Rank: 4

积分
791
金钱
653
HASS币
0
发表于 2020-2-17 15:21:09 | 显示全部楼层
docker里的映像也是人做出来的,可以git clone mostuitto的代码,自己做个docker映像
回复

使用道具 举报

0

主题

87

帖子

419

积分

中级会员

Rank: 3Rank: 3

积分
419
金钱
332
HASS币
0
发表于 2020-2-18 22:52:17 | 显示全部楼层
强强强支持
回复

使用道具 举报

1

主题

74

帖子

287

积分

中级会员

Rank: 3Rank: 3

积分
287
金钱
213
HASS币
0
发表于 2020-2-21 11:35:19 | 显示全部楼层
思路不错,会持续关注
回复

使用道具 举报

1

主题

22

帖子

127

积分

注册会员

Rank: 2

积分
127
金钱
105
HASS币
0
发表于 2023-5-7 22:44:42 | 显示全部楼层
老板油烟机 5915s ,坐等, docker搭了个EMQX ,,,ha里 mqtt 连接好。。。然后就没然后了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-4-20 00:01 , Processed in 0.298799 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表