Home Assistant Geiger Counter Integration: 8 ขั้นตอน
Home Assistant Geiger Counter Integration: 8 ขั้นตอน
Anonim
Image
Image
หลักการทำงาน
หลักการทำงาน

ในบทช่วยสอนนี้ ฉันจะแสดงวิธีเพิ่มเซ็นเซอร์แบบกำหนดเองให้กับ HASS (ผู้ช่วยในบ้าน) โดยเฉพาะตัวนับ geiger แต่กระบวนการนี้ก็คล้ายกันสำหรับเซ็นเซอร์อื่นๆ ด้วย

เราจะใช้บอร์ด NodeMCU ตัวนับ geiger ที่ใช้ Arduino และผู้ช่วยในบ้านที่ติดตั้งไว้แล้ว

การผสานรวมจะขึ้นอยู่กับเซิร์ฟเวอร์ MQTT (สาธารณะหรือส่วนตัว) และฉันจะนำคุณไปทีละขั้นตอนด้วยสิ่งนี้

ในกรณีที่คุณไม่ทราบว่าผู้ช่วยที่บ้านคืออะไร โปรดไปที่หน้า https://www.home-assistant.io/ เป็นแพลตฟอร์มระบบอัตโนมัติภายในบ้านที่รู้จักกันดีซึ่งได้รับการบำรุงรักษาเป็นอย่างดีและปรับแต่งได้สูง

คุณจะได้เรียนรู้เกี่ยวกับ:

- การกำหนดค่าขั้นสูงสำหรับ Home Assistant

- NodeMCU (บอร์ดพัฒนา) และวิธีตั้งโปรแกรมด้วย Arduino IDE

- OTA (อัปเดตผ่านอากาศ) โดยใช้ Arduino IDE สำหรับบอร์ด NodeMCU

- วิธีเชื่อมต่ออุปกรณ์อนุกรมกับ NodeMCU

- ติดตั้งเซิร์ฟเวอร์ MQTT ด้วยตนเองบน linux (ตัวเลือก)

สมมติฐานพื้นฐาน:

- คุณมี Home Assistant ทำงานอยู่

- คุณรู้เรื่องอิเล็กทรอนิกส์มาบ้างแล้ว

- คุณติดตั้ง Arduino IDE แล้ว

ขั้นตอนที่ 1: ชิ้นส่วนและเครื่องมือ

อะไหล่:

1. บอร์ด NodeMCU

2. เขียงหั่นขนม

3. สายจูเปอร์ตัวผู้-ตัวผู้-ตัวผู้-ตัวเมีย

3. สาย usb เป็น micro usb

4. ตัวนับ Arduino geiger พร้อมอินเทอร์เฟซแบบอนุกรม

(ค้นหา Ebay สำหรับ "arduino geiger couter")

5. วัสดุกัมมันตภาพรังสี (ตัวเลือกตัวอย่างทดสอบขนาดเล็ก)

เครื่องมือ:

1. Arduino IDE

2. ติดตั้ง Home Assistant

ขั้นตอนที่ 2: หลักการทำงาน

เป้าหมายของเราคือการแสดงค่าที่อ่านได้จากตัวนับ Geiger บน HomeAssistat (HASS) ด้านหนึ่งเรามีเซิร์ฟเวอร์ HASS และทำงานอยู่ที่ใดที่หนึ่ง อาจเป็นราสเบอร์รี่ pi หรืออุปกรณ์อื่นๆ และอีกด้านหนึ่ง เรามีเคาน์เตอร์ไกเกอร์

ตัวนับ geiger มีพอร์ตอนุกรม ทางออกหนึ่งคือการต่อพอร์ตอนุกรมเข้ากับ RaspberryPi ที่ HASS ทำงานโดยตรง

สาเหตุบางประการที่อาจไม่ใช่ความคิดที่ดี:

- ไม่มีพื้นที่ทางกายภาพที่นั่น

- เรามีอุปกรณ์อื่นบนพอร์ตอนุกรม

