สารบัญ:

Home Assistant Geiger Counter Integration: 8 ขั้นตอน
Home Assistant Geiger Counter Integration: 8 ขั้นตอน

วีดีโอ: Home Assistant Geiger Counter Integration: 8 ขั้นตอน

วีดีโอ: Home Assistant Geiger Counter Integration: 8 ขั้นตอน
วีดีโอ: Home Assistant 2023 8 TOP new Features 2024, กรกฎาคม
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 กำหนดเซ็นเซอร์หลายตัว (เหมือนที่เราทำกับไกเกอร์) ที่จะรับฟังหัวข้อต่างๆ

แนะนำ: