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

标题: 万家乐热水器接入求助 [打印本页]

作者: yxy2888    时间: 2023-2-3 09:00
标题: 万家乐热水器接入求助
我有一台万家乐热水器,使用万家乐ONE+APP控制,请问各位大神,有没有办法接入HA?

作者: wangling75    时间: 2023-2-3 12:51
抓包
试试加密没
作者: yxy2888    时间: 2023-2-3 16:47
wangling75 发表于 2023-2-3 12:51
抓包
试试加密没

谢谢,抓包没解决
作者: lannister    时间: 2023-2-3 17:17
抓包如果加密了的话,就只能考虑物理模拟按钮来接入了,当然只能输入,没办法输出实时信息到 HA
作者: yxy2888    时间: 2023-2-5 16:20
lannister 发表于 2023-2-3 17:17
抓包如果加密了的话,就只能考虑物理模拟按钮来接入了,当然只能输入,没办法输出实时信息到 HA ...

谢谢,触摸的,不好下手
作者: kffnqtd    时间: 2023-2-5 21:26
我家也是万家乐,WIFI只有上电的时候能连接一天左右的时间,往后都是断联状态。我也想接入HA,也是没有找到有大佬的作业可以抄的。
作者: 546485    时间: 2023-2-5 22:45
应该是电热水器吧,直接像我一样,加一个wifi插座(带功耗监测),到了功耗低于10左右就语音提示加断电
作者: Gen007    时间: 2023-2-15 16:00
同问,有大佬出来指导一下吗?
作者: yxy2888    时间: 2023-2-17 14:58
Gen007 发表于 2023-2-15 16:00
同问,有大佬出来指导一下吗?

大佬们都很忙
作者: Gen007    时间: 2023-2-22 16:54
yxy2888 发表于 2023-2-17 14:58
大佬们都很忙

我抓包试了几次,uid不变,ts是时间戳,key是不固定的,试了几次 ,都不知道这个key是什么加密的 解决了这个key  直接用nodered模拟请求估计能解决...
作者: 祁连山路    时间: 2023-7-13 10:55
我家也是万家乐天然气热水器,我也想接入HA,也是没有找到有大佬的作业可以抄的。
作者: illxi    时间: 2023-10-6 02:15
我也是。试图抓万家乐ONE+和热水器的包。结果热水器那边基本都抓不到.........
作者: honorfight    时间: 2023-10-20 16:21
曾经抓过包,控制热水器的貌似都走的tcp连接,不是http/https。这部分逻辑处理是1个c++库,不好搞。
作者: honorfight    时间: 2023-10-20 16:32
另外曾经试过天猫精灵,好像记得当时只能设置温度,不能开关。
可以看看现在天猫精灵支持的怎么样了?通过实现天猫精灵的技能来接入。
作者: 祁连山路    时间: 2023-10-24 10:53
天猫精灵有第三方的接入口,但是同步不到设备
作者: yxy2888    时间: 2023-10-24 16:24
祁连山路 发表于 2023-10-24 10:53
天猫精灵有第三方的接入口,但是同步不到设备

可否详细一点
作者: yxy2888    时间: 2023-10-25 16:57
https://bbs.hassbian.com/thread-21262-1-8.html各位大佬可以参考一下这个帖子。
作者: 雪山凌狐    时间: 2023-12-9 09:28
同问,持续关注
作者: yxy2888    时间: 2023-12-9 13:53
雪山凌狐 发表于 2023-12-9 09:28
同问,持续关注

可以抓包了,需要高手指点
作者: Gen007    时间: 2023-12-22 23:45
yxy2888 发表于 2023-12-9 13:53
可以抓包了,需要高手指点

一起研究一下~
作者: Chaste0866    时间: 2023-12-28 21:38
我也有这个需求会的,帮忙发一下教程,为爱发电
作者: yxy2888    时间: 2023-12-29 14:04
Gen007 发表于 2023-12-22 23:45
一起研究一下~