- เราต้องการติดเซ็นเซอร์สิ่งแวดล้อมที่ควรวางไว้ด้านนอกแทนเคาน์เตอร์ไกเกอร์

ตกลง เราจะสำรวจความเป็นไปได้อื่นในการเชื่อมต่อผ่าน WIFI:

HASS รองรับการอ่านข้อมูลเซ็นเซอร์และแสดงว่าผ่านเซิร์ฟเวอร์ MQTT เซิร์ฟเวอร์ประเภทนี้เป็นการเชื่อมต่อแบบ Lite Weight สำหรับอุปกรณ์ขนาดเล็ก อุปกรณ์เครื่องหนึ่งเผยแพร่ข้อความใน "หัวข้อ" ที่อีกเครื่องหนึ่งฟังในหัวข้อนั้นเพื่อรับข้อความ ดังนั้น HASS จะรับฟัง และเราต้องการบางสิ่งที่จะเผยแพร่ข้อความ

เซ็นเซอร์ของเรารู้เพียงเพื่อพูดคุยผ่านสายอนุกรม ดังนั้นเราจะใช้บอร์ดที่สามารถอ่านสายอนุกรมและที่สามารถเชื่อมต่อผ่าน WIFI และพูดคุยกับเซิร์ฟเวอร์ MQTT บอร์ดราคาถูกที่ทำสิ่งนี้คือ NodeMCU

NodeMCU สามารถตั้งโปรแกรมด้วย Arduino IDE ร่างนั้นค่อนข้างง่าย โดยทำดังต่อไปนี้:

- เชื่อมต่อกับ WIFI

- รักษาการเชื่อมต่อ MQTT กับเซิร์ฟเวอร์และลองเชื่อมต่อใหม่เมื่อล้มเหลวหรือถูกตัดการเชื่อมต่อ

- ฟังข้อมูลขาเข้าแบบอนุกรมเป็นชุดของจำนวนเต็ม

- เมื่อจำนวนเต็มมาถึง จะส่งผ่าน MQTT ไปยังหัวข้อเฉพาะ

ขั้นตอนที่ 3: ประกอบอุปกรณ์

ประกอบอุปกรณ์
ประกอบอุปกรณ์

เราจะใช้เขียงหั่นขนมและสายไฟ ดังนั้นมันจึงค่อนข้างง่าย เรามีไม่กี่ขั้นตอน:

- วาง NodeMCU บนเขียงหั่นขนม

- ต่อท่อไกเกอร์เข้ากับตัวนับไกเกอร์ (ระวังขั้ว)

- VIN ไปที่เคาน์เตอร์ geiger +

- GND ไปที่เคาน์เตอร์ไกเกอร์ -

- NodeMCU D7 (พิน 13) ไปที่ geiger TX

- NodeMCU D8 (พิน 15) ไปที่ geiger RX

- จ่ายไฟ NodeMCU ผ่านไมโคร USB จากคอมพิวเตอร์

ขั้นตอนที่ 4: อัปโหลดรหัส

อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด
อัพโหลดโค้ด

เราจะใช้ Arduino IDE และตรวจสอบให้แน่ใจว่าได้ติดตั้งบอร์ด NodeMCU และติดตั้งไลบรารี Adafruit_MQTT แล้ว

1. โคลนที่เก็บ github: https://github.com/danionescu0/arduino และคัดลอกภาพร่างจากโครงการ/HASSGeigerIntegration ไปยังตำแหน่งสมุดร่าง Arduino ของคุณ

2. เปิด Arduino IDE และติดตั้ง NodeMCU

- ไปที่ File -> Preferences ใน URL ของ Additional Boards Manager ให้เพิ่ม https://arduino.esp8266.com/stable/package_esp8266com_index.json หากคุณมีบางอย่างที่ทำให้โคม่าอยู่ข้างหน้าแล้วคลิกตกลง

