这是一个ESP32+LORA应用程序,它从Thermoworks Smoke X2或Smoke X4远程温度计接收RF信号,并将信息发布给MQTT代理。这将与任何现有的Smoke X2/X4接收器一起使用(即所有配对接收器仍将运行)。该项目的设计专门用于与家庭助理集成,但也可以与任何其他基于MQTT的应用程序一起使用。此外,此应用程序可能以独立的方式(无MQTT或Home Assistant的AP模式下的WLAN接口)进行现场使用。
请注意,此应用与原始的ThermoWorks烟雾或ThermoWorks信号产品不兼容。
Smoke X是坚固的,准确的,具有很大的RF范围,并且不需要Internet运行。但是提供的接收器单元仅显示当前的探测读数,而没有记录或跟踪趋势的方法。

该应用程序允许Smoke X用户从RF信号中收集温度数据,并通过Web UI(由ESP32提供),家庭助理仪表板和/或任何其他数据可视化工具来可视化温度历史记录。



如下所示,所有数据均可在本地获取,处理和存储:
流图LR
基础 - > | lora rf | ESP32
MQClient-> MQ
MQ-> HA
Web->浏览器(任何Web浏览器)
子图烟x2/x4
探针 - >基地(基站) - > | Lora RF | RECV(接收器)
滚蛋 - >基础
结尾
ESP32子图[Smoke-X接收器]
MQClient(MQTT客户端)
Web(HTTP服务器)
结尾
子图MQTTB [MQTT经纪人]
MQ(乡亲话题)
结尾
子图家庭助理
MQ_INT
结尾
子图HA_DEV [X2/X4的HA设备]
E1(二元传感器实体)
E2(传感器实体)
结尾
子图MQ_INT [MQTT集成]
ha(自动发现) - > ha_dev
ha_dev
结尾
即使您不是家庭助理用户,您仍然可以使用此应用程序的内置Web界面来监视您的温度并注意趋势。
需要在915 MHz ISM频段中运行的带有Semtech Lora收发器的ESP32。组合的ESP32+LORA开发板,例如Heltec WiFi Lora 32 V2或V3是理想的选择,但是任何具有SPI连接的SX1276或SX1262的ESP32板都可以使用。
$ source /path/to/esp-idf/export.sh$ git clone --recurse-submodules [email protected]:G-Two/smoke-x-receiver.git
$ cd smoke-x-receiver该项目的默认配置是为Heltec WiFi Lora 32 V3编写的(基于SX1262)。如果您使用此确切的硬件,则可以跳过此部分。如果您在任何其他硬件上运行,要自定义构建,或者默认构建不起作用,则需要运行menuconfig:
$ idf.py menuconfig注意:如果您使用的是SX1276(例如Heltec Wifi Lora 32 V2 ),则必须在“ Smoke X Recever HW/App Config”菜单中选择SX127X驱动程序,并配置SX127X SPI PIN分配
可能需要进行其他配置更改以支持您的特定硬件或其他需求
$ idf.py set-target esp32s3 # If using a Heltec WiFi LoRa 32 v3, otherwise set target as appropriate to your hardware
$ idf.py flash应用程序和Web资产将被构建并写入ESP32 Flash。
ESP32闪烁后,需要配置几个项目并将其保存到NVRAM。 ESP32重置以及应用程序软件更新后,这些项目的配置将持续存在。
如果尚未配置WLAN信息,则该设备将默认为AP模式,或者连接失败。默认的AP模式信息(可在Menuconfig中配置)为:
连接到ESP32的AP,并使用Web浏览器导航到http://192.168.4.4.1/wlan,您将为您提供一个自称的Web UI,以将设备配置为家庭网络。支持WPA2-PSK和WPA2-ENTERPRISE(EAP-TTLS)。应用网络身份验证信息后,设备将重置并尝试加入家庭网络。 ESP32将为smoke_x提供DHCP客户端主机名。一旦在家庭网络上找到ESP32,就可以继续进行设置过程的其余部分。如果ESP32未能加入您的网络,它将恢复为默认的AP模式。
Web UI的“配对”选项卡将表明该设备需要配对与Smoke X Base单元。如果该设备处于未配合的状态,它将交替监视两个同步通道(X2的920 MHz,X4的915 MHz),并将与它接收到的第一个Smoke X Sync Transmine配对。要配对,请将Smoke X Base单元放在同步模式下,这将使其每三秒钟发送一次同步爆发。 ESP32接收并解析爆发后,它将在目标频率上传递同步响应,并且基本单元将返回正常操作。此时,您可以在Web UI中确认设备与特定的设备ID和频率配对。这是ESP32唯一一次传输Lora信号的时间。该设备可能总是通过Web UI不配对。 ESP32的配对/非搭配不会影响任何其他设备的配对状态。
配对后,状态页将显示一个温度图。
Web UI还用于配置设备以连接到MQTT代理。 MQTT URI是唯一的强制性字段,其余的是可选的,将取决于您的特定MQTT代理配置。通过通过Web UI输入受信任的CA PEM来支持MQTTS服务器身份验证。当前不支持PKI Client Auth。
如果配置并启用了MQTT,则该应用程序将在从Smoke X Base Station收到RF传输后发布状态消息。基站每三十秒传输一次。已发布的消息内容是:
{
"probe_1_attached" : " ON " ,
"probe_1_alarm" : " ON " ,
"probe_1_temp" : 70.4 ,
"probe_1_max" : 185 ,
"probe_1_min" : 32 ,
"billows_target" : " offline " ,
"probe_2_attached" : " ON " ,
"probe_2_alarm" : " ON " ,
"probe_2_temp" : 70.4 ,
"probe_2_max" : 91 ,
"probe_2_min" : 50 ,
"billows_attached" : " OFF "
}注意: X4设备还将包括探针3和4的其他数据
该应用程序支持家庭助理MQTT Discovery。如果您的家庭助理实例已配置了用于发现的MQTT集成,则将自动添加以下Smoke X传感器:
成功连接到MQTT代理后,该设备将通过发布类似于以下的发现消息(每个实体)来配置每个传感器:
{
"dev" : {
"name" : " Smoke X Receiver " ,
"identifiers" : " |ABC12 " ,
"sw_version" : " 0.1.0 " ,
"model" : " X2 " ,
"manufacturer" : " ThermoWorks "
},
"exp_aft" : 120 ,
"pl_not_avail" : " offline " ,
"stat_t" : " homeassistant/smoke-x/state " ,
"dev_cla" : " temperature " ,
"unit_of_meas" : " °F " ,
"uniq_id" : " smoke-x_probe_1_temp " ,
"name" : " Smoke X Probe 1 Temp " ,
"val_tpl" : " {{value_json.probe_1_temp}} "
}此外,该申请将订阅家庭助理状态主题以进行出生公告。如果家庭助理重新开始,则出生公告将向申请发出信号,以重新发布发现消息。使用默认的家庭助理主题名称,但可以在ESP32 Web UI中自定义。
该应用程序提供了HTTP API(由Web UI的温度历史记录图使用),该应用程序也可以由任何能够将HTTP请求发送给ESP32的其他客户端使用。
回复:
{
"probe_1" : {
"current_temp" : 95.3 ,
"alarm_max" : 185 ,
"alarm_min" : 32 ,
"history" : [ 95.1 , 95.2 , 95.3 ]
},
"probe_2" : {
"current_temp" : 165.9 ,
"alarm_max" : 91 ,
"alarm_min" : 50 ,
"history" : [ 165.7 , 165.8 , 165.9 ]
},
"billows" : false
}注意: X4设备还将包括探针3和4的其他数据
欢迎修复错误或增强/添加功能的PR!如果您已经成功构建了该应用程序,则需要修改它所需的一切。
在初始申请设置中监视ESP32日志可能会有所帮助,以帮助调试。当ESP32仍插入计算机时,通过运行监视日志:
$ idf.py monitor
该应用程序是使用ESP-IDF V4 SDK构建的,具有以下洛拉调制解调器驱动程序的外部依赖性:
Web界面用VUE编写,并将其加载到ESP32 Flash文件系统上,作为由ESP32 Web服务器提供的压缩静态Web资产。为了帮助进行开发和手动测试,可以预览网络界面:
$ ./mock_web_ui.sh