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

 找回密码
 立即注册
楼主: omegaojian

[插件集成] 小白手撕Panasonic Smart China 松下新风WIFI成功接入HA

  [复制链接]

0

主题

1

帖子

18

积分

新手上路

Rank: 1

积分
18
金钱
17
HASS币
0
发表于 2024-2-10 17:52:25 | 显示全部楼层
感谢楼主的指路。

Panasonic Smart China 还可以支持手机号验证码登录。我发现使用此方式登录时,APP 是用明文来传输验证码的。之后也可以获取到 SSID。

之后的操作流程就和密码登录一样了。
回复

使用道具 举报

64

主题

482

帖子

2154

积分

金牌会员

Rank: 6Rank: 6

积分
2154
金钱
1667
HASS币
0
发表于 2024-5-7 14:44:32 | 显示全部楼层
zhwrdr 发表于 2024-2-10 17:52
感谢楼主的指路。

Panasonic Smart China 还可以支持手机号验证码登录。我发现使用此方式登录时,APP 是用 ...

大佬,Panasonic Smart China支持接入这个新风吗。
回复

使用道具 举报

1

主题

15

帖子

172

积分

注册会员

Rank: 2

积分
172
金钱
157
HASS币
0
发表于 2024-5-21 16:59:10 | 显示全部楼层
强啊  !!!  
回复

使用道具 举报

0

主题

11

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
金钱
245
HASS币
0
发表于 2024-8-10 21:19:25 | 显示全部楼层
因为松下app难用的空调定时配置,导致我周末不在家空调还开了两天。
今天下午花时间抓包研究了一下,也参考了@omegaojian前辈和台湾版本https://github.com/osk2/panasonic_smart_app的工程实现

如果想工程化这个项目,当前还有几个问题:

1. 密码的加密算法可能是app本地完成的,之后和服务端进行校验,推测每次生成的密文是一致的,但是如果搞不清楚加密算法(安卓app解包逆向可能能拿到),还是得依赖一次抓包,不够优雅。(台湾版本没有这个逻辑,直接传密码过去)
2. device的token推测也是本地生成的,和设备一一对应,不会变,如果不是服务端而是本地生成,同样依赖生成算法,问题和上面一致。(台湾版本也没有这个逻辑,token服务端返回,但是有个app_token没细看是干啥的)

综合以上两个卡点,当前最简单的办法还是手机app登陆后抓一次包,拿到usrId、deviceId、SSID(xtoken)、token这几个参数后,实现剩余步骤的工程化,可以做的功能全面美观一些;或者直接用Command line的switch实现。

如果能找到有松下设备,爱折腾,懂逆向,会开发这几个因素都具备的人,不太容易。

我目前用Command line的switch解决了我的需求,可以做更复杂的空调开关策略了

这是我的配置,适配我当前2024.7版本的语法,自己拿去替换几个关键参数然后放到configuration.yaml里就能用,我的设备是控制松下风管机