- จาก Tools -> Board -> Board Manager พิมพ์ "nodemcu" แล้วเลือกรายการ esp8266 โดย ESP8266 Community แล้วกดติดตั้ง

3. ติดตั้ง Adafruit_MQTT

- ไปที่เครื่องมือ -> จัดการห้องสมุด -> ค้นหา "Adafruit_MQTT" และติดตั้ง "ห้องสมุด Arduino MQTT"

4. เสียบสาย USB เข้ากับคอมพิวเตอร์ของคุณและกำหนดค่าบอร์ด:

- ไปที่เครื่องมือ -> บอร์ด -> เลือก NodeMcu 1.0

- เครื่องมือ -> พอร์ต -> พอร์ต USB ของคุณ

- ปล่อยให้การตั้งค่าอื่น ๆ ไม่เปลี่ยนแปลง

4. ในภาพร่างเปลี่ยนข้อมูลรับรอง WIFI ของคุณให้ตรงกับของคุณเอง:

#define STASSID "ssid" // แทนที่ด้วย WIFI SSID. ของคุณ

#define STAPSK "pass" // แทนที่ด้วยรหัสผ่าน WIFI ของคุณ

5. อัพโหลดภาพสเก็ตช์ไปยังบอร์ดของคุณ และหลังจากการอัพโหลด ให้รีเซ็ตบอร์ดจากปุ่ม

6. เปิดจอภาพแบบอนุกรม ถ้าทุกอย่างเป็นไปด้วยดี คุณจะเห็นผลลัพธ์ดังนี้:

กำลังบูต

ที่อยู่ IP: 192.168.1.168 เปิดใช้งาน OTA กำลังเชื่อมต่อกับ MQTT… เชื่อมต่อ MQTT แล้ว! {"การแผ่รังสี": 0.03}..

ขั้นตอนที่ 5: กำหนดค่า HomeAssistant

กำหนดค่า HomeAssistant
กำหนดค่า HomeAssistant
กำหนดค่า HomeAssistant
กำหนดค่า HomeAssistant

เราจะถือว่าคุณมีผู้ช่วยที่บ้านทำงานอยู่ ในระบบของฉันฉันมี HASSOS เวอร์ชัน 3.12 บน RaspberryPi หาก Home Assistant เวอร์ชันเก่าหรือใหม่มาก คุณลักษณะบางอย่างอาจแตกต่างออกไป บทช่วยสอนนี้ใช้ได้กับเวอร์ชัน 3.12 อย่างแน่นอน

หากคุณไม่ได้ติดตั้ง Home Assistant โปรดดูคู่มือการติดตั้งอย่างเป็นทางการ:

ก่อนดำเนินการติดตั้ง ตรวจสอบให้แน่ใจว่าได้เสียบปลั๊ก NodeMCU และเผยแพร่ข้อมูลแล้ว

ตกลง เราจะมีขั้นตอนต่างๆ ที่นี่เช่นกันสำหรับการกำหนดค่า:

1. ติดตั้ง "ตัวแก้ไขไฟล์" หากคุณไม่มีในเมนู นี่คือบทช่วยสอนอย่างเป็นทางการ:

2. แก้ไขไฟล์ "/config/configuration.yaml" แล้วเพิ่มข้อมูลต่อไปนี้แล้วบันทึก

- ส่วน mqtt หากคุณยังไม่มี

mqtt:

โบรกเกอร์: Broker.hivemq.com การค้นพบ: การค้นพบจริง_prefix: ha

- ส่วนเซ็นเซอร์

เซ็นเซอร์:

- แพลตฟอร์ม: mqtt ชื่อ: "รังสี" state_topic: "ha/radiation" unit_of_measurement: 'uSv' unique_id: "radiation" value_template: "{{ value_json.radiation }}"

3. จากการกำหนดค่า -> การควบคุมเซิร์ฟเวอร์: กด "ตรวจสอบการกำหนดค่า" ตรวจสอบไฟล์กำหนดค่า yaml เพื่อหาข้อผิดพลาด จากนั้นกด "รีสตาร์ท" และรอจนกว่าจะรีสตาร์ท