我看不懂抓包结果
作者: wangkh5    时间: 2024-1-11 11:19
illxi 发表于 2023-10-6 02:15
我也是。试图抓万家乐ONE+和热水器的包。结果热水器那边基本都抓不到.........  ...

我也试了,热水器控制抓不到包,不是http请求
作者: ByGPT    时间: 2024-1-30 21:39
wangkh5 发表于 2024-1-11 11:19
我也试了,热水器控制抓不到包,不是http请求

我找到办法了,不用绕到云上是局域网控制,TCP协议报文的内容我没办法解开,但是重放关键报文可以实现控制,晚点整理一下思路然后发一下。
作者: Gen007    时间: 2024-1-30 22:19
ByGPT 发表于 2024-1-30 21:39
我找到办法了,不用绕到云上是局域网控制,TCP协议报文的内容我没办法解开,但是重放关键报文可以实现控 ...

老哥发一下!
作者: ByGPT    时间: 2024-1-31 01:40
本帖最后由 ByGPT 于 2024-2-1 23:24 编辑
Gen007 发表于 2024-1-30 22:19
老哥发一下!

用Wireshark发现设备不光广域网可控,通过局域网也是可以的,所以果断研究走局域网的方式。捕获后发现即便是同一种控制,每次数据都不一样。

所幸重放之前的数据并不影响控制效果,但这样的话造成的影响未知、是否存在有效时间等全都是未知,而且根据经验由于设备不同,所以控制数据极有可能不通用,这样的话每个人得抓自己的数据包才能控制。

下面是我的“开机”代码Python写的,需要保证和设备在同一局域网下,可以先ping一下是否通,[192.168.xxx.xxx]是目标设备IP要改,如果不能开机的话,只能到时候开一个教程贴,捕获自己的控制包才行。

额不知道为啥,代码弄上来只有第一行,所以看附件吧
2024-01-31 22时留言:用下来发现并不稳定,有时甚至死机要断电重开,正在排查问题..........
2024-02-01 23时留言:变升功能开始失效,可能是有某种有效期,正在进一步研究中。

-----------
按照惯例上格式条款:本文内容仅为自身分享、日记笔记,不构成判断和指导,文中的提到的包括但不限于电脑操作、软件安装、链接点击等,作者不保证有效性和可能发生的不利后果。


作者: Gen007    时间: 2024-1-31 11:37
ByGPT 发表于 2024-1-31 01:40
用Wireshark发现设备不光广域网可控,通过局域网也是可以的,所以果断研究走局域网的方式。捕获后发现即便 ...

确实不能控制,求老哥再开一个抓包教程 --
作者: Gen007    时间: 2024-2-3 23:15
ByGPT 发表于 2024-1-31 01:40
用Wireshark发现设备不光广域网可控,通过局域网也是可以的,所以果断研究走局域网的方式。捕获后发现即便 ...

老哥 我抓包没没数据包  基本的数据包我能看懂  但是开关热水器完全是没数据包怎么回事- -抓包用的软件是http catcher
作者: ByGPT    时间: 2024-2-4 00:38
本帖最后由 ByGPT 于 2024-2-7 12:39 编辑
Gen007 发表于 2024-2-3 23:15
老哥 我抓包没没数据包  基本的数据包我能看懂  但是开关热水器完全是没数据包怎么回事- -抓包用的软件是 ...

要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话,下面的解读希望对你有帮助。

1. 有一组len为[3、7、0]的数据包,是用来维持心跳的。

2. 每次握手后会有一组[25、9]的数据包,作用未知,但是必须模拟出来,要不然后面的控制数据包发送了也没效果。

3. 控制数据包,大致的形式是[87、55、87、0、71、0.......],我这边第二个87模拟下来能达到控制效果,具体可以自行尝试。

4. 用下来很不稳定,总有莫名其妙的问题,明明是关机(连APP上也显示关机)的但是还能烧水。

5. 上面提到的[3、7、0]这些数字指的是playload(数据载荷)的长度,并且是包括发送和等待响应的,如[3(send)、7(response)、0(send)],send是我发送,response是设备回复的。

6. 可以修改我的代码中的playload25和playload_open,换成你抓到的包尝试。


作者: Gen007    时间: 2024-2-4 18:05
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

好的 感谢 我学习一下
作者: yxy2888    时间: 2024-2-7 09:10
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

谢谢大佬分享,经过我的使用,我用的最多的是单次零冷水。
作者: 13450224207    时间: 2024-2-22 08:57
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

感谢,按照你的方法可以控制了,再配合巴法云和Homeassistant,nodered,已接入米家,实现语音开启零冷水
作者: xuehui_77    时间: 2024-4-16 16:56
13450224207 发表于 2024-2-22 08:57
感谢,按照你的方法可以控制了,再配合巴法云和Homeassistant,nodered,已接入米家,实现语音开启零冷水 ...

你好,请指导下。万家乐热水器的APP里面找不到mac地址,如何确定哪个IP是热水器的呢?
作者: xuehui_77    时间: 2024-4-16 17:27
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

您好,本人小白。请问下192.168.31.100是手机的ip吗?192.168.31.200是热水器的IP?
作者: yxy2888    时间: 2024-4-18 13:40
13450224207 发表于 2024-2-22 08:57
感谢,按照你的方法可以控制了,再配合巴法云和Homeassistant,nodered,已接入米家,实现语音开启零冷水 ...

大佬,分享一下接入方法呀
作者: 13450224207    时间: 2024-5-24 09:03
xuehui_77 发表于 2024-4-16 16:56
你好,请指导下。万家乐热水器的APP里面找不到mac地址,如何确定哪个IP是热水器的呢? ...

我没有太好的办法,不过我家里路由的设备都是设的静态IP,逐一理清每个ip是什么设备并在路由上起好别名就可以找到哪个是热水器
作者: 13450224207    时间: 2024-5-24 09:12
yxy2888 发表于 2024-4-18 13:40
大佬,分享一下接入方法呀

具体方法就是按29楼的方法抓包,我用的是星耀X32pro的网络诊断里面的抓包工具,抓路由器LAN口的TCP包,抓完放wireshark分析,按29楼的方法按顺序发3个包就可以控制启动零冷水了,之后把发包的功能打包成python脚本放HA里面作为脚本功能,然后在Nodered里面连接脚本和巴法云,巴法云再连米家(确实很绕,全程启动起来大概花费3秒),当然也可以想办法用其他办法启动这个python脚本,反正启动了就能零冷水了. 目前大概使用一两个月会过期一次得手动更新一下最后一个87长度的包.
作者: 雪山凌狐    时间: 2024-7-29 22:49
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

大佬您好,我尝试了使用Wireshark抓包,但Wireshark仅在我笔记本电脑本地,我目前已知万家乐热水器在局域网的IP地址,我要怎么配置Wireshark来开启抓局域网其他机器的包呢?
作者: 雪山凌狐    时间: 2024-8-15 23:01
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

大佬,经过反复的测试,我发现我还是不能成功,目前抓包是抓到了四个发出去的包的,按您的方法来模拟各种的不成功。不知道问题出在哪儿现在。虚心求教帮我看看~

前两个包是点击待机按钮的,后两个包是点击零冷水按钮的。目前跑完没有返回值,热水器也没有任何反应,求大佬们帮忙看看:

现在代码:
[attach]62511[/attach]

  1. <div class="blockcode"><blockquote>import socket
  2. import time

  3. class Wanjiale:
  4.     def __init__(self, ip, port):
  5.         # 创建套接字对象,进行TCP连接
  6.         self.tcp_socket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
  7.         self.ip = ip
  8.         self.port = port
  9.         self.server_address = (ip, port)
  10.         self.tcp_socket.connect(self.server_address)
  11.     def send_data(self, data):
  12.         '''发送所需的数据'''
  13.         payload = bytes.fromhex(data)
  14.         self.tcp_socket.send(payload)
  15.         response = self.tcp_socket.recv(1024)
  16.         return response

  17.     def close(self):
  18.         '''关闭连接'''
  19.         self.tcp_socket.close()

  20. if __name__ == '__main__':
  21.     # TCP数据载荷
  22.     # len: 87
  23.     open_data1 = 'aabb1100120050831186ec120f228fa7122007211b6e411b9b55a8327a87b2eac97af267c0ddb935989f42ce010a9eead64027a800e526810974579b8502efb932a9fb60b75b2a1d22d1ca5d84ac72b915bf745ed6a520'
  24.     # len: 103
  25.     open_data2 = 'aabb1100a10060da3d2c9f6100b1db77b42d5806d8aa91dbf152e085bcf9f1de37d79159294299fdf6a3b4aa208fe1399f27858f4344a3f1d3f4d26c76e0ab81e0f8daa95254d89d2f7d3b025e7f3ddfd886b5fd3a8bf6a42c39253b936067b4eb1688228e7d44'

  26.     # len: 87
  27.     open_data3 = 'aabb1100470050edfb116b8f410efdaed5a855daef8a81fc709740e5e1cfb0825a529b31a5d626598d91c0531679a4ca6327444f8e93c0520b8db763349ace3bf4cf39fb50fce3adaa9991dd1f6ec73b70a796f485d7bb'
  28.     # len: 190
  29.     open_data4 = 'aabb11007f00504a82630c8ee49d52a26ef489fddd00fd4ab63ad13fd350a51ff77c6facfcada9bc32101f0e7f0677733078319dbf63bdee3c688bd0a14cfcdbf39c1b6b2c5a980ac2b2b019ecd7521370b99727e47138aabb1100a300604feafe5e61b80a70f2edfc6d0602d9894f615e7ea1ba7a9cd70c637b1bced3113cab31a6b8e1464c91a801f1e19c40f1fa31808055c55c72a3d931f2bda71fc85429d9f1717308ea88c4ed7860703f204e1523b28349765541de08af29b732ea'


  30.     wanjiale = Wanjiale('192.168.3.245', 7681)
  31.     response1 = wanjiale.send_data(open_data1)
  32.     print(response1)
  33.     time.sleep(1)
  34.     response2 = wanjiale.send_data(open_data2)
  35.     print(response2)
  36.     time.sleep(3)
  37.     response3 = wanjiale.send_data(open_data3)
  38.     print(response3)
  39.     time.sleep(1)
  40.     response4 = wanjiale.send_data(open_data4)
  41.     print(response4)
  42.     time.sleep(1)

  43.     wanjiale.close()
复制代码



筛选条件:
ip.addr == 192.168.3.7 && ip.addr == 192.168.3.245

192.168.3.7 是 我雷电模拟器的IP,192.168.3.245 是 热水器的IP

取了 序号 151、155、352、356 四个包的数据来写入代码中。(但结果是啥反应也没有)

此次抓包数据:
[attach]62512[/attach]

作者: xingmiye    时间: 2024-10-22 11:12
13450224207 发表于 2024-2-22 08:57
感谢,按照你的方法可以控制了,再配合巴法云和Homeassistant,nodered,已接入米家,实现语音开启零冷水 ...

求助大佬指导,有偿,我只想接入homeassistant,不需要米家不需要语音开启零冷水,只想接入homeassistant加个按钮本地一键控制和在homeassistant的Node-RED里面定时控制开启
作者: yxy2888    时间: 2024-10-25 14:37
xingmiye 发表于 2024-10-22 11:12
求助大佬指导,有偿,我只想接入homeassistant,不需要米家不需要语音开启零冷水,只想接入homeassistant ...

我和您的需求一样,有没有大佬接单?
作者: 13450224207    时间: 2024-11-1 14:58
雪山凌狐 发表于 2024-8-15 23:01
大佬,经过反复的测试,我发现我还是不能成功,目前抓包是抓到了四个发出去的包的,按您的方法来模拟各种 ...

我自己尝试也是只能在路由器上用tcpdump来抓,抓的时候需要指定 TCP,LAN,就能抓到29楼说的包了
作者: 13450224207    时间: 2024-11-1 16:22
雪山凌狐 发表于 2024-8-15 23:01
大佬,经过反复的测试,我发现我还是不能成功,目前抓包是抓到了四个发出去的包的,按您的方法来模拟各种 ...

加wx18680012737
作者: 13450224207    时间: 2024-11-1 16:33
yxy2888 发表于 2024-10-25 14:37
我和您的需求一样,有没有大佬接单?

加wx18680012737
作者: mrfu    时间: 2025-1-2 11:16
看了以后还是不知道怎么下手,有没有简单一点的教程
作者: AMEN12138    时间: 2025-2-7 17:22
我依然不建议用tcp 经过我的测试,万家乐是中科智家的方案,其完全接入中科智家。
万家乐在中科智家的客户端id为:26c73a9d287211e8a0ea525400538bb4
作者: hayonghu    时间: 2025-2-9 16:36
[attach]67961[/attach]
B站有

作者: hayonghu    时间: 2025-2-9 16:37
yxy2888 发表于 2024-10-25 14:37
我和您的需求一样,有没有大佬接单?


                               
登录/注册后可看大图


b站有了
作者: AMEN12138    时间: 2025-2-11 18:54
本帖最后由 AMEN12138 于 2025-2-11 18:56 编辑
hayonghu 发表于 2025-2-9 16:37
b站有了

1.点灯app无法在米家注册成为卡片实体
2.无法成为卡片实体 就有无法接入HA。
3.只有将小爱接入HA,但这样有局限性,不是hA实体 少了很多玩法4.不仅是小爱来控制,还需要模拟点击,还需要点灯服务器。也就是说:小爱->点灯->用户手机,抛出别人服务器我们管不着的情况下,我们还需要准备一个手机长期在线,小爱语音音响长期在线
5.不推荐 还不如tcp抓包

作者: AMEN12138    时间: 2025-2-16 01:37
雪山凌狐 发表于 2024-8-15 23:01
大佬,经过反复的测试,我发现我还是不能成功,目前抓包是抓到了四个发出去的包的,按您的方法来模拟各种 ...

我也经过抓包测试,发现无法进行控制,我打算放弃抓包这个路 准备拆解热水器进行改装,自己买esp8266米家版写
作者: hayonghu    时间: 2025-2-19 17:04
本帖最后由 hayonghu 于 2025-2-19 17:07 编辑
AMEN12138 发表于 2025-2-16 01:37
我也经过抓包测试,发现无法进行控制,我打算放弃抓包这个路 准备拆解热水器进行改装,自己买esp8266米家 ...

既然都拆解热水器了,为何不整个换支持米家的热水器?在最小改动的情况下,模拟手机点击APP是最佳选择。咸鱼一台"直供电手机"38块钱有剩。
作者: hayonghu    时间: 2025-2-19 17:11
本帖最后由 hayonghu 于 2025-5-1 01:24 编辑
AMEN12138 发表于 2025-2-11 18:54
1.点灯app无法在米家注册成为卡片实体
2.无法成为卡片实体 就有无法接入HA。
3.只有将小爱接入HA,但这样 ...

谢谢你提供的建议。我已经做出来了,纯单片机实现万家乐热水器协议。不拆热水器、不贴任何东西、非模拟点击APP。带米家实体卡片+支持HA+不需要手机+米家Mesh控制+不需要物联网平台。

[attach]69428[/attach][attach]69429[/attach][attach]69426[/attach]

作者: rockxsj    时间: 2025-3-30 14:14
ByGPT 发表于 2024-2-4 00:38
要用Wireshark抓,它的控制协议是自有的,但是底层是TCP协议,你那个只能抓http协议的,如果想自己抓的话 ...

感谢dalao,参考大佬的流程抓出来的包放在nodered里面可以开启零冷水了。但是我现在想接通米家碰到了问题。[attach]69250[/attach]

看上面的图,构造消息的那个节点是我按照抓包的顺序放的消息体。 现在碰到的问题是点击时间戳手动运行这个流程,零冷水可以正确开启,但是通过捕捉米家中枢网关的虚拟事件之后执行同样的构造消息和发送设备却无响应了。    我截图的两个debug打印消息序列分别是手动注入和捕捉虚拟事件执行的,可以看出来打印的消息也是一样的。    实在是令人费解。。

作者: rockxsj    时间: 2025-3-30 21:41
rockxsj 发表于 2025-3-30 14:14
感谢dalao,参考大佬的流程抓出来的包放在nodered里面可以开启零冷水了。但是我现在想接通米家碰到了问题 ...

多试了几次之后发现都无法稳定控制,有时候能成功,大部分时候无法成功
作者: rockxsj    时间: 2025-3-31 09:43
rockxsj 发表于 2025-3-30 21:41
多试了几次之后发现都无法稳定控制,有时候能成功,大部分时候无法成功 ...

应该是因为多条tcp消息到达热水器的顺序无法保证导致的。  现在换成用function节点手动发送每一条消息,确保前面的消息发送成功再发送后面的消息就可以稳定控制了。  注意要先在nodered的settings.js里面配置全局导出net库,否则没法在function节点引入net。

  1. const net = global.get('net');

  2. async function sendTcpMessages(messages) {
  3.     const client = new net.Socket();
  4.    
  5.     try {
  6.         node.status({ fill: "yellow", shape: "ring", text: "正在连接…" });
  7.         // 连接到服务器
  8.         await new Promise((resolve, reject) => {
  9.             client.connect(7681, '192.168.31.59', () => resolve());
  10.             client.on('error', reject);
  11.             node.status({ fill: "red", shape: "dot", text: "连接失败" });
  12.         });

  13.         // 按顺序发送消息
  14.         for (const message of messages) {
  15.             await new Promise((resolve, reject) => {
  16.                 client.write(Buffer.from(message, "hex"), (err) => {
  17.                     if (err) reject(err);
  18.                     else resolve();
  19.                 });
  20.             });
  21.             node.log(`Sent: ${message}`);
  22.             // console.log(`Sent: ${message}`);
  23.         }
  24.         node.status({ fill: "green", shape: "dot", text: "发送完成" });

  25.     } catch (error) {
  26.         node.error('Error:', error);
  27.         node.status({ fill: "red", shape: "dot", text: "发送出现错误" });
  28.         // console.error('Error:', error);
  29.     } finally {
  30.         client.end();
  31.     }
  32. }

  33. // 使用示例
  34. const messages = [
  35.   "aabb08028c00106f54faf4c95c8e6572c9eba9bee63e5d9e99",
  36.   "aabb11006700408882f42408bd03b25cedcad29f5ecf00f28393903783fba9826067ca6a6337fd441a30f7c4864bf6b5f1a85f688c35c05a783f3951d934d2269e5e46c8042f75",
  37.   "aabb1100310050e7dd5f1b35d9f21d5afa1dbf8e64fcb91491878ef4bf076ba332c24f7ba677daf97903e1bcbedfe477aaab8267cb3d49bc2f17d3628dd49cd127349a657d2dcd486f5e329475db8f95298534fa0b0cc9",
  38.   "aabb11006e0050d3a985bb41087e7e0ec3a2d43533037f9b83432fcb329251a0fb9fbd2d77b910016cf0abd946643dde06f91cb1878922b4dab6d07542979681c8609a8bc3152ebf02b0c9c710422fefe97681c94f8f30",
  39.   "aabb11009a0050f06078aaf3d779dbe62ecb0a83c8987ee3453534e6ba8b6900c86c902900ea8c387147e3b0bacd4ef72716a5a27ecf9af77b5655bd6c9fb7504de2e97ec232d56ce0f02a5bec384e2d0b02b1101abf8f",
  40.   "aabb1100d900504e027faf1525b7ac53ac07f40b05c8dd3af33a5a00dd1eabb05b1d84d6750f2aee02b37127ae9df87a048df425ebeba647d9076fd10dac916c264bdb41be0cecc8cdfafe874665cbffcab8d699b34541aabb1100a20050512385d3dd30f022adb6b709baec18a2cd4fb5d9c3e17d5a6b2a4b23f13c9e5a792e25d782bad1008d39f72e79778fd4aa69ee3aae75f4b81955c6ab694d2669e09ad3c780745ed0aab35cbdb012f2c0"
  41. ];
  42. sendTcpMessages(messages);
