สารบัญ:

แสงเดือนรอมฎอน - ระบบอัตโนมัติภายในบ้าน IOT: 6 ขั้นตอน
แสงเดือนรอมฎอน - ระบบอัตโนมัติภายในบ้าน IOT: 6 ขั้นตอน

วีดีโอ: แสงเดือนรอมฎอน - ระบบอัตโนมัติภายในบ้าน IOT: 6 ขั้นตอน

วีดีโอ: แสงเดือนรอมฎอน - ระบบอัตโนมัติภายในบ้าน IOT: 6 ขั้นตอน
วีดีโอ: Xiaomi พาเสียตัง เปิดตัวอุปกรณ์ IOT มือถือรุ่นใหม่ เทพๆ ราคาคุ้ม! 2024, กรกฎาคม
Anonim
แสงเดือนรอมฎอน | ระบบอัตโนมัติในบ้าน IOT
แสงเดือนรอมฎอน | ระบบอัตโนมัติในบ้าน IOT

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

ในโปรเจ็กต์นี้ ฉันต้องการแบ่งปันผลงานของฉัน ซึ่งฉันกำลังทำให้การตกแต่งเหล่านี้สว่างขึ้นโดยอัตโนมัติตามเวลา Adhan และเพิ่มสิ่งนี้ลงในระบบบ้านอัจฉริยะของฉัน

ขั้นตอนที่ 1: ทฤษฎี

โดยพื้นฐานแล้ว การปรับแสงอัตโนมัติตามความเข้มของแสงแดดทำได้ง่ายกว่าและเหมาะสมกว่า แต่อยากให้มีวิญญาณเดือนศักดิ์สิทธิ์คือไฟจะสว่างตราบเท่าที่คนยังกินได้ในช่วงเดือนถือศีลอด โดยเฉพาะอย่างยิ่ง เปิดไฟตั้งแต่ Maghrib Adhan จนถึง Fajr Adhan ในแต่ละวันโดยไม่มีการโต้ตอบของมนุษย์

ขั้นตอนที่ 2: ออกแบบ

ด้านล่างฉันจะแสดงรายการข้อกำหนด/ความสามารถของโครงการนี้:

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

ขั้นตอนที่ 3: รายละเอียดทางเทคนิค: API

รายละเอียดทางเทคนิค: API
รายละเอียดทางเทคนิค: API

เพื่อให้ทฤษฎีสามารถนำไปใช้ได้ จำเป็นต้องรู้เวลาอาซานบนฐานรายวันเนื่องจากตัวแปรและดำเนินการตามนั้นเพื่อเปิด/ปิดไฟ/เครื่องตกแต่ง

เพื่อจุดประสงค์นี้ ฉันตัดสินใจใช้ API ตามตำแหน่งเพื่อให้บริการข้อมูล (เวลาสำหรับ Adhan)

muslimsalat.com/api/#location

  • API นี้มีตัวเลือกและพารามิเตอร์การกำหนดค่าที่หลากหลายตามที่อธิบายไว้ในลิงก์เอกสารด้านบน
  • ขอแนะนำให้ใช้ API_key ของคุณเองซึ่งฟรีเมื่อลงทะเบียน
  • ในการออกแบบของฉัน ฉันสนใจไทม์ไลน์รายวัน
  • เวลาที่ส่งคืนอยู่ในรูปแบบ 12 ชม. (AM/PM)
  • ในแง่ของตำแหน่ง ฉันหวังว่า API นี้จะมีตัวเลือกที่แม่นยำมากขึ้นสำหรับสถานที่ เช่น ระบบพิกัดพิกัดทางภูมิศาสตร์ (ละติจูดและลองจิจูด) สำหรับลักษณะนี้ API นี้สามารถระบุชื่อเมืองได้ และในกรณีส่วนใหญ่ก็เพียงพอแล้ว น่าเสียดายที่ผลลัพธ์ของเมืองเฉพาะของฉันค่อนข้างลำเอียงในการทดสอบหลายครั้ง และมีความแตกต่างสองสามนาทีเมื่อเปรียบเทียบเวลา Adhan ระหว่างผลลัพธ์ API กับเวลาจริงของ Adhan ในเมืองของฉัน ในทางกลับกัน ผลลัพธ์ก็เข้ากันดีเมื่อฉันให้เมืองที่อยู่ใกล้ทางตอนเหนือและฉันก็ยึดติดกับมัน!
  • URL ของ API ที่ฉันใช้คือ:https://muslimsalat.com/.json?key=

ขั้นตอนที่ 4: รายละเอียดทางเทคนิค: ฮาร์ดแวร์

รายละเอียดทางเทคนิค: ฮาร์ดแวร์
รายละเอียดทางเทคนิค: ฮาร์ดแวร์

เพื่อความง่าย ฉันกำลังปล่อยให้ฮาร์ดแวร์ไม่อยู่ในกระบวนการซิงค์กับ API และการคำนวณเวลาโดยการมอบหมายการดำเนินการเหล่านี้ให้กับ Home Automation System ของฉัน สิ่งนี้จะทำให้ฉันสามารถควบคุมได้มากขึ้นหากฉันต้องการปรับแต่งแหล่งที่มาของ API และอัลกอริธึมการคำนวณ

ที่กล่าวว่า ฉันใช้ ESP8266 (NodeMCU) เพื่อเชื่อมต่อกับเครือข่ายท้องถิ่นผ่าน WIFI และโมดูลรีเลย์เป็นตัวกระตุ้น NodeMCU จะใช้โปรโตคอล MQTT และฟังหัวข้อเฉพาะเพื่อรับคำสั่งในการเปิด/ปิดรีเลย์ ง่ายๆ แค่นี้เอง!