4. จากภาพรวม -> เมนูมุมบนขวา -> กำหนดค่า UI -> กดปุ่ม + จากด้านล่างขวา

5. เลือก "sensor" จากรายการ -> ในช่อง "entity" ค้นหา "sensor.radiation" ในฟิลด์ชื่อเขียน "Radiation" แล้วคลิกตกลงควรอยู่ในหน้าหลักทันที

ขั้นตอนที่ 6: การกำหนดค่าเซิร์ฟเวอร์ MQTT ของคุณเอง [ไม่บังคับ]

มาพูดคุยกันเล็กน้อยเกี่ยวกับ MQTT

“MQTT เป็นเซิร์ฟเวอร์ไคลเอนต์เผยแพร่/สมัครรับโปรโตคอลการรับส่งข้อความ มีน้ำหนักเบา เปิดโล่ง เรียบง่าย และได้รับการออกแบบมาเพื่อให้ง่ายต่อการใช้งาน ลักษณะเหล่านี้ทำให้เหมาะอย่างยิ่งสำหรับการใช้งานในหลาย ๆ สถานการณ์ รวมถึงสภาพแวดล้อมที่มีข้อจำกัด เช่น สำหรับการสื่อสารในบริบท Machine to Machine (M2M) และ Internet of Things (IoT) ที่ต้องใช้รหัสขนาดเล็กและ/หรือแบนด์วิดท์เครือข่ายมีคุณภาพสูง”

การอ้างอิงจากข้อกำหนด MQTT 3.1.1 อย่างเป็นทางการ

โดยพื้นฐานแล้ว เราสามารถเผยแพร่ข้อความที่ใดที่หนึ่ง อีกด้านหนึ่ง เราสามารถฟังข้อความเหล่านั้น และทำบางสิ่งกับข้อมูล MQTT รองรับ "หัวข้อ" หัวข้อคือสตริงที่นายหน้าใช้ในการกรองข้อความสำหรับลูกค้าแต่ละราย ดังนั้นหากเราเผยแพร่ข้อความไปยังหัวข้อ "/radiation" ผู้ฟังจะต้องสมัครรับข้อความในหัวข้อเดียวกันเพื่อรับข้อความที่เรากำลังส่ง

นี่คือบทช่วยสอนที่ยอดเยี่ยมเกี่ยวกับ MQTT โดยละเอียด:

การใช้เซิร์ฟเวอร์ไฮฟ์ฟรีมีข้อเสียบางประการเช่น:

- ใครก็ตามที่ฟังหัวข้อของคุณจะได้รับข้อความของคุณ

- หากดาวน์หรือต้องชำระเงินในภายหลัง คุณจะไม่สามารถใช้งานได้ (เว้นแต่คุณจะจ่าย)

- หากใครก็ตามที่เผยแพร่ข้อความในหัวข้อเดียวกัน คุณจะได้รับข้อความของพวกเขาด้วย พวกเขาอาจเผยแพร่ข้อความที่เข้ากันไม่ได้และทำลายกราฟ HASS ของคุณ

การใช้เซิร์ฟเวอร์ส่วนตัว

หากคุณไม่ต้องการใช้เซิร์ฟเวอร์สาธารณะฟรี คุณสามารถเลือกเซิร์ฟเวอร์ส่วนตัวได้ เราจะติดตั้ง Mosquitto MQTT บนเซิร์ฟเวอร์ ubuntu / debian เช่น raspberry pi หรือคอมพิวเตอร์

Mosquitto เป็นเซิร์ฟเวอร์ที่ใช้โปรโตคอล MQTT และไม่เสียค่าใช้จ่าย

หากต้องการติดตั้งให้ลงชื่อเข้าใช้ raspnerry pi หรือเซิร์ฟเวอร์ที่ใช้เดเบียนอื่น ๆ แล้วเรียกใช้:

sudo apt อัปเดต

sudo apt install -y mosquitto mosquitto-clients sudo systemctl เปิดใช้งาน mosquitto.service

การดำเนินการนี้จะอัปเดตที่เก็บ ติดตั้งเซิร์ฟเวอร์และไคลเอนต์ mosquiito และเปิดใช้งานบริการเพื่อทำงานเมื่อเริ่มต้น

ในการรับเซิร์ฟเวอร์ ip ดำเนินการ:

ชื่อโฮสต์ -I

และมันจะแสดงผลเช่น:

192.168.1.52 172.17.0.1 172.18.0.1

ดังนั้น ip ของฉันคือ 192.168.1.52 ในคำสั่งด้านล่างให้แทนที่ด้วย ip. ของคุณเอง

คุณสามารถทดสอบเซิร์ฟเวอร์ MQTT ได้โดยเผยแพร่ข้อความและรับข้อความด้วยเครื่องมือคอนโซล สำหรับเทอร์มินัลสองเครื่องนี้จะต้องเปิดเทอร์มินัลหนึ่งที่รับฟังข้อความ อีกอันหนึ่งที่จะเผยแพร่ข้อความ

ขั้นแรกในเทอร์มินัลให้รันคำสั่งนี้เพื่อฟังข้อความใน "/some-topic"

mosquitto_sub -h 192.168.1.52 -t /some-topic

เปิดเทอร์มินัลอื่นและเผยแพร่ข้อความไปยังหัวข้อนั้น:

mosquitto_pub -h 192.168.1.52 -t /some-topic -m '{"humidity": 74.0}'

ในเทอร์มินัลแรก คุณจะเห็น ' {"humidity": 74.0}' พิมพ์ออกมา

ความสนใจเป็นพิเศษ:

- การตั้งค่านี้ถือว่า HASS, Mosquitto และ NodeMCU เชื่อมต่อกับเครือข่าย WIFI เดียวกันและไม่มีกฎไฟร์วอลล์และสามารถสื่อสารได้อย่างอิสระ

- เซิร์ฟเวอร์ Mosquitt MQTT ไม่มีชื่อผู้ใช้/รหัสผ่าน หากคุณต้องการตั้งค่าข้อมูลรับรอง ให้ลองดูที่: https://www.steves-internet-guide.com/mqtt-username-password-example/ นอกจากนี้ คุณจะต้องกำหนดค่า ข้อมูลประจำตัวใน Home Assistant และใน Arduino Sketch

ขั้นตอนที่ 7: OTA (การอัปเดตผ่านอากาศ) สำหรับ NodeMCU

การอัปเดตทางอากาศหมายความว่าบอร์ดพัฒนาสามารถแฟลชแบบไร้สายได้โดยไม่ต้องใช้สายเคเบิลจริง

Arduino IDE รองรับฟังก์ชันนี้สำหรับซีรี่ส์ ESP8266 และบอร์ดอื่นๆ:

- ต้องใช้แฟลชเริ่มต้นผ่านสาย USB

- สร้างพอร์ตเสมือนผ่าน WIFI และมองเห็นได้จาก Arduino IDE. เท่านั้น

- ไม่มีข้อมูลการดีบักแบบอนุกรมพร้อมใช้งาน

- รองรับการป้องกันด้วยรหัสผ่าน

ในการเปิดใช้งาน OTA ในแบบร่าง ESP8266 ก่อนอื่นให้รวมไลบรารี:

#รวม "ArduinoOTA.h"

กำหนดค่าคงที่รหัสผ่านแบบร่างนี้ด้วย:

#define SKETCHPASS "some_password"

ในส่วนการตั้งค่าให้เพิ่มบรรทัดเหล่านี้:

ในขณะที่ (WiFi.waitForConnectResult() != WL_CONNECTED) {

Serial.println("การเชื่อมต่อล้มเหลว! กำลังรีบูต…"); ล่าช้า (5000); ESP.รีสตาร์ท(); } ArduinoOTA.setPassword(SKETCHPASS); ArduinoOTA.onStart ( () { ประเภทสตริง ถ้า (ArduinoOTA.getCommand () == U_FLASH) { type = "sketch"; } else { // U_FS type = "filesystem"; } Serial.println ("เริ่มการอัปเดต " + ประเภท); }); ArduinoOTA.onEnd(() { Serial.println("\nEnd"); }); ArduinoOTA.onProgress ( (ความคืบหน้า int ที่ไม่ได้ลงนาม, รวม int ที่ไม่ได้ลงนาม) { Serial.printf ("ความคืบหน้า: %u%%\r", (ความคืบหน้า / (รวม / 100))); }); ArduinoOTA.onError((ota_error_t error) { Serial.printf("Error[%u]: ", error); if (error == OTA_AUTH_ERROR) { Serial.println ("Auth Failed"); } else if (ข้อผิดพลาด) == OTA_BEGIN_ERROR) { Serial.println ("Begin Failed"); } else if (ข้อผิดพลาด == OTA_CONNECT_ERROR) { Serial.println ("Connect Failed"); } else if (ข้อผิดพลาด == OTA_RECEIVE_ERROR) { Serial.println (" รับล้มเหลว"); } else if (ข้อผิดพลาด == OTA_END_ERROR) { Serial.println ("End Failed"); } }); ArduinoOTA.begin(); Serial.print("ที่อยู่ IP:"); Serial.println(WiFi.localIP());

และในส่วนลูปให้เพิ่มบรรทัดนี้:

ArduinoOTA. จัดการ ();

หลังจากการอัปโหลดโค้ดเริ่มต้นของคุณหลังจากที่บอร์ดบูทขึ้น คุณจะเห็นพอร์ตสองประเภทใน Arduino IDE ในส่วนเครื่องมือ->พอร์ต:

พอร์ตอนุกรม: /dev/ttyUSB0 (ตัวอย่าง)

พอร์ตเครือข่าย: esp8266-xxxxx ที่ 192.168.1.xxx

ตอนนี้ คุณสามารถเลือกพอร์ตเครือข่ายและอัปโหลดรีโมทสเก็ตช์ได้แล้ว คุณจะได้รับแจ้งให้ใส่รหัสผ่านแบบร่าง (อันที่คุณได้กำหนดไว้ในค่าคงที่ด้านบน)

ขั้นตอนที่ 8: บทสรุป งานในอนาคต

บทช่วยสอนนี้สามารถแก้ไขได้ง่ายเพื่อส่งข้อมูลเกี่ยวกับเซ็นเซอร์ประเภทอื่น:

- หาก NodeMCU รองรับเซ็นเซอร์ของคุณโดยตรงผ่านไลบรารี เพียงรวมข้อมูลจากเซ็นเซอร์แล้วส่งผ่าน MQTT โดยตรง

- หากไลบรารีเซ็นเซอร์ไม่ทำงานกับ NodeMCU แต่สำหรับ Arduino เท่านั้นให้อัปโหลดรหัสของคุณไปยัง Arduino ส่งออกค่าผ่านสายอนุกรมแล้วอ่านใน NodeMCU แล้วกด (เช่นเดียวกับที่เราทำกับตัวนับ geiger)

เรายังปรับเปลี่ยนเพื่อส่งข้อมูลจากเซ็นเซอร์หลายตัวได้ เช่น

- เชื่อมต่อเซ็นเซอร์ของคุณกับ NodeMCU

- ข้อมูลการสำรวจความคิดเห็นจากเซ็นเซอร์แต่ละตัว

- สำหรับเซ็นเซอร์แต่ละตัวเผยแพร่ข้อมูลไปยังหัวข้อที่แตกต่างกัน

- ใน HASS กำหนดเซ็นเซอร์หลายตัว (เหมือนที่เราทำกับไกเกอร์) ที่จะรับฟังหัวข้อต่างๆ