นี่คือแอปพลิเคชั่น ESP32+LORA ที่ได้รับสัญญาณ RF จาก ThermoWorks Smoke X2 หรือ Smoke X4 เทอร์โมมิเตอร์ระยะไกลและเผยแพร่ข้อมูลไปยังนายหน้า MQTT สิ่งนี้จะทำงานร่วมกับตัวรับควัน X2/X4 ที่มีอยู่ (เช่นตัวรับที่จับคู่ทั้งหมดจะยังคงใช้งานได้) โครงการนี้ได้รับการออกแบบมาโดยเฉพาะเพื่อรวมเข้ากับผู้ช่วยที่บ้าน แต่อาจใช้กับแอปพลิเคชันที่ใช้ MQTT อื่น ๆ นอกจากนี้แอปพลิเคชันนี้อาจทำงานในรูปแบบสแตนด์อโลน (อินเตอร์เฟส WLAN ในโหมด AP โดยไม่ต้องใช้ MQTT หรือผู้ช่วยในบ้าน) สำหรับการใช้งานภาคสนาม
หมายเหตุ แอปพลิเคชันนี้ ไม่ สามารถใช้งานได้กับควันดั้งเดิมของ Thermoworks หรือ Thermoworks ส่งสัญญาณผลิตภัณฑ์
Smoke X ถูกสร้างขึ้นอย่างแม่นยำแม่นยำมีช่วง RF ที่ยอดเยี่ยมและไม่ต้องการให้อินเทอร์เน็ตทำงานได้ แต่หน่วยรับสัญญาณที่ให้ไว้จะแสดงการอ่านโพรบปัจจุบันเท่านั้นโดยไม่มีการบันทึกหรือติดตามแนวโน้ม

แอปพลิเคชันนี้ช่วยให้ผู้ใช้ Smoke X รวบรวมข้อมูลอุณหภูมิจากสัญญาณ RF และแสดงภาพประวัติอุณหภูมิผ่านเว็บ UI (เสิร์ฟโดย ESP32) แดชบอร์ดผู้ช่วยที่บ้านและ/หรือเครื่องมือสร้างภาพข้อมูลอื่น ๆ



ข้อมูลทั้งหมดจะได้รับประมวลผลและจัดเก็บในเครื่องดังที่แสดงด้านล่าง:
ผังงาน LR
ฐาน -> | Lora RF | esp32
mqclient -> mq
MQ -> ฮ่า
เว็บ -> เบราว์เซอร์ (เว็บเบราว์เซอร์ใด ๆ )
Subgraph Smoke x2/x4
โพรบ -> ฐาน (สถานีฐาน) -> | Lora RF | Recv (ตัวรับสัญญาณ)
Billows -> ฐาน
จบ
subgraph esp32 [smoke-x-receiver]
MQClient (ไคลเอนต์ MQTT)
เว็บ (เซิร์ฟเวอร์ HTTP)
จบ
Subgraph MQTTB [MQTT BROKER]
MQ (หัวข้อ HomeAssistant)
จบ
ผู้ช่วยบ้านย่อย
mq_int
จบ
Subgraph HA_DEV [อุปกรณ์ HA สำหรับ x2/x4]
E1 (เอนทิตีเซ็นเซอร์ไบนารี)
E2 (เอนทิตีเซ็นเซอร์)
จบ
Subgraph MQ_INT [MQTT Integration]
HA (การค้นพบอัตโนมัติ) -> HA_DEV
Ha_dev
จบ
แม้ว่าคุณจะไม่ได้เป็นผู้ใช้ผู้ช่วยที่บ้านคุณยังสามารถใช้เว็บอินเตอร์เฟสในตัวของแอปพลิเคชันนี้เพื่อตรวจสอบอุณหภูมิของคุณและดูแนวโน้ม
ESP32 ที่มีตัวรับส่งสัญญาณ Semtech Lora ที่ทำงานในวงดนตรี ISM 915 MHz เป็นสิ่งจำเป็น คณะกรรมการพัฒนา ESP32+LORA รวมเช่น Heltec Wifi Lora 32 V2 หรือ V3 นั้นเหมาะอย่างยิ่ง แต่คณะกรรมการ ESP32 ใด ๆ ที่มี SPI เชื่อมต่อ SX1276 หรือ SX1262 ควรทำงาน
$ 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 ) คุณต้องเลือกไดรเวอร์ SX127X ในเมนู "Smoke X ตัวรับสัญญาณ HW/App Config" และกำหนดค่าการกำหนด SX127X SPI PIN SPI
อาจจำเป็นต้องมีการเปลี่ยนแปลงการกำหนดค่าเพิ่มเติมเพื่อรองรับฮาร์ดแวร์เฉพาะหรือความต้องการอื่น ๆ ของคุณ
$ idf.py set-target esp32s3 # If using a Heltec WiFi LoRa 32 v3, otherwise set target as appropriate to your hardware
$ idf.py flashแอปพลิเคชันและเว็บสินทรัพย์จะถูกสร้างและเขียนลงในแฟลช ESP32
หลังจาก ESP32 ถูกกะพริบแล้วหลายรายการจะต้องกำหนดค่าและบันทึกลงใน NVRAM การกำหนดค่าของรายการเหล่านี้จะคงอยู่หลังจากรีเซ็ต ESP32 รวมถึงการอัปเดตซอฟต์แวร์แอปพลิเคชัน
อุปกรณ์จะเริ่มต้นเป็นโหมด AP หากข้อมูล WLAN ยังไม่ได้รับการกำหนดค่าหรือหากการเชื่อมต่อล้มเหลว ข้อมูลโหมด AP เริ่มต้น (กำหนดค่าใน menuconfig) คือ:
เชื่อมต่อกับ AP ของ ESP32 และใช้เว็บเบราว์เซอร์เพื่อไปที่ http://192.168.4.1/wlan คุณจะได้รับการนำเสนอด้วยเว็บ UI ที่อธิบายตนเองเพื่อกำหนดค่าอุปกรณ์ไปยังเครือข่ายบ้านของคุณ รองรับ WPA2-PSK และ WPA2-Enterprise (EAP-TTLS) เมื่อคุณใช้ข้อมูลการตรวจสอบเครือข่ายอุปกรณ์จะรีเซ็ตและพยายามเข้าร่วมเครือข่ายที่บ้านของคุณ ESP32 จะจัดหาคำขอชื่อโฮสต์ไคลเอนต์ DHCP สำหรับ smoke_x เมื่อคุณพบ ESP32 บนเครือข่ายบ้านของคุณคุณสามารถดำเนินการต่อไปกับกระบวนการตั้งค่าที่เหลือ หาก ESP32 ล้มเหลวในการเข้าร่วมเครือข่ายของคุณจะเปลี่ยนเป็นโหมด AP เริ่มต้น
แท็บ "การจับคู่" ของเว็บ UI จะระบุว่าอุปกรณ์ต้องจับคู่กับหน่วยฐานควัน X หากอุปกรณ์อยู่ในสถานะที่ไม่มีคู่จะสลับการตรวจสอบช่อง SYNC ทั้งสอง (920 MHz สำหรับ X2, 915 MHz สำหรับ X4) และจะจับคู่กับการส่งควัน X SYNC ครั้งแรกที่ได้รับ ในการจับคู่ให้วางชุดฐาน Smoke X ในโหมดซิงค์ซึ่งจะทำให้มันส่งการซิงค์ระเบิดทุกสามวินาที เมื่อ ESP32 ได้รับและวิเคราะห์การระเบิดมันจะส่งการตอบสนองการซิงค์กับความถี่เป้าหมายและหน่วยฐานจะกลับสู่การทำงานปกติ ณ จุดนี้คุณสามารถยืนยันได้ในเว็บ UI ว่าอุปกรณ์นั้นจับคู่กับรหัสอุปกรณ์และความถี่เฉพาะ นี่เป็นครั้งเดียวที่ ESP32 จะส่งสัญญาณ LORA อุปกรณ์อาจไม่ได้รับการจับคู่ผ่านเว็บ UI การจับคู่/การจับคู่ของ ESP32 จะไม่ส่งผลกระทบต่อสถานะการจับคู่ของอุปกรณ์อื่น ๆ
เมื่อจับคู่หน้าสถานะจะแสดงกราฟอุณหภูมิ
Web UI ยังใช้ในการกำหนดค่าอุปกรณ์เพื่อเชื่อมต่อกับนายหน้า MQTT MQTT URI เป็นฟิลด์บังคับเพียงอย่างเดียวส่วนที่เหลือเป็นตัวเลือกและจะขึ้นอยู่กับการกำหนดค่านายหน้า MQTT เฉพาะของคุณ การรับรองความถูกต้องของเซิร์ฟเวอร์ MQTTS ได้รับการสนับสนุนโดยป้อน CA PEM ที่เชื่อถือได้ผ่าน Web UI ไม่รองรับ Auth ไคลเอนต์ PKI ในปัจจุบัน
หาก MQTT ได้รับการกำหนดค่าและเปิดใช้งานแอปพลิเคชันจะเผยแพร่ข้อความสถานะเมื่อได้รับการส่งสัญญาณ RF จากสถานีฐาน Smoke X สถานีฐานส่งทุกสามสิบวินาที เนื้อหาข้อความที่เผยแพร่คือ:
{
"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 Home Home หากอินสแตนซ์ผู้ช่วยบ้านของคุณมีการรวม 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
PRS เพื่อแก้ไขข้อบกพร่องหรือการปรับปรุงฟังก์ชั่นยินดีต้อนรับ! หากคุณสร้างแอปพลิเคชันสำเร็จแล้วคุณมีทุกสิ่งที่จำเป็นในการแก้ไข
อาจเป็นประโยชน์ในการตรวจสอบบันทึก ESP32 ในระหว่างการตั้งค่าแอปพลิเคชันเริ่มต้นเพื่อช่วยในการดีบัก ในขณะที่ ESP32 ยังคงเสียบเข้ากับคอมพิวเตอร์ของคุณตรวจสอบบันทึกโดยเรียกใช้:
$ idf.py monitor
แอปพลิเคชันนี้สร้างขึ้นด้วย ESP-IDF V4 SDK และมีการพึ่งพาภายนอกด้วยไดรเวอร์ LORA Modem ต่อไปนี้:
เว็บอินเตอร์เฟสถูกเขียนใน Vue และถูกโหลดลงในระบบไฟล์ Flash ESP32 เป็นสินทรัพย์เว็บคงที่ที่ถูกบีบอัดซึ่งให้บริการโดยเว็บเซิร์ฟเวอร์ ESP32 เพื่อช่วยในการพัฒนาและการทดสอบด้วยตนเองเว็บอินเตอร์เฟสสามารถดูตัวอย่างด้วย:
$ ./mock_web_ui.sh