תוכן עניינים:

אורות הרמדאן - אוטומציה ביתית IOT: 6 שלבים
אורות הרמדאן - אוטומציה ביתית IOT: 6 שלבים

וִידֵאוֹ: אורות הרמדאן - אוטומציה ביתית IOT: 6 שלבים

וִידֵאוֹ: אורות הרמדאן - אוטומציה ביתית IOT: 6 שלבים
וִידֵאוֹ: ראש המועצה האיסלמית לפסקי הלכה בהנחיות לתושבים לקראת הרמדאן 2024, נוֹבֶמבֶּר
Anonim
אורות הרמדאן | אוטומציה ביתית IOT
אורות הרמדאן | אוטומציה ביתית IOT

כשהרמדאן דופק בדלת, ערים ברחבי העולם מאירות ומתכוננות לחודש הצום. אורות תלויים בכיכרות ציבוריות וברחובות העיר כמו גם על קירות חיצוניים של בתים המוארים במהלך הלילות עד שהשמש זורחת בבוקר.

בפרויקט זה, אני רוצה לשתף את התרומה שלי, שבה אני אוטומטית את הדלקת הקישוטים האלה על סמך זמני אדהאן ומוסיפה זאת למערכת הבית החכם שלי.

שלב 1: תיאוריה

ביסודו של דבר, קל ויישום יותר להפוך את התאורה לאוטומטית על סמך עוצמת השמש, למשל. עם זאת, הייתי רוצה שתהיה לו רוח החודש הקדוש כלומר, האורות יידלקו כל עוד אנשים רשאים לאכול במהלך חודש הצום. בפרט, האורות דולקים החל ממג'ריב אדהאן עד פאג'ר אדהאן בכל יום ללא כל אינטראקציה אנושית.

שלב 2: עיצוב

להלן אפרט את הדרישות/היכולות של פרויקט זה:

  • המערכת אמורה להיות מסוגלת לעבד אוטומטית בעת האתחול.
  • המערכת צריכה להיות מסוגלת לבצע מעת לעת את אלגוריתם ההחלטה (ON/OFF).
  • המערכת צריכה להיות מסוגלת לקרוא ל- API על בסיס יומי.
  • המערכת אמורה להיות מסוגלת להתאושש מהפעלה מחדש לא מתוכננת.
  • המערכת צריכה לבצע את אלגוריתם ההחלטה (ON/OFF) עם קבלת נתונים באופן מיידי.
  • המערכת צריכה לספק מתג להפעלת מצב הטייס האוטומטי (מצב אוטומטי).
  • המערכת צריכה לספק מתג להפעלה/כיבוי ידני של האורות.
  • הפעלת המתג הידני צריכה להגדיר את המצב הידני למצב כבוי.
  • כאשר מצב אוטומטי מופעל, התוצאה של אלגוריתם ההחלטות צריכה לבוא לידי ביטוי במתג הפעלה/כיבוי ידני.

שלב 3: פרטים טכניים: ה- API

פרטים טכניים: ה- API
פרטים טכניים: ה- API

כדי להפוך את התאוריה ליישומית, יש צורך לדעת את זמן אדהאן על בסיס יומיומי מאז המשתנה שלה ולפעול על פיה כדי להדליק/לכבות את האורות/הקישוטים.

לשם כך, החלטתי להשתמש בממשק API מבוסס מיקום כדי לשרת את הנתונים (זמן לאדהאן)

muslimsalat.com/api/#location

  • API זה מספק מגוון אפשרויות ופרמטרי תצורה המתוארים בקישור התיעוד למעלה.
  • מומלץ להשתמש במפתח API_key משלך שהוא בחינם עם ההרשמה.
  • בעיצוב שלי, אני מעוניין בלוח זמנים יומי.
  • הזמן המוחזר הוא בפורמט 12 שעות (AM/PM).
  • מבחינת המיקום, רציתי אם ה- API הזה יכול לספק אפשרויות מדויקות יותר למיקומים כמו מערכת קואורדינטות גיאוגרפיות (קו הרוחב והאורך). באופן זה ניתן לספק ל- API זה שם עיר למשל וזה מספיק ברוב המקרים. לרוע המזל, התוצאות של העיר הספציפית שלי היו מוטות למדי במספר בדיקות והיו הבדלים של כמה דקות בהשוואת זמן אדהאן בין תוצאות API לזמן האמיתי של אדהאן בעיר שלי. מצד שני, התוצאות התאימו באופן מושלם כאשר סיפקתי עיר צמודה מצפון ואני דבקתי בה!
  • כתובת ה- URL שבה אני משתמש היא: https://muslimsalat.com/.json? Key =

שלב 4: פרטים טכניים: חומרה

פרטים טכניים: חומרה
פרטים טכניים: חומרה