ขั้นตอนที่ 5: รายละเอียดทางเทคนิค: เชื่อมต่อจุด | ระบบอัตโนมัติในบ้าน

รายละเอียดทางเทคนิค: Connecting the Dots | ระบบอัตโนมัติในบ้าน
รายละเอียดทางเทคนิค: Connecting the Dots | ระบบอัตโนมัติในบ้าน
รายละเอียดทางเทคนิค: การเชื่อมต่อจุด | ระบบอัตโนมัติในบ้าน
รายละเอียดทางเทคนิค: การเชื่อมต่อจุด | ระบบอัตโนมัติในบ้าน
รายละเอียดทางเทคนิค: การเชื่อมต่อจุด | ระบบอัตโนมัติในบ้าน
รายละเอียดทางเทคนิค: การเชื่อมต่อจุด | ระบบอัตโนมัติในบ้าน

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

ตอนแรก ฉันคิดว่าฉันสามารถดึงข้อมูล API บนฐานรายวันเวลา 9.00 น. และดึงข้อมูลทั้งเวลา Fajr และ Mahgrib Adhan และเปรียบเทียบเวลาปัจจุบันกับตัวแปรเหล่านี้ต่อไป นั่นคือ:

ทุก ๆ 30 วินาที:

ถ้า: Mahgrib < NOW < Fajr true | เปิดไฟ | เผยแพร่ข้อความ ON ไปยังหัวข้อ MQTT ที่ระบุ อย่างอื่น: ปิด

สำหรับการเปรียบเทียบเวลา ฉันกำลังแปลงชั่วโมงที่ API ให้ไว้จาก hh:mm(AM/PM) เป็นรูปแบบวันที่แบบเต็มโดยการตั้งค่าส่วนวันที่เป็นวันที่เล็กน้อยในประวัติ เช่น (1/1/1970) เนื่องจากเรากำลังเปรียบเทียบเวลา เฉพาะเวลาปัจจุบัน (ส่วนวันที่จะถูกแปลงด้วย)

น่าเสียดายที่วิธีนี้ใช้ได้เฉพาะในกรณีที่ตรงไปตรงมาเท่านั้น สมมติว่าไฟฟ้าดับหรือระบบรีสตาร์ทด้วยเหตุผลที่ไม่ได้วางแผนไว้ หากกรณีนี้เกิดขึ้นก่อน 02.00 น. แสดงว่าเรายังปลอดภัย แต่หลังจากเวลา 02.00 น. อัลกอริทึมแบบง่ายของเราจะล้มเหลว

ยกตัวอย่าง ให้มี Magrib Adhan เวลา 19:30 น. และ Fajr เวลา 4:10 น. เมื่อระบบเริ่มทำงาน ระบบจะส่งคำขอใหม่เพื่อดึงข้อมูลที่กล่าวถึงก่อนหน้านี้ หากเวลาตอนนี้คือ 01:45 น. เราคาดว่าอัลกอริทึมของเราจะคืนค่าเป็นจริง แต่จริง ๆ แล้วมันจะไม่เป็นเช่นนั้นเพราะ 1:45 น. น้อยกว่า Fajr (4:10 น.) แต่ไม่มากไปกว่า Magrib (19:30 น.) นี่เป็นเพราะเรารวมวันที่ระหว่างตัวแปรทั้งหมด ด้านล่างนี้เป็นเวอร์ชันสุดท้ายของอัลกอริทึม (จนถึงตอนนี้):

ทุก ๆ 30 วินาที:

ถ้า ((magrib.getHours() >=12 && fajr.getHours() <=12) || fajr < maghrib) { fajr.setDate(fajr.getDate()+1); // จัดการกับ endTime ของวัน ถ้า (now.getHours() <=12) { now.setDate(now.getDate()+1); // handle spanning days currentTime } } // ด้านล่างเป็นบล็อกโค้ดก่อนหน้าถ้า: Mahgrib < NOW < Fajr true | เปิดไฟ | เผยแพร่ข้อความ ON ไปยังหัวข้อ MQTT ที่ระบุ อย่างอื่น: false | ปิด

ขั้นตอนที่สมบูรณ์ของกระบวนการมีคำอธิบายประกอบในภาพด้านบน

ในแง่ของ UI ฉันได้เพิ่มสวิตช์ 2 ตัวไปที่ UI/อินเทอร์เฟซ:

  1. สวิตช์เพื่อเปลี่ยนกระบวนการนี้เป็นแบบอัตโนมัติหรือแบบแมนนวล
  2. สวิตช์เปิด/ปิดไฟด้วยตนเอง

ขั้นตอนที่ 6: สรุป.

เวลาผ่านไปไม่เคยจำ การทำโปรเจ็กต์ง่ายๆ ใน 1 วันจะทำให้คุณได้สูดลมหายใจในช่องทางที่รวดเร็วนี้ และช่วยให้คุณฟื้นทักษะด้านซอฟท์แวร์ของคุณเมื่อเวลาผ่านไป

ฉันพยายามมากในโครงการนี้เพื่อให้ง่ายและใช้ซ้ำได้ทั่วโลก

กรุณาลงคะแนนสำหรับคำแนะนำนี้หากคุณคิดว่าโครงการนี้สมควรได้รับ

มีความสุขเดือนรอมฎอน!

แนะนำ: