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

 找回密码
 立即注册
查看: 44801|回复: 32

[新奇玩法] 暂时成功将青萍空气监测仪接入HA

[复制链接]

11

主题

108

帖子

833

积分

论坛技术达人

积分
833
金钱
715
HASS币
50
发表于 2019-2-2 13:33:12 | 显示全部楼层 |阅读模式
本帖最后由 iwha 于 2020-5-7 21:39 编辑

上周买了一个米家的青萍空气检测仪, 测试效果比米家那个自己的准确很多,就是这个 qingping.jpeg

但是只能接入青萍app和米家app, 米家app的智能联动条件不支持与或混合实在不方便, 所以想着能不能直接接入HA, 用tcpdump 看看这个检测仪到底有传些什么数据,

Screen Shot 2019-02-02 at 1.26.05 PM.png
隐去的是设备id, 在看红框的1883 看到了吗,这不就是mqtt端口么, 可是mqtt需要用户名密码什么的, 好办! 下载apk,反编译
然后所有需要的信息都在里面了, 配置好mqtt, 终于需要的传感器数据都有了
Screen Shot 2019-02-02 at 1.20.11 PM.png


ha配置如下
  - platform: mqtt
    name: cleargrass_co2
    state_topic: "snow/data/设备id"
    value_template: "{{ value_json.data.co2 }}"

  - platform: mqtt
    name: cleargrass_pm25
    state_topic: "snow/data/设备id"
    value_template: "{{ value_json.data.pm250 / 100.0 }}"

  - platform: mqtt
    name: cleargrass_humidity
    state_topic: "snow/data/设备id"
    unit_of_measurement: "%"
    value_template: "{{ value_json.data.h / 100.0 }}"

  - platform: mqtt
    name: cleargrass_tvoc
    state_topic: "snow/data/设备id"
    unit_of_measurement: "mg/m3"
    value_template: "{{ ((value_json.data.tvoc / 218.77)|float)| round(3) }}"

  - platform: mqtt
    name: cleargrass_temperature
    state_topic: "snow/data/设备id"
    value_template: "{{ value_json.data.t / 100.0 }}"
    unit_of_measurement: "°C"


  - platform: mqtt
    name: cleargrass_battery
    state_topic: "snow/data/设备id"
    value_template: "{{ value_json.data.battery }}"
    unit_of_measurement: "%"


之所以说是暂时, 因为不知道什么时候官方升级就封了这个方法, 能用一会儿是一会儿吧


关于如何获取设备ID, 有另种方式
1, 用tcpdump, 然后就可以如上图黑色覆盖的地方就是设备ID
tcpdump  -i br-lan host {IP}  -vv -X


2, 手机打开青萍空气app 用https抓包程序(比如whistle)抓取  /my_devices请求数据, 返回结果是json格式其中device_id就是所需的设备ID, 顺便可以从header中找到手机的 id, 如果想通过http得到数据,手机id是必须的




-----------------------新办法不需要用户名密码-----------------------
有网友反应无法获得mqtt的用户名和密码,实际上不需要用户名密码也可以使用,只需要搭建自己的mqtt服务器 具体步骤如下
1. 在局域网机器(比如IP地址:192.168.1.10 )上安装mqtt 服务器 比如mosquitto
编辑 mosquitto配置文件,添加一条
#允许匿名登陆, 这样可以忽略用户名密码
allow_anonymous true

然后以调试模式启动 mosquitto  -v -c /配置文件

2. 在路由器上拦截所有发往 青萍的mqtt数据 并重定向到步骤1 的ip和端口, 需要做两个设置
   i: 添加固定的dns记录 解析域名mqtt.cleargrass.com, 我这里解析到的ip地址是 154.8.191.174 其实这个ip你可以随便填
   ii: 把所有发往 154.8.191.174 : 1883 的数据全部重定向到 步骤1 的机器 192.168.1.10
如果你用的是openwrt 则在第一步 在dnsmasq的配置文件中添加一条
address=/mqtt.cleargrass.com/154.8.191.174
第二步 添加防火墙规则
config redirect
        option target 'DNAT'
        option dest 'lan'
        option proto 'tcp'
        option name 'cg_mqtt'
        option src_dport '1883'
        option dest_port '1883'
        option dest_ip '192.168.1.10'
        option src 'wan'
        option src_dip '154.8.191.174'


然后重启 青萍检测仪   就会看到
mosquitto 日志输出有客户端连接,找到类似
Client mqtt-4xxxxxu@cabcd9e received PUBLISH (d0, q0, r0, m0, 'snow/data/F34567F70126832E9EC432A86953A949F', ... (482 bytes))

其中'snow/data/F34567F70126832E9EC432A86953A949F'就是 mqtt的topic, ‘ F34567F70126832E9EC432A86953A949F’ 就是设备ID

然后在ha中没配置mqtt 即可


评分

参与人数 2金钱 +40 收起 理由
flashsoft + 20 论坛有你更精彩!
+ 20 厉害了word楼主!

查看全部评分

回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2019-2-2 13:58:59 | 显示全部楼层
楼主厉害了,怎么连mqtt服务没有写啊
回复

使用道具 举报

11

主题

108

帖子

833

积分

论坛技术达人

积分
833
金钱
715
HASS币
50
 楼主| 发表于 2019-2-2 14:02:23 | 显示全部楼层
本帖最后由 iwha 于 2019-2-2 14:09 编辑
Jones 发表于 2019-2-2 13:58
楼主厉害了,怎么连mqtt服务没有写啊

连接mqtt服务没特殊的, 所有需要的信息都可以从源代码中获取, 填写好就行了


其实在用mqtt之前我是模拟设备通过http直接抓数据的,

青萍的工作原理是通过mqtt向服务器发送数据, app则通过http请求数据来显示

用代理得到http请求数据是这样的
向  airapi.cleargrass.com发出get请求/heartbeat?data={data}

{data}的内容是个包含设备id的json,
{"device_id": "设备id"}

用rsa加密后的数据, 公钥也在源代码中, 用于服务器通过设备id返回结果, 也是json

http请求要注意加入header
phoneid: 手机id





回复

使用道具 举报

8

主题

870

帖子

5218

积分

论坛元老

Rank: 8Rank: 8

积分
5218
金钱
4348
HASS币
0
发表于 2019-2-2 14:22:02 | 显示全部楼层
楼主666666
回复

使用道具 举报

6

主题

88

帖子

3163

积分

论坛元老

Rank: 8Rank: 8

积分
3163
金钱
3075
HASS币
0
发表于 2019-2-2 15:22:29 | 显示全部楼层
膜拜大神
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2019-2-2 16:40:45 | 显示全部楼层
iwha 发表于 2019-2-2 14:02
连接mqtt服务没特殊的, 所有需要的信息都可以从源代码中获取, 填写好就行了

哪里能找到mqtt用户密码?
回复

使用道具 举报

11

主题

108

帖子

833

积分

论坛技术达人

积分
833
金钱
715
HASS币
50
 楼主| 发表于 2019-2-2 17:19:54 | 显示全部楼层
Jones 发表于 2019-2-2 16:40
哪里能找到mqtt用户密码?

已经加上了
回复

使用道具 举报

123

主题

4661

帖子

1万

积分

管理员

囧死

Rank: 9Rank: 9Rank: 9

积分
16410
金钱
11664
HASS币
45
发表于 2019-2-2 17:32:48 | 显示全部楼层

怎么把你的公开了?还是全都是一样的?
回复

使用道具 举报

11

主题

108

帖子

833

积分

论坛技术达人

积分
833
金钱
715
HASS币
50
 楼主| 发表于 2019-2-2 17:36:21 | 显示全部楼层
本帖最后由 iwha 于 2019-2-2 17:38 编辑
Jones 发表于 2019-2-2 17:32
怎么把你的公开了?还是全都是一样的?

都一样

不过要是被厂家知道后,下次app更新可能就封锁了
先去掉了, 需要的朋友自己反编译就可以了
回复

使用道具 举报

6

主题

171

帖子

1063

积分

论坛技术达人

积分
1063
金钱
882
HASS币
20
发表于 2019-2-17 19:18:26 | 显示全部楼层
iwha 发表于 2019-2-2 17:36
都一样

不过要是被厂家知道后,下次app更新可能就封锁了

可以直接修改mqtt服务器IP地址吗?修改成自用的MQTT服务器
回复

使用道具 举报

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

本版积分规则

Archiver|手机版|小黑屋|Hassbian

GMT+8, 2024-11-25 18:44 , Processed in 0.150460 second(s), 35 queries .

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

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