```
command_line:
  - switch:
      name: LivingRoom-AirConditioner
      scan_interval: 30
      command_on: >
        SSID="Axxxxxxxxxxxxxxxxx3"; usrId="5xxxxx0"; deviceId="4xxxxxxxxxF_0xxx_xxxx"; token="0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7";curl 'https://app.psmartcloud.com/App/ACDevSetStatusInfoAW'   -H  'Accept: application/json, text/javascript, */*; q=0.01'   -H  'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8'   -H  'Connection: keep-alive'   -H  'Content-Type: application/json'   -H  'DNT: 1'   -H  'Origin: https://app.psmartcloud.com'   -H  'Sec-Fetch-Dest: empty'   -H  'Sec-Fetch-Mode: cors'   -H  'Sec-Fetch-Site: same-origin'   -H  'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'   -H  'X-Requested-With: XMLHttpRequest'   -H  "xtoken: SSID=$SSID"   --data-raw "{\"id\":211,\"usrId\":\"$usrId\",\"deviceId\":\"$deviceId\",\"token\":\"$token\",\"params\":{\"runMode\":3,\"forceRunning\":0,\"runStatus\":1,\"remoteForbidMode\":0,\"remoteMode\":0,\"setTemperature\":52,\"setHumidity\":0,\"windSet\":10,\"exchangeWindSet\":0,\"portraitWindSet\":15,\"orientationWindSet\":13,\"nanoeG\":0,\"nanoe\":0,\"ecoMode\":0,\"muteMode\":0,\"filterReset\":0,\"powerful\":0,\"powerfulMode\":0,\"thermoMode\":0,\"buzzer\":1,\"autoRunMode\":0,\"unusualPresent\":0,\"runForbidden\":0,\"inhaleTemperature\":0,\"outsideTemperature\":0,\"insideHumidity\":0,\"alarmCode\":\"0200\",\"nanoeModule\":0,\"TDWindModule\":0}}"   --insecure
      command_off: >
        SSID="Axxxxxxxxxxxxxxxxx3"; usrId="5xxxxx0"; deviceId="4xxxxxxxxxF_0xxx_xxxx"; token="0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7";curl 'https://app.psmartcloud.com/App/ACDevSetStatusInfoAW'  -H 'Accept: application/json, text/javascript, */*; q=0.01'  -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8'  -H 'Connection: keep-alive'  -H 'Content-Type: application/json'  -H 'DNT: 1'  -H 'Origin: https://app.psmartcloud.com'  -H 'Sec-Fetch-Dest: empty'  -H 'Sec-Fetch-Mode: cors'  -H 'Sec-Fetch-Site: same-origin'  -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'  -H 'X-Requested-With: XMLHttpRequest'  -H "xtoken: SSID=$SSID"  --data-raw "{\"id\":19,\"usrId\":\"$usrId\",\"deviceId\":\"$deviceId\",\"token\":\"$token\",\"params\":{\"runMode\":3,\"forceRunning\":0,\"runStatus\":0,\"remoteForbidMode\":0,\"remoteMode\":0,\"setTemperature\":52,\"setHumidity\":0,\"windSet\":10,\"exchangeWindSet\":0,\"portraitWindSet\":15,\"orientationWindSet\":13,\"nanoeG\":0,\"nanoe\":0,\"ecoMode\":0,\"muteMode\":0,\"filterReset\":0,\"powerful\":0,\"powerfulMode\":0,\"thermoMode\":0,\"buzzer\":1,\"autoRunMode\":0,\"unusualPresent\":0,\"runForbidden\":0,\"inhaleTemperature\":0,\"outsideTemperature\":0,\"insideHumidity\":0,\"alarmCode\":\"0200\",\"nanoeModule\":0,\"TDWindModule\":0}}"  --insecure
      command_state: >
        SSID="Axxxxxxxxxxxxxxxxx3"; usrId="5xxxxx0"; deviceId="4xxxxxxxxxF_0xxx_xxxx"; token="0xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx7";curl 'https://app.psmartcloud.com/App/ACDevGetStatusInfoAW'   -H 'Accept: application/json, text/javascript, */*; q=0.01'   -H 'Accept-Language: zh-CN,zh;q=0.9,en;q=0.8'   -H 'Connection: keep-alive'   -H 'Content-Type: application/json'    -H 'DNT: 1'   -H 'Origin: https://app.psmartcloud.com'    -H 'Sec-Fetch-Dest: empty'   -H 'Sec-Fetch-Mode: cors'   -H 'Sec-Fetch-Site: same-origin'   -H 'User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 16_6 like Mac OS X) AppleWebKit/605.1.15 (KHTML, like Gecko) Version/16.6 Mobile/15E148 Safari/604.1'   -H 'X-Requested-With: XMLHttpRequest'   -H "xtoken: SSID=$SSID"   --data-raw "{\"id\":217,\"usrId\":\"$usrId\",\"deviceId\":\"$deviceId\",\"token\":\"$token\"}"   --insecure
      value_template: >
        {{value_json['results']['runStatus'] == 1 }}
      icon: >
        {% if value_json['results']['runStatus'] == 1 %} mdi:air-conditioner
        {% else %} mdi:fan-off
        {% endif %}
```

