本帖最后由 iwha 于 2020-5-7 21:39 编辑
上周买了一个米家的青萍空气检测仪, 测试效果比米家那个自己的准确很多,就是这个
但是只能接入青萍app和米家app, 米家app的智能联动条件不支持与或混合实在不方便, 所以想着能不能直接接入HA, 用tcpdump 看看这个检测仪到底有传些什么数据,
隐去的是设备id, 在看红框的1883 看到了吗,这不就是mqtt端口么, 可是mqtt需要用户名密码什么的, 好办! 下载apk,反编译
然后所有需要的信息都在里面了, 配置好mqtt, 终于需要的传感器数据都有了
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 即可
|