复制代码

作者: hayonghu    时间: 2025-5-1 01:19
rockxsj 发表于 2025-3-31 09:43
应该是因为多条tcp消息到达热水器的顺序无法保证导致的。  现在换成用function节点手动发送每一条消息, ...

你这个明显就没解开万家乐的协议,我已经发在小红书上了,解开了万家乐所有协议,能自主学习。[attach]69420[/attach]

作者: hayonghu    时间: 2025-5-1 01:21
AMEN12138 发表于 2025-2-16 01:37
我也经过抓包测试,发现无法进行控制,我打算放弃抓包这个路 准备拆解热水器进行改装,自己买esp8266米家 ...

我已经解开了万家乐APP所有协议了,全网独家,【不拆机、不贴任何东西、非模拟点击APP】,纯单片机协议交互,做出来成品了。


作者: laogong888    时间: 2025-5-1 13:36
我万和热水器,米家添加了第三方,可以用小爱语音控制。
作者: rockxsj    时间: 2025-5-1 15:50
hayonghu 发表于 2025-5-1 01:19
你这个明显就没解开万家乐的协议,我已经发在小红书上了,解开了万家乐所有协议,能自主学习。
...

NB   不过你这个还得花钱买额外硬件,我这个分币不花,都一样接入小爱同学控制    那为什么一定要逆向这个协议呢
作者: hayonghu    时间: 2025-5-1 21:15
本帖最后由 hayonghu 于 2025-5-1 21:45 编辑
rockxsj 发表于 2025-5-1 15:50
NB   不过你这个还得花钱买额外硬件,我这个分币不花,都一样接入小爱同学控制    那为什么一定要逆向这 ...

我是做成了ESP32而已,因为不是每个人都会抓包解包,我方便新手玩家。

给你看看万家乐真正的指令协议,比如这是调温度的,万家乐APP发出来的协议是:[attach]69442[/attach]。


你那个JS对于一些联网的热水器,有错误的,不是通用的。

正确的做法是:

先对密码进行MD5,然后与手机号组包,组完AES加密,然后发送到第一个TCP服务器,换取临时token。

根据指令(如图,JSON来的),再与临时token组包,再AES加密,逐个指令如此操作,发送到第二个TCP服务器,万家乐热水器就有反应了。

另外,如果要获取设备列表之类的HTTP接口,那些的key,就是md5(密码MD5+ts),多一轮md5而已。整体难度较简单。


作者: hayonghu    时间: 2025-5-1 21:26
Gen007 发表于 2023-2-22 16:54
我抓包试了几次,uid不变,ts是时间戳,key是不固定的,试了几次 ,都不知道这个key是什么加密的 解决了这个ke ...

ts= time(NULL);
key= md5(密码md5+ts)




欢迎光临 『瀚思彼岸』» 智能家居技术论坛 (https://bbs.hassbian.com/) Powered by Discuz! X3.5