多台设备的话复制一下`- switch`和之后的部分,在改一下名字和变量就好
  - switch:
      name: BedRoom-AirConditioner
回复

使用道具 举报

5

主题

91

帖子

745

积分

高级会员

Rank: 4

积分
745
金钱
654
HASS币
10
发表于 2024-8-11 06:11:10 | 显示全部楼层
mcdona1d 发表于 2024-8-10 21:19
因为松下app难用的空调定时配置,导致我周末不在家空调还开了两天。
今天下午花时间抓包研究了一下,也参 ...

app是那个版本,为什么我抓不了包,还是说iPhone越狱了
回复

使用道具 举报

0

主题

11

帖子

256

积分

中级会员

Rank: 3Rank: 3

积分
256
金钱
245
HASS币
0
发表于 2024-8-11 13:04:59 | 显示全部楼层
scry 发表于 2024-8-11 06:11
app是那个版本,为什么我抓不了包,还是说iPhone越狱了

就是商店的正常版本,应用使用的自签证书,双向认证,有ssl pinning机制,可以看下楼主的帖子。如果只是控制部分没有ssl pinning,抓包拿个url去电脑上操作就可以
回复

使用道具 举报

5

主题

91

帖子

745

积分

高级会员

Rank: 4

积分
745
金钱
654
HASS币
10
发表于 2024-8-11 13:19:58 | 显示全部楼层
mcdona1d 发表于 2024-8-11 13:04
就是商店的正常版本,应用使用的自签证书,双向认证,有ssl pinning机制,可以看下楼主的帖子。如果只是 ...

好像没双向验证,只是单纯那个域名没买证书,然后小公司给app绑了一个证书,我用浏览器打开会提示证书不安全
楼主的贴子已经过时了,除非能把当年用的那个32位的apk弄到,现在下都是64位的
好像还对apk做了加固升级,在root的安卓上打开就卡死
回复

使用道具 举报

8

主题

27

帖子

348

积分

中级会员

Rank: 3Rank: 3

积分
348
金钱
321
HASS币
0
 楼主| 发表于 2024-8-13 15:26:14 | 显示全部楼层
楼主冒个泡:太忙,实在是顾不上一一回复,真是抱歉。
两年来command line switch运行很稳定,Cookie一直没有过期,即使偶尔设备掉线,在APP中重新添加设备后,Cookie依然有效。
楼主没有编程基础,搬砖+带娃实在没有自己的时间,还请各位大神见谅。
回复

使用道具 举报

64

主题

482

帖子

2154

积分

金牌会员

Rank: 6Rank: 6

积分
2154
金钱
1667
HASS币
0
发表于 2024-8-13 17:24:47 | 显示全部楼层
omegaojian 发表于 2024-8-13 15:26
楼主冒个泡:太忙,实在是顾不上一一回复,真是抱歉。
两年来command line switch运行很稳定,Cookie一直没 ...

大佬有计划,再深入出个教程吗?
回复

使用道具 举报

7

主题

166

帖子

1302

积分

论坛技术达人

积分
1302
金钱
1131
HASS币
60
发表于 2024-9-19 14:51:43 | 显示全部楼层
本帖最后由 arthurfsy 于 2024-9-19 14:56 编辑
mcdona1d 发表于 2024-8-10 21:19
因为松下app难用的空调定时配置,导致我周末不在家空调还开了两天。
今天下午花时间抓包研究了一下,也参 ...

我在2年前找了大佬要了登录PJ算法,也通过NR实现登录这一部分的功能,但是后面不了了之今天(2024/09/19)测试了以下,这个算法还是没有变,可以正常获取数据。看看是否有帮助。
(NR需要安装crypto-wz这个库

flows.json

25.64 KB, 下载次数: 4

回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-23 16:26 , Processed in 0.148110 second(s), 32 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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