לשם הפשטות, אני משאיר את החומרה מחוץ לתהליך הסנכרון עם ה- API וחישוב הזמן על ידי האצלת פעולות אלה למערכת האוטומציה הביתית שלי. זה ייתן לי יותר שליטה אם אני רוצה לשנות את מקור ה- API ואת אלגוריתם החישוב.

אחרי שאמרתי את זה, השתמשתי ב- ESP8266 (NodeMCU) כדי להתחבר לרשת המקומית באמצעות WIFI ומודול ממסר כמפעיל. ה- NodeMCU ישתמש בפרוטוקול MQTT ויקשיב לנושא ספציפי כדי לקבל פקודות להפעלה/כיבוי של הממסר. פשוטו כמשמעו!

שלב 5: פרטים טכניים: חיבור הנקודות | בית אוטומטי

פרטים טכניים: חיבור הנקודות | בית אוטומטי
פרטים טכניים: חיבור הנקודות | בית אוטומטי
פרטים טכניים: חיבור הנקודות | בית אוטומטי
פרטים טכניים: חיבור הנקודות | בית אוטומטי
פרטים טכניים: חיבור הנקודות | בית אוטומטי
פרטים טכניים: חיבור הנקודות | בית אוטומטי

ה- RaspberryPi שלי מחזיק מופע מצוין המסוגל להתמודד עם כל מה שאני צריך לפרויקט זה. יש לו גם שרת MQTT המותקן לפרסום ההודעות שלנו.

בהתחלה חשבתי שאני יכול להביא את נתוני ה- API על בסיס יומי בשעה 9:00 ולחלץ הן את פאג'ר והן את מהריב אדהאן ולהמשיך להשוות את הזמן הנוכחי עם המשתנים האלה כלומר:

כל 30 שניות:

אם: מהגריב <עכשיו <פאג'ר נכון | הדלק את האורות | פרסם הודעת ON לנושא MQTT שצוין אחרת: כבה

לצורך השוואת הזמן, אני ממיר שעות המסופקות על ידי ה- API מ- h: mm (AM/PM) לתבנית תאריך מלאה על ידי הגדרת נתח התאריך לתאריך זניח בהיסטוריה, למשל (1/1/1970) מכיוון שאנו משווים את השעה רק לשעה הנוכחית (נתח התאריך מומר גם).

למרבה הצער, זה יעבוד רק במקרים פשוטים. נניח את המקרה כאשר החשמל יורד או שהמערכת מופעלת מחדש מסיבה לא מתוכננת. אם מקרה זה מתרחש לפני השעה 12:00, אנו עדיין נמצאים בצד הבטוח, אך לאחר השעה 12:00 זה לא יכשל את האלגוריתם הפשוט שלנו.

כדי לתת דוגמא, נזמין את מגריב אדהאן בשעה 19:30 ופאג'ר בשעה 4:10 בבוקר. כאשר המערכת אתחלה היא תשלח בקשה חדשה לאחזר את הנתונים שהוזכרו קודם לכן. אם השעה כעת היא 1:45 בבוקר אנו מצפים שהאלגוריתם שלנו יחזור לאמת, אך למעשה זה לא יקרה מכיוון ש -1: 45 בבוקר הוא פחות מפאג'ר (4:10 בבוקר) אך הוא אינו גדול מזה של מגריב (19:30). הסיבה לכך היא שאנו מאחדים את התאריך בין כל המשתנים. להלן הגרסה הסופית של האלגוריתם (עד כה):

כל 30 שניות:

if ((magrib.getHours ()> = 12 && fajr.getHours () <= 12) || fajr <maghrib) {fajr.setDate (fajr.getDate ()+1); // לטפל בימים המתפרסים endTime if (now.getHours () <= 12) {now.setDate (now.getDate ()+1); // לטפל בימים ההם currentTime}} // להלן בלוק הקוד הקודם אם: Mahgrib <NOW <Fajr true | הדלק את האורות | פרסם הודעת ON לנושא MQTT שצוין אחרת: false | לכבות

הזרימה המלאה של התהליך מובא בתמונה למעלה.

מבחינת ממשק משתמש, הוספתי 2 מתגים לממשק/ממשק:

  1. מתג להפעלת תהליך זה אוטומטי או ידני.
  2. מתג להפעלה/כיבוי של האורות באופן ידני.

שלב 6: סיכום

הזמן טס לעולם לא להיזכר. ביצוע פרויקטים פשוטים של יום אחד מאפשר לך לנשום בנתיב המהיר הזה ולעזור לך להחיות את כישוריך הרכים לאורך זמן.

ניסיתי בפרויקט הזה כמה שיותר לשמור אותו פשוט וניתן לשימוש חוזר ברחבי העולם.

אנא הצביע עבור ההנחיה הזו אם אתה חושב שהפרויקט הזה ראוי.

חג רמדאן שמח!

מוּמלָץ: