CH582M低功耗蓝牙温湿度传感器接入HASS
一、低功耗温湿度仪
- 参考开源温湿度仪进行制作:https://oshwhub.com/hotant/wireless-temperature-and-humidity-detector-414381a
- 使用V3版本,即CH582F的芯片,具有更低的功耗。
- 在源码中,可以增加广播时间,默认是1s,可以通过手机蓝牙识别到。更改到10s后,减少功耗,并仍可以通过后续的网关进行识别。
二、ESP32 MQTT网关
- 使用硬件ESP32-C3,其具有4M的flash。
- 使用固件OpenMQTTGateway,需要进行相应的配置才可以适配,配置可以参考视频。
- 下载OpenMQTTGateway后,路径不能存在中文,否则编译错误。
- 进行配置,选择C3芯片,打开BT和HA找寻,设置MQTT的地址和账号密码(即后续的HASS中的MQTT)。
- 烧录后,使用wifi进行配网,其中注意配置MQTT的前缀,默认是home,但是需要根据HASS中的MQTT进行相应修改,最后可以在HASS中的MQTT中找到对应设备:
三、HASS+Nodered配置
- 通过MQTT EXPLORER连接到HASS的MQTT,查看网关上传的数据。发现并未识别到温湿度仪的数据,需要在MQTT中对网关进行配置(设置更快的scan、关闭只找传感器的选项)。
- 发现设备后,在nodered中进行配置,逻辑如下:
- 获取温湿度数据,即通过mqtt进行获取,找到对应的topic即可:
- 从名字中解析温湿度数据并转换成合理数据
var dat = { payload: msg.payload.name };
// dat类型为 26.4C 69.3H 或者 " 26.4C 69.3H" 或者 "-26.4C 69.3H"
var temp = 0.0;
var humi = 0.0;// 使用正则表达式解析温度和湿度数据
var matches = dat.payload.match(/([ -]?\d+\.\d+)C\s+(\d+\.\d+)H/);if (matches && matches.length === 3) {// 第一个匹配项是温度temp = parseFloat(matches[1].trim());// 第二个匹配项是湿度humi = parseFloat(matches[2].trim());
}var newMsg = { payload: { "temp": temp, "humi": humi } };
return newMsg;
- 发布数据到hass
- 之后就可以在HASS中看到数据,加入到主页即可。
四、WCH MESH测试
上述已经基本完成了功能,设置成10s,纽扣可以使用一两年时间。但是这种方式需要防止很多的esp32网关,同时实时性存在问题。
蓝牙mesh一直是我想要学习并测试的,参考资料如下:
https://www.cnblogs.com/cchHers/p/15470049.html
https://www.cnblogs.com/JayWellsBlog/category/2160216.html
https://www.cnblogs.com/JayWellsBlog/p/16266404.html
- 配网方式
配网方式有两种,配网器配网和手机自配网。其中、手机自配网就得所有的节点都设置为自配网,可以实现更多的节点配网并可以通过手机进行设置。配网器配网可以实现 配网器+朋友节点+低功耗节点的方式,但是配网器flash限制、朋友节点内存限制,都导致无法存在太多的节点。 - 手机自配网注意事项:自配网中,需要将4个(包括MESH_LIB)都烧录到节点中,才可以正常运行。
- 配网器配网:由于需要使用串口进行debug,而没有相应的设备,暂时无法进行测试。
五、后续待测试
- 测试配网器
- 测试低功耗节点
- 测试自定义数据,实现灯开关、pwm